根据当前显示的维度计算的度量

Calculated measure depending on which dimension is currently shown

我正在尝试在我的多维数据集中计算度量值,该度量值会根据显示的日期维度而有所不同。我以为 SCOPE 会得到我想要的东西,但它似乎做了最后一次计算。

CREATE MEMBER CURRENTCUBE.[Measures].[Sales Prior]
 AS (
    Null
    ),
VISIBLE = 1 ,  ASSOCIATED_MEASURE_GROUP = 'Sales';      

SCOPE ([Sales and Forecast Date].[Calendar Year].Members, [Measures].[Sales Prior]);
    this =  ([Sales and Forecast Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;
SCOPE ([Sales Requested Ship Date].[Calendar Year].Members, [Measures].[Sales Prior]);
    this =  ([Sales Requested Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;
SCOPE ([Sales Ship Date].[Calendar Year].Members, [Measures].[Sales Prior]);
    this =  ([Sales Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;

此代码片段仅适用于“发货日期”维度,并为其他 2 个维度提供NULL

我也试过嵌套 SCOPE 语句,但它做了同样的事情。

不确定这是否是您要实现的...我昨天刚找到下面的文章。

http://www.purplefrogsystems.com/blog/2010/08/mdx-calculated-member-spanning-multiple-date-dimensions/

另请阅读所有评论,针对某些特定情况有很多改进/调整建议。

我最好的猜测是您的“[Calendar Year].Members”正在返回 [All],这意味着当您实际上不想使用该层次结构时,它仍在 SCOPE 中,因为 [All] 实际上是 ROOT .因此,就像您提到的只有 SCOPES 中提到的最后一个层次结构在起作用,如果您切换 SCOPES 的顺序,另一个应该开始工作,因为正在评估所有 SCOPES 但实际上只显示最后一个。尝试从 SCOPE 中删除 [All]。

SCOPE ([Sales and Forecast Date].[Calendar Year].[All].CHILDREN, [Measures].[Sales Prior]);
    this =  ([Sales and Forecast Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;
SCOPE ([Sales Requested Ship Date].[Calendar Year].[All].CHILDREN, [Measures].[Sales Prior]);
    this =  ([Sales Requested Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;
SCOPE ([Sales Ship Date].[Calendar Year].[All].CHILDREN, [Measures].[Sales Prior]);
    this =  ([Sales Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
end scope;

你只在那个级别做范围,只在那个级别工作才有意义,)

如果您的层次结构具有您需要的级别,您可以尝试类似的方法:

在您的范围内使用 DESCENDANTS(,AFTER) 进行计算,以便层次结构中的所有成员都在 SCOPE 中。 我会这样尝试:

SCOPE ([Measures].[Sales Prior]);
    this = null;
    SCOPE (DESCENDANTS([Sales and Forecast Date].[Calendar Year].[All].CHILDREN,,AFTER));
        this =  ([Sales and Forecast Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
    END SCOPE;
    SCOPE (DESCENDANTS([Sales Requested Ship Date].[Calendar Year].[All].CHILDREN,,AFTER));
        this =  ([Sales Requested Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
    END SCOPE;
    SCOPE (DESCENDANTS([Sales Ship Date].[Calendar Year].[All].CHILDREN,,AFTER));
        this =  ([Sales Ship Date].[Calendar Year].CurrentMember.PREVMEMBER, [Measures].[Sales Amount]);
    END SCOPE;
END SCOPE;