[英]Convert MDX calculated measure, to scope in SSAS calculations
我有一个度量,可以获取货币汇率的最后一个值。 具有汇率的事实在时间用法的维度用法中进行配置,并且是基于每日的。 因此,使用MDX,我可以通过使用计算得出的指标来成功获得以货币为单位的换算指标:
with member [Measures].[Calculated Comp Money In] as
SUM([Dim Time].[Date Key].CurrentMember,
[Measures].[Comp Money In]/[Measures].[Last Currency Rate])
然后在where子句中,我将过滤出我要报告的货币使用的货币
[Dim Currency].[Currency Key].&[200]
但是,我不喜欢的是我有一个[Measures]。[Comp Money In]和[Measures]。[Comp Money In Calculated] .... 我可以在MDX中使用SCOPE函数,以便[Measures。[Comp Money In]配置了以上计算 ? 然后,我将在SSAS的“计算”部分中添加此计算。
如果使用SSAS的企业版,则可以使用度量进行货币换算的度量表达属性。 这在Analysis Services文档中记录得不是很好,但是其工作方式如下:您仅使用一种度量(即[Measures].[Calculated Comp Money In]
或[Measures].[Comp Money In]
,以及在“该度量的“度量表达式”属性,请在上面的问题中输入您拥有的表达式:
[Measures].[Comp Money In] / [Measures].[Last Currency Rate]
然后,Analysis Services引擎将为您处理其余的工作。 请注意,此表达式只能包含定义时所用的度量,时间或除以另一个度量(通常为汇率)而没有其他值。
如果您没有Analysis Services的企业版,则可以或多或少地将定义复制到计算所得的成员中:
为了能够继续使用现有度量,可以将度量[Measures].[Comp Money In]
重命名为[Measures].[_Comp Money In]
(并在您检查完一切正常后使该度量不可见)。 然后定义一个与原始度量同名的计算成员:
create member CurrentCube.[Measures].[Comp Money In] as
SUM([Dim Time].[Date Key].CurrentMember,
[Measures].[_Comp Money In]/[Measures].[Last Currency Rate])
更好的是,使用SCOPE
来计算度量,并避免单日汇总:假设包含[Measures].[Comp Money In]
的度量组和包含[Measures].[Last Currency Rate]
的唯一共同维度[Measures].[Last Currency Rate]
是[Dim Time]
并且具有键属性[Dim Time].[Date Key]
,并且您的日期层次结构名为[Dim Time].[Date]
,您可以使用
CREATE MEMBER CurrentCube.[Measures].[Comp Money In] as NULL;
SCOPE([Dim Time].[Date Key].[Date Key].members);
[Measures].[Comp Money In] =
[Measures].[_Comp Money In] / [Measures].[Last Currency Rate];
END SCOPE;
SCOPE([Dim Time].[Date].Members);
[Measures].[Comp Money In] =
Sum(EXISTING [Dim Time].[Date Key].[Date Key].members);
END SCOPE;
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.