如果您的维度也有动态计算,这是可行的。让我再举一个例子,但想法是一样的。
我有一个维度 [重复客户],如果客户(通过电子邮件识别)第二次、第三次、第四次签名 - 将此客户移动到此维度的适当成员。
首先,使用一个默认成员创建维度。
其次,添加几个空成员:
(您可以跳过它,因为在您的情况下,dim 成员已具体化)
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[One] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[Two] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[Three] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[Four] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[Five] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[6+] as NULL;
CREATE MEMBER CURRENTCUBE.[Repeat Customers].[Repeat Customers].[All].[N/A] as NULL;
第三,添加他们的计算:
SCOPE([Repeat Customers].[Repeat Customers].[All].[One],[Measures].[Count]);
THIS=Count(Filter([Email].[Email].Members,([Measures].[Count],[Repeat Customers].[Repeat Customers].&[0])=1));
END SCOPE;
SCOPE([Repeat Customers].[Repeat Customers].[All].[Two],[Measures].[Count]);
THIS=Count(Filter([Email].[Email].Members,([Measures].[Count],[Repeat Customers].[Repeat Customers].&[0])=2));
END SCOPE;
...
SCOPE([Repeat Customers].[Repeat Customers].[All].[6+],[Measures].[Count]);
THIS=Count(Filter([Email].[Email].Members,([Measures].[Count],[Repeat Customers].[Repeat Customers].&[0])>=6));
END SCOPE;
SCOPE([Repeat Customers].[Repeat Customers].[All].[N/A],[Measures].[Count]);
THIS=([Measures].[Count],[Repeat Customers].[Repeat Customers].&[0])
-SUM({
[Repeat Customers].[Repeat Customers].[All].[One]
,[Repeat Customers].[Repeat Customers].[All].[Two]
,[Repeat Customers].[Repeat Customers].[All].[Three]
,[Repeat Customers].[Repeat Customers].[All].[Four]
,[Repeat Customers].[Repeat Customers].[All].[Five]
,[Repeat Customers].[Repeat Customers].[All].[6+]
},[Measures].[Count]);
END SCOPE;
输出:
我认为您的过滤器必须使用 >= 和 1 - TextA 是否与 [Measures].[Nr_Days_Calculated] 相关?如果是,我们很好,在我的情况下,只需使用您的度量和 SUM 或作为聚合而不是 Count()。
这不是最佳性能解决方案(因为动态计算),但它仍然有效。希望对您有所帮助。