如何使用MDX获取跨多个期间的货币兑换的最高日期

时间:2019-05-21 07:29:52

标签: ssas mdx business-intelligence

摘要

我是MDX的新手,但已被要求提高货币兑换率 多维数据集中的功能。问题本身似乎很简单。

对于任何给定的选定时间段,获取最后一个日期,并将其用作外汇货币转换的报告日期。

例如,用户选择时间范围为2018年1月至2018年10月。最后日期为2018年10月31日。

货币汇率转换为一种报告货币,因此我们将采用2018年10月31日的汇率。

尝试过的方法

我尝试了多种方法来使用:

  • MAX(有无)
  • 关闭期间
  • 单独的外汇汇率衡量指标组和日期维度

如果用户选择一个期间并且计算仅针对该期间,则这些方法可以正常工作。

但是问题是,在多个期间(请考虑YTD或LTD的计算)中,则从每个月获取结束率。

例如,对应月份中的每个订单项将使用该月的期间值(1月7.285)而不是2018年10月的值7.027进行转换。

期间|期间费率| LastDate | LastDateExisting

2018年1月| 7.285 | 20191231 | 20180131

2018年2月| 7.273 | 20191231 | 20180228

2018年3月| 7.275 | 20191231 | 20180331

2018年4月| 7.201 | 20191231 | 20180430

2018年5月| 7.146 | 20191231 | 20180531

2018年6月| 7.118 | 20191231 | 20180630

2018年7月| 7.116 | 20191231 | 20180731

2018年9月| 7.102 | 20191231 | 20180930

2018年10月| 7.027 | 20191231 | 20181031

示例代码

这是我在各种MDX食谱中找到的获取最后日期的MAX方法的示例。我假设由于CurrentMember,我正在每个时期获得结果。我意识到这是正常的MDX行为,但是由于要求,您需要打破这一点。

不存在的MAX示例是最接近的示例,因为它返回相同的日期,但是我不确定是否可以轻松地将其过滤为实际结束时间?

WITH

MEMBER Measures.[LastDate] AS

MAX( [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
IIF( [Measures].[Rate at Period] = 0,
NULL,
[Accounting Date].[Year – Quarter – Month – Date].CurrentMember.Member_Key
)
)

MEMBER Measures.[LastDateExisting] AS

MAX( EXISTING [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
IIF( [Measures].[Rate at Period] = 0,
NULL,
[Accounting Date].[Year – Quarter – Month – Date].CurrentMember.Member_Key
)
)

预期结果

我希望看到最后一个日期列为所有“ 20181031”,如下所示。

期间|期间费率(已覆盖)| LastDate

2018年1月| 7.027 | 20181031

2018年2月| 7.027 | 20181031

2018年3月| 7.027 | 20181031

2018年4月| 7.027 | 20181031

2018年5月| 7.027 | 20181031

2018年6月| 7.027 | 20181031

2018年7月| 7.027 | 20181031

2018年9月| 7.027 | 20181031

2018年10月| 7.027 | 20181031

任何需要帮助的人都非常乐意为您提供更多信息。

1 个答案:

答案 0 :(得分:0)

看起来您已经知道了这一点:

WITH
MEMBER Measures.[LastDate] AS
MAX( 
  [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
  IIF( 
     [Measures].[Rate at Period] = 0,
     NULL,
     [Accounting Date].[Year – Quarter – Month – Date].CURRENTMEMBER.MEMBER_KEY
   )
)

因此,要获取Rate at Period (overridden),您只需使用找到的日期并使用元组进行度量-只需稍作更改,便需要将LastDate成员添加到层次结构中除了“度量”之外-您可以选择:在我们的多维数据集中,我通常选择Langauges层次结构,因为它几乎从未使用过:

WITH
MEMBER <OtherHierarchy>.[LastDate] AS
MAX( 
  [Accounting Date].[Year – Quarter – Month – Date].[Date].MEMBERS,
  IIF( 
     [Measures].[Rate at Period] = 0,
     NULL,
     [Accounting Date].[Year – Quarter – Month – Date].CURRENTMEMBER.MEMBER_KEY
   )
)
MEMBER Measures.[Rate at Period (overridden)] AS
( 
  <OtherHierarchy>.[LastDate],
  [Measures].[Rate at Period]
)