如何在一周两个月之间的计算中包括一周中的所有日期?

时间:2017-08-29 17:56:51

标签: date mdx

除了一个案例外,我的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日的值(6几天,然后第13周再次出现在4月份。这是4月份的第一个星期,第13周只有一天 - 4月1日。然后是4月的第14周,整整7天(4月2日 - 4月8日)。

多维数据集具有Date层次结构,其下面包含Year,Quarter,Month,Week和Day维度。

那么,如果将一周分为两个月,我该如何修改此MDX以包括整周(周日至周六之间的所有七天)?

1 个答案:

答案 0 :(得分:0)

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

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

1)

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

2)

您可以创建另一个日期hierarhy,将年/周作为第1级,将日作为第2级,如下所示:

  • YearWeek(例如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]
    )