多个月前的等效MTD

时间:2014-10-13 16:27:01

标签: ssas mdx olap

如果今天的日期是2008年7月11日,则MTD金额适用于{2008年7月1日至2008年7月11日}的范围。 6月的先前等效MTD期间为{2008年6月1日 - 2008年6月11日} 以前的5月MTD期间为{2008年5月1日 - 2008年5月11日}。

我有以下MDX脚本:

WITH 
  MEMBER [Measures].[PrevEquivalentMTD] AS 
    //SUM
    (
      ParallelPeriod
      (
        [Date].[Calendar].[Month]
       ,1
       ,[Date].[Calendar].CurrentMember
      )
     ,[Measures].[Internet Sales Amount]
    ) 
  MEMBER [Measures].[PrevEquivalentMTD_v2] AS 
    Sum
    (
      Generate
      (
        {
            [Date].[Calendar].[Date].&[20080701]
          : 
            [Date].[Calendar].[Date].&[20080710]
        }
       ,{
          ParallelPeriod
          (
            [Date].[Calendar].[Month]
           ,1
           ,[Date].[Calendar].CurrentMember.Item(0)
          )
        }
      )
     ,[Measures].[Internet Sales Amount]
    ) 
SELECT 
  {
      [Date].[Calendar].[Month].&[2005]&[6]
    : 
      [Date].[Calendar].[Month].&[2008]&[7]
  } ON ROWS
 ,{
    [Measures].[Internet Sales Amount]
   ,[Measures].[PrevEquivalentMTD]
   ,[Measures].[PrevEquivalentMTD_v2]
  } ON COLUMNS
FROM [Adventure Works];

结果如下:

enter image description here

措施PrevEquivalentMTD不是我正在寻找的,因为它返回的是前一个月的总数,而不仅仅是前10天。

措施PrevEquivalentMTD_v2我不确定这样做是为了每个月返回相同的数字。

如何创建一个能够返回每个月前10天的互联网销售总额的指标?

1 个答案:

答案 0 :(得分:1)

我会想起

The PeriodsToDate method。但是,由于您在查询中没有第11个作为选定成员,因此我只使用11作为给定输入。

WITH 
  MEMBER [Measures].[PrevEquivalentMTD] AS 
    Sum(Head([Date].[Calendar].CurrentMember.PrevMember.Children, 11),
        [Measures].[Internet Sales Amount])
SELECT 
  {
    [Measures].[Internet Sales Amount]
   ,[Measures].[PrevEquivalentMTD]
  } ON COLUMNS,
  {
      [Date].[Calendar].[Month].&[2005]&[6]
    : 
      [Date].[Calendar].[Month].&[2008]&[7]
  } ON ROWS
FROM [Adventure Works]

这是将前一个月的前十一个(Head( ,11))子(PrevMember)从单元格的行上下文中取出当前的一个,然后对这些子进行求和。

要动态转到11,你可以这样做。 G。使用像

这样的东西
Rank(Tail([Date].[Calendar].[Date]).Item(0), 
     Tail([Date].[Calendar].[Month]).Item(0).Item(0).Children
    )

确定其父级月份的子级中日历层次结构的最后一天的位置(Rank)。假设没有错过的日子e。 G。对于周末,这应该工作。它为Adventure Works返回30,因为2010年11月30日是日历层次结构中的最后一天。