Ssas MDX IIF语句,用于根据度量和层次结构计算新成员

Ssas MDX IIF语句,用于根据度量和层次结构计算新成员,ssas,mdx,sql-server-data-tools,dimensional-modeling,Ssas,Mdx,Sql Server Data Tools,Dimensional Modeling,我有一个简单的数据立方体,用于计算共享支出,其中有一个度量值金额和一些维度和层次结构,但有趣的是关系。它描述了谁为谁买了东西。它的结构是: 谁 为谁 关系键 我正在尝试编写一个表示债务的计算代码。例如,如果我买了一些共享使用的东西,它将是0.5*金额的一半。另一方面,如果我为自己买了东西,它将是0*Amount 据我所知,我尝试了以下计算: IIF( [dimRelationship].[Relationship].currentMember = [dimRelationship].[Rel

我有一个简单的数据立方体,用于计算共享支出,其中有一个度量值<代码>金额和一些维度和层次结构,但有趣的是<代码>关系。它描述了谁为谁买了东西。它的结构是:

  • 为谁
  • 关系键
我正在尝试编写一个表示债务的计算代码。例如,如果我买了一些共享使用的东西,它将是
0.5*金额的一半。另一方面,如果我为自己买了东西,它将是
0*Amount

据我所知,我尝试了以下计算:

IIF(
[dimRelationship].[Relationship].currentMember = [dimRelationship].[Relationship].[RelatonshipID].&[MeShared],
[Measures].[Amount]*0.5,
[Measures].[Amount]*0)
它只在最低的
RelationshipID
级别工作良好。当我滚动浏览的透视表时,它是根据else表达式进行操作的。这并不奇怪,因为层次结构的
currentMember
不再是
MeShared
。另一件坏事是,总体聚合都不起作用——作为一个总体总结,它将是最重要的。有没有像.LeafMember这样的后缀可以帮助我进行计算

提前谢谢你

致以最良好的祝愿

马克斯

试试范围语句

首先,创建新的计算
[Debt calculation]作为[Measures].[Amount]*0/*作为其他场景*/

然后创建一个作用域:

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

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

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

它仍然只适用于最低层次结构级别。它不适用于更高级别的维度。例如,我在
dimRelationship
退款
中添加了列。如果personA为personA购买了一些东西,那么它是0。如果personA为B购买了一些东西,那么它是1。如果personA购买了一些常用的东西,那么它是0.5。我添加了一个计算
[Debt]
为:
[Measures].[amount]*[dimrationship].[return].memberValue
,但它仍然没有聚合。它在最低级别上运行良好,但在更高级别上显示#ARG!在使用Excel进行浏览时,您正在将其添加到计算的度量值中。您需要将其添加到项目从中读取的事实表中。在该事实表中,添加另一列,该列的金额乘以关系,并为每个事实行存储该列。现在在你的多维数据集中使用这个度量。你的问题是设计时间,好的,它可以工作。非常感谢。我一直认为OLAP系统的思想是,它可以有效地计算一些东西,而不需要向源表中添加额外的列。似乎我对OLAP的理解相当缺乏。谢谢您的时间和提示!