【问题标题】:MDX: How to go back 1 year-to-date while taking leap year into consideration?MDX:如何在考虑闰年的同时回溯1年至今?
【发布时间】:2012-03-08 10:44:22
【问题描述】:

试图提出一个查询,该查询将为我提供从今天起 365 天(以及 2 月之后的闰年,366 天)的一组日期。

这是我目前得到的:

Select [Measures].[Revenue] on 0, non empty {[Trans Date].[Year - Week - Date].[Date], PARALLELPERIOD([Trans Date].[Year - Week - Date].[Year], 1,[Trans Date].[Year - Week - Date]) }on 1 from Cube

这但是这可以追溯到“时间”的开始。我只需要它返回 365(或闰年的 366)。

考虑使用 Lag,但不太确定它是否适合此方案。 有人对此有什么建议吗?

谢谢!

【问题讨论】:

    标签: mdx leap-year


    【解决方案1】:

    首先,我将重新格式化您的查询以提高可读性。

    SELECT [Measures].[Revenue] ON 0,
           NON EMPTY 
           {
             [Trans Date].[Year - Week - Date].[Date],
             PARALLELPERIOD([Trans Date].[Year - Week - Date].[Year],
                            1,
                            [Trans Date].[Year - Week - Date])
           } ON 1
    FROM Cube
    

    您在这里拥有的是一组完整的 Date 级别 ([Trans Date].[Year - Week - Date].[Date]),以及该维度中的一个成员(PARALLELPERIOD 调用的结果)。

    您想要的是一系列成员,这是通过 range operator : 完成的。例如,

    NON EMPTY
    {
      PARALLELPERIOD([Trans Date].[Year - Week - Date].[Year],
                     1,
                     [Trans Date].[Year - Week - Date].[Date].CURRENTMEMBER)
      :
      [Trans Date].[Year - Week - Date].[Date].CURRENTMEMBER
    } ON 1
    

    【讨论】:

    • 你的例子没有考虑闰年。
    • 这是真的; PARALLELPERIOD 仅返回与给定成员具有相同序数的并行祖先下的成员。如果无法通过 MDX 直接处理成员的日期值,则可能需要以编程方式生成数字成员属性(例如,参考上一年成员在此日期的序号),以帮助解决此问题过程。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2017-08-15
    相关资源
    最近更新 更多