根据当前显示的维度计算的度量
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
语句,但它做了同样的事情。
不确定这是否是您要实现的...我昨天刚找到下面的文章。
另请阅读所有评论,针对某些特定情况有很多改进/调整建议。
我最好的猜测是您的“[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;
我正在尝试在我的多维数据集中计算度量值,该度量值会根据显示的日期维度而有所不同。我以为 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
语句,但它做了同样的事情。
不确定这是否是您要实现的...我昨天刚找到下面的文章。
另请阅读所有评论,针对某些特定情况有很多改进/调整建议。
我最好的猜测是您的“[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;