MDX IIF 语句根据度量和层次结构叶计算新成员

Posted

技术标签:

【中文标题】MDX IIF 语句根据度量和层次结构叶计算新成员【英文标题】:MDX IIF statement to calculate new member basing on measure and hierarchy leaves 【发布时间】:2019-05-13 18:35:45 【问题描述】:

我有一个简单的 Data Cube,用于计算共享支出,其中包含一个度量 Amount 以及一些维度和层次结构,但有趣的是 Relationship。它描述了谁为谁买了东西。它的结构是:

谁 为谁 关系键

我正在尝试编写代表债务的计算。例如,如果我购买了用于共享使用的东西,它将是0.5 * Amount 的一半。另一方面,如果我为自己买东西,那就是0 * Amount

到目前为止,我尝试了以下计算:

IIF(
[dimRelationship].[Relationship].currentMember = [dimRelationship].[Relationship].[RelatonshipID].&[MeShared],
[Measures].[Amount]*0.5,
[Measures].[Amount]*0)

它只在最低的RelationshipID 级别上运行良好。当我汇总浏览过的数据透视表时,它会根据 else 表达式进行操作。这并不奇怪,因为层次结构的currentMember 不再是MeShared。另一件坏事是总聚合也不起作用 - 作为一般总结,这将是最重要的。是否有任何像 .LeafMember 或类似的后缀可以帮助我执行此计算?

提前谢谢你!

最好的问候,

最大!

【问题讨论】:

【参考方案1】:

在您的事实表中添加另一列,在该列中存储“金额”乘以该特定行的 relationshipID。这将立即解决您的问题

【讨论】:

我在dimRelationshiprefund添加了列例如。如果personA为personA买了东西,那么它是0。如果personA为B买了东西,它是1。如果personA买了一些普通用途的东西,它是0.5。我添加了一个计算[Debt] 为:[Measures].[Ammount]*[dimRelationship].[refund].memberValue,但它仍然没有聚合。它在最低级别上运行良好,但在更高级别上它显示#ARG!使用 Excel 浏览时。 @Maks 您正在将其添加到计算的度量中。您需要将此添加到您的项目从中读取的事实表中。在该事实表中添加另一列,该列将金额乘以关系并将其存储在每个事实行中。现在在你的多维数据集中使用这个度量。你的问题是设计时间 好的,它可以工作。谢谢你。我一直认为 OLAP 系统的想法是它可以有效地计算某些东西,而无需在源表中添加额外的列。看来我对OLAP的理解还很欠缺。感谢您的时间和提示!【参考方案2】:

试试 SCOPE 语句。

首先,新建计算[Debt Calculation] as [Measures].[Amount]*0 /* as ELSE-scenario */

然后创建一个SCOPE:

SCOPE([Debt Calculation],[dimRelationship].[Relationship].[RelatonshipID].&[MeShared]);
THIS=[Measures].[Amount]*0.5;
END SCOPE;

如果它是层次结构的最低级别并且是维度键(用作度量组的链接),它将自动重新计算该维度的更高级别。如果没有,请在此处发布结果。

【讨论】:

它仍然只适用于最低层级。它不能概括更高级别的维度。

以上是关于MDX IIF 语句根据度量和层次结构叶计算新成员的主要内容,如果未能解决你的问题,请参考以下文章

Mdx Iif 语句

使用 IIF 和 SUM 的 MDX

通过过滤度量值在 MDX 中定义计算成员

具有多个属性层次结构的计算成员 - MDX

MDX 获取层次结构值

维度成员作为 MDX 中的计算度量