在 MDX 中,如何对子成员执行计算然后聚合这些子成员?
Posted
技术标签:
【中文标题】在 MDX 中,如何对子成员执行计算然后聚合这些子成员?【英文标题】:In MDX, how can I perform a calculation on the child members and THEN aggregate those children? 【发布时间】:2014-10-21 14:41:50 【问题描述】:我有如下表所示的数据,其中新的预期装运量实际上是每个索赔计数的平均装运量,但我无法正确汇总(应该是 26.3
总计,而不是 0
) .有谁知道如何做到这一点?
CliID | Claim Count | Expected Shipment Amount | CliId Count Expected Shipment Amount New
All | 5 | 61.8 | 2 | 0
159061| (null) | (null) | (null) | (null)
159063| (null) | (null) | (null) | (null)
166759| 2 | 34.2 | 1 | 17.1
166769| (null) | (null) | (null) | (null)
223983| 3 | 27.6 | 1 | 9.2
这个pre member应该计算每个单独的CliID的平均值,如果没有Expected Shipment Amount,则返回null:
CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount Pre]
AS IIf(IsLeaf([Claim].[CliID].currentmember),
([Measures].[Expected Shipment Amount]/[Measures].[Claim Count]),0),
VISIBLE = 0;
然后这是应该可见的,以便正确聚合所有内容:
CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount New]
AS SUM([Measures].[Expected Shipment Amount Pre]),
VISIBLE=1;
很明显,在聚合级别,它正在查看 Expected Shipment Amount Pre
并返回 0
,因为聚合本身不是叶子,但对于聚合,我希望它计算所有子节点,然后添加他们起来。我怎样才能做到这一点?
【问题讨论】:
您是否尝试过让[Expected Shipment Amount Pre]
可见,然后查询多维数据集?
是的,但这说明了什么?在聚合级别 (All) 中,它显示为零为[Expected Shipment Amount Pre]
,这是因为我们不在那儿。如果有意义的话,我希望它能够在我们不在一片叶子时总结孩子们。
好的 - 我开始理解你的要求了 - 26.3
绝对正确为 61.8 / 5 <> 26.3
?
是的,因为9.2 + 17.1 = 26.3
我对所有MDX
标记的问题感兴趣。抱歉,我帮不上忙。
【参考方案1】:
在您的第二步中,您应该使用
CREATE MEMBER CURRENTCUBE.[Measures].[Expected Shipment Amount New]
AS SUM(EXISTING [Claim].[CliID].[CliID].Members, [Measures].[Expected Shipment Amount Pre]),
VISIBLE=1;
我。 e.对CliID
级别的成员的成员求和。
编辑
您可以尝试加快速度的方法是更多地依赖内置的 Analysis Services 聚合。为此,请根据事实表中的Expected Shipment Amount
列创建一个物理度量 Expected Shipment Amount New
,并将其聚合函数设置为“sum”。然后,在计算脚本中,添加
SCOPE([Claim].[CliID].[CliID].Members);
[Measures].[Expected Shipment Amount New] = [Measures].[Expected Shipment Amount] / [Measures].[Claim Count];
END SCOPE;
这将用平均计算覆盖叶级别的“新预期装运量”的计算,但不会说明CliID
属性层次结构的All
级别的任何内容。因此,对于这个级别,应该发生指定的度量聚合,即sum
。
【讨论】:
酷。不过,这似乎大大减慢了查询速度。这是可以预期的/无论如何可以加快这一进程? @TravisEXISTING
可能会导致严重减速。您可以在第一个语句中去掉IIf
,因为第二个语句会注意如果您使用该度量,您始终处于叶级,并且没有用户可以使用该度量,因为它是不可见的。因此,计算可能会变得更简单,从而更快。以上是关于在 MDX 中,如何对子成员执行计算然后聚合这些子成员?的主要内容,如果未能解决你的问题,请参考以下文章