Ssas 如何使用MDX获取跨多个期间货币转换的最长日期 总结

Ssas 如何使用MDX获取跨多个期间货币转换的最长日期 总结,ssas,mdx,business-intelligence,Ssas,Mdx,Business Intelligence,我是MDX新手,但被要求加强货币兑换 多维数据集中的功能。问题本身似乎很简单 对于任何给定的选定期间,获取最后日期,并将其用作外汇货币转换的报告日期 例如,用户选择从2018年1月到2018年10月的期间。最后日期为2018年10月31日 货币转换为多对一报告货币,因此我们将从2018年10月31日开始计算汇率 尝试的方法 我尝试了各种方法,通过以下方式获得最后日期: 最大值(有和无现有) 关闭期 单独的汇率度量值组和日期维度 如果用户选择一个期间,并且仅针对该期间进行计算,则这些操作可以正

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

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

例如,用户选择从2018年1月到2018年10月的期间。最后日期为2018年10月31日

货币转换为多对一报告货币,因此我们将从2018年10月31日开始计算汇率

尝试的方法 我尝试了各种方法,通过以下方式获得最后日期:

  • 最大值(有和无现有)
  • 关闭期
  • 单独的汇率度量值组和日期维度
如果用户选择一个期间,并且仅针对该期间进行计算,则这些操作可以正常工作

然而,问题是,在多个时期内(考虑年初至今或有限公司的计算),然后从每个月取期末利率

例如,对应月份的各行项目将使用该月(1月7.285日)的期间利率值转换,而不是使用2018年10月的7.027值

期间|期间|最后日期|最后日期存在时的费率

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方法的一个示例。我假设由于当前成员的原因,我每个周期都会得到结果。我意识到这是正常的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”,如下所示

期间|期间汇率(已覆盖)|最后日期

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


如果您需要任何帮助,欢迎提供更多信息。

看起来您已经想到了这一点:

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
   )
)
因此,要获取时段的
速率(已覆盖)
您可以使用找到的日期并使用元组进行度量-唯一的细微变化是您需要将
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]
) 
与
成员。[最后日期]为
最大值(
[会计日期][年度-季度-月份-日期][日期]。成员,
IIF(
[措施][期间利率]=0,
无效的
[会计日期][年-季度-月-日期].CURRENTMEMBER.MEMBER\u关键字
)
)
成员度量。[期间的比率(被覆盖)]如下所示
( 
[最后日期],
[措施][期间费率]
) 

您好,谢谢您的回复。对不起,我可能解释得不够清楚。已经有一个维度用于选择上次日期(即货币转换日期)的等价物。但是,根据上述示例,用户将查看一个日历期间的报告,例如2018年1月至2018年10月。然后,他们忘记将最后一个日期的值更改为2018年10月底。解决方案应自动提取此最后日期,但使用max和closing period等将选择每个期间的最后日期,此时我希望所有期间的结束日期。仅供参考,我已发布了我认为是解决方案的内容,因此任何反馈都会很好;)我相信我可能已经找到了一个解决方案,但我正等待着回到这个问题上来全面测试它。它使用“后代”函数查看选定期间的所有叶子。当然,它在几年内不起作用,但我相信这对用户来说不会是一个问题:MAX(TAIL(后代(非空的(现有的[会计日期].[年-季度-月-日])。MEMBERS,[度量值].[期间利率],[会计日期].[年-季度-月-日].[年],叶),1)。项(0)。项(0),[措施][期间费率](有更好的解决方案吗?:)