2013-08-21 13 views
0

如何创建通用计算成员,我可以重复使用以计算任何逻辑相关维度和度量的统计偏差?我需要能够选择任何维度和度量。如何为统计函数Stdev创建和使用泛型计算?

我发现相关的讨论here从中我拿stdDev函数的例子。

我创建了计算,但结果为空。

CREATE MEMBER CURRENTCUBE.[Measures].calcTest 
AS iif(IsEmpty(Axis(0).Item(0)), NULL, 
StdDev(Axis(1).Item(0).Item(0).Dimension.Children, Axis(0).Item(0))), 
FORMAT_STRING = "#,##0.00;-#,##0.00", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'TestMeasure' ; 
+0

你能发表一个查询,你可以在这个查询中使用这个计算指标吗? – michele

回答

1

如果你想使用它的一切措施,你会把你的calcTest成员在查询中不使用,也许一个实用的层次结构(见下文),另一个层次,然后引用的Measures.CurrentMember代替Axis(0).Item(0)

为了得到除了度量之外的所有层次结构的一般化计算很难,因为在某处你必须告诉计算使用哪个层次结构。并且在查询定义之前在多维数据集中执行此操作无法完成。因此,可以更改在问题中采用行(Axis(1).Item(0))中最左侧层次的方法,以引用查询中的不同内容,但不能完全灵活。当然,一种方法可能是定义三个类似的成员,一个用于第一个,一个用于第二个,另一个用于行中的第三个层次。

对于实用程序层次结构,您将创建一个只有一行和一列的维表。假设单列中该列的数据内容为"-standard-",并且通过附加外键在所有事实表中引用此单个成员。然后,使用来自所有度量值组的参考将维度构建到多维数据集中。可以说属性层次被称为[Utility].[Utility]。使属性层次结构不可聚合,并将默认成员设置为"-standard-"成员。在计算脚本,然后您可以添加成员到该实用程序的维度,例如

CREATE MEMBER [Utility].[Utility].StdDevRows1 // StdDev for leftmost hierarchy in the rows 
AS StdDev(Axis(1).Item(0).Item(0).Dimension.Children, Measures.CurrentMember), 
FORMAT_STRING = "#,##0.00;-#,##0.00", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'TestMeasure' ; 

CREATE MEMBER [Utility].[Utility].StdDevRows2 // StdDev for second hierarchy in the rows 
AS StdDev(Axis(1).Item(1).Item(0).Dimension.Children, Measures.CurrentMember), 
FORMAT_STRING = "#,##0.00;-#,##0.00", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'TestMeasure' ; 

CREATE MEMBER [Utility].[Utility].StdDevRows3 // StdDev for third hierarchy in the rows 
AS StdDev(Axis(1).Item(2).Item(0).Dimension.Children, Measures.CurrentMember), 
FORMAT_STRING = "#,##0.00;-#,##0.00", 
VISIBLE = 1 , ASSOCIATED_MEASURE_GROUP = 'TestMeasure' ; 

单独的实用程序层次结构的好处是,你可以用一切措施,时间等结合起来,因为它本身不是一个这些成员。