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。这将立即解决您的问题
【讨论】:
我在dimRelationship
refund
添加了列例如。如果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 语句根据度量和层次结构叶计算新成员的主要内容,如果未能解决你的问题,请参考以下文章