根据您的问题,我假设您真的想要孩子的平均值,而不是所有叶级后代的平均值。后者可以按如下方式实现:
在客户维度表上创建一个新的度量值组,该度量值组具有单个度量值“客户计数”,该度量值将被实现为计数 - 或者您的客户维度作为比单个客户更精细的粒度 - 客户键或其他内容的 countdistinct像这样。然后只需将您的度量定义为
CREATE Member CurrentCube.[Measures].[AvgAmount] as
[Measures].[Value] / [Measures].[customer count],
Format_String = "#.0000000;-#.0000000;0;0",
Non_Empty_Behavior = [Measures].[Amout];
这假设聚合[Measures].[Value]
被定义为总和或半加性聚合之一,但不是max
或min
或类似的东西。
但是,我从您的问题中假设这不是您想要的。相反,您希望查看每个级别的孩子的平均值。我假设这[Customer].[ParentCustomer]
是一个标准的用户层次结构,而不是父子层次结构。然后,标题中建议的方法 usingSCOPE
将起作用。假设您的[Customer].[ParentCustomer]
层次结构中有三个级别:
- (隐式定义的)所有级别,仅包含
All
成员
- level ,由维度
A
的属性构建A
- level
B
,它是叶级别,由B
维度的属性构建
[Measures].[Value]
然后,在关于聚合的类似假设下,您可以AvgAmount
按如下方式定义度量:
// create the measure as it is correct for level B:
CREATE Member CurrentCube.[Measures].[AvgAmount] as
[Measures].[Value],
Format_String = "#.0000000;-#.0000000;0;0",
Non_Empty_Behavior = [Measures].[Amout];
// overwrite the definition for level A:
SCOPE([Customer].[ParentCustomer].[A].Members);
[Measures].[AvgAmount] = [Measures].[Value] / (EXISTING [Customer].[B].[B].Members).Count
END SCOPE;
// overwrite the definition for the ALl level:
SCOPE([Customer].[ParentCustomer].&[All]);
[Measures].[AvgAmount] = [Measures].[Value] / (EXISTING [Customer].[A].[A].Members).Count
END SCOPE;
这种使用 SCOPE 的方法不适用于父子层次结构,但是你不写你有一个,我只是假设你没有。