我的计算成员有问题。每当该成员参与计算或查询时,都需要花费大量时间来执行。我试图缩短执行时间。 我必须从成员中删除IIF条件并开始使用范围。
CREATE Member CurrentCube.[Measures].[AvgAmount] as
IIF(ISLeaf([Customer].[ParentCustomer].currentmember),
[Measures].[Value],
(SUM([CCube^Customer].[ParentCustomer].CURRENTMEMBER.CHILDREN) /
COUNT([Customer].[ParentCustomer].CURRENTMEMBER.CHILDREN))
) ,
Format_String = "#.0000000;-#.0000000;0;0",
Non_Empty_Behavior = [Measures].[Amout];
我在这里创建了[ParentCustomer]客户的层次结构。我希望看到父母客户下的所有孩子的平均数量,但是当我看到没有任何孩子的孩子水平时,应该只显示[Measures]。[Amout]。
提前致谢
此致 萨姆
答案 0 :(得分:0)
从你的问题来看,我认为你真的想要得到孩子的平均值,而不是所有叶级后代的平均值。后者可以按如下方式实施:
在客户维度表上创建一个新的度量值组,其中包含一个度量“客户计数”(将仅作为计数实现)或客户维度作为比单个客户更精细的粒度 - 客户数量更多钥匙或类似的东西。 然后将您的度量定义为
CREATE Member CurrentCube.[Measures].[AvgAmount] as
[Measures].[Value] / [Measures].[customer count],
Format_String = "#.0000000;-#.0000000;0;0",
Non_Empty_Behavior = [Measures].[Amout];
这假设[Measures].[Value]
的聚合被定义为sum或半加性聚合之一,但不是max
或min
或类似的东西。
但是,我从你的问题中假设这不是你想要的。相反,你想看到每个级别的孩子的平均值。我假设[Customer].[ParentCustomer]
是标准用户层次结构,而不是父子层次结构。然后,使用SCOPE
在标题中建议的方法将起作用。假设您的[Customer].[ParentCustomer]
层次结构中有三个级别:
All
成员A
,根据维度A
构建
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,不适用于父子层次结构,但是你不会写你有一个,我只是假设你没有。