如何为统计函数Stdev创建和使用通用计算?

时间:2013-08-21 15:56:20

标签: ssas business-intelligence olap-cube

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

我找到了相关的讨论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' ;

1 个答案:

答案 0 :(得分: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' ;

单独的实用程序层次结构的优点是您可以将它与所有度量,时间等组合,因为它本身不是这些的成员。