当一周在两个月之间时,如何将一周中的所有天数都包括在计算中?

How to include all the days of the week in a calculation when week is between two months?

我有一个 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 日。然后第 14 周是接下来的 4 月,整整 7 天(4 月 2 日 - 4 月 8 日)。

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

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

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

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

1)

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

2)

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

  • 年周(例如 Y2017/W51、Y2017/W52 等)
  • 天(例如 2017-12-14、2017-12-15 等)

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

3)

您还可以将工作日定义为 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]
    )