【问题标题】:How to include all the days of the week in a calculation when week is between two months?当周在两个月之间时,如何在计算中包括一周中的所有天?
【发布时间】:2018-02-07 06:57:01
【问题描述】:

我有一个 MDX 计算工作正常,除了一种情况。

它正在汇总一周,它看起来像这样:

with
  MEMBER [Measures].[WTD]
as AGGREGATE( [Date].[Date].CURRENTMEMBER.Parent.CHILDREN, [Measures].[Survey Count] )
SELECT 
NON EMPTY 
{ 
   [Measures].[Survey Count],
   [Measures].[WTD]
} ON COLUMNS, 
NON EMPTY 
{ 
       ( [Date].[Date].[Day].ALLMEMBERS ) 
} ON ROWS 
FROM [myCube];

每周我是指周日到周六。这是需要计算的方式。

问题是,当星期天到星期六的星期有一个月的变化时。因此,例如,对于 2017 年 3 月的最后一个星期日到星期六的一周,倒数第二天是 3 月 31 日,最后一天是 4 月 1 日。在多维数据集中,这看起来像:第 13 周具有 3 月 26 日 - 3 月 31 日的值(六个天),然后第 13 周再次出现在四月之下。这是 4 月下的第一周,第 13 周只有一天 - 4 月 1 日。接下来是 4 月的第 14 周,有整整 7 天(4 月 2 日 - 4 月 8 日)。

多维数据集有一个日期层次结构,其下具有年、季度、月、周和日维度。

那么当一周分为两个月时,如何修改此 MDX 以包括整周(周日到周六之间的所有 7 天)?

【问题讨论】:

    标签: date mdx


    【解决方案1】:

    您所看到的行为的原因是您的 Date 维度的层次结构。例如。月级别高于周级别,这意味着 .Parent 函数始终返回 .CurrentMember 日期所在月的星期几。

    你有不同的选择来解决这个问题:

    1)

    您可以简单地使用MDX WTD()函数,您只需要正确配置Date维度,使属性具有正确的Type

    2)

    您可以创建另一个日期层次结构,将年/周作为第一级,将日作为第二级,如下所示:

    • 年周(例如 Y2017/W51、Y2017/W52 等)
    • 日期(例如 2017 年 12 月 14 日、2017 年 12 月 15 日等)

    您现有的代码将在这种情况下工作,您只需要引用这个新的层次结构。

    3)

    您还可以将 Weekday 定义为 Day 属性的属性,然后您可以使用现有的 Date 层次结构创建 WTD 度量,如下所示:

    WITH
      MEMBER [Measures].[WTD]
    AS
        AGGREGATE(      
            TAIL(FILTER( NULL:[Date].[Day].CurrentMember, [Date].[Day].Properties( "Weekday" )="Sunday" ), 1).Item(0) : [Date].[Day].CurrentMember,
            [Measures].[Survey Count]
        )   
    

    【讨论】:

    • 谢谢,我选择了选项 2。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-04-15
    • 2015-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多