2015-09-03 133 views
0

我有一個銷售日曆,其中一個月的日曆每年都在變化。這個例子是,2015年9月爲1定義爲月 - 9月30日,但去年它從9月3日跑了 - 9月30日
所以,當我想今年MTD來比較2015年9月1日應該是比較9/3/2014。我把所有的日期在時間維度上,像去年MTD開始,爲期MTD結束,並把它們放在一個層次,日期與去年MTD開始,爲期MTD END,並試圖祖先的功能,如SSAS去年MTD計算不規則Calnedar

WITH 
MEMBER [Measures].LMTD AS 
    SUM(
     ANCESTOR(
     [Time].[LYMD_START].CURRENTMEMBER 
     ,1 
     ) 
     ,[Measures].[Volume] 
    ) 
SELECT 
    [Measures].LMTD on 0 
FROM [myCUBE] 
WHERE [Time].[DATE].&[2015-09-01T00:00:00]; 

但我只收回當月的總量。

回答

2

假設你已經與日,月銷量和銷售額同比尺寸,下面應該工作。如果過濾到2015年9月1日(即第9月份銷售的第一天),這將退後一步一個銷售年度,然後找到第9月份銷售的第一天(2014年9月3日):

ParallelPeriod(
    [Date].[Sales Calendar].[Sales Year], 
    1, 
    [Date].[Sales Calendar].CurrentMember 
    ) 

那麼你一定要通過2014年9月3日總結在月銷量的日子:

Sum(
    PeriodsToDate(
    [Date].[Sales Calendar].[Sales Month], 
    ParallelPeriod(
     [Date].[Sales Calendar].[Sales Year], 
     1, 
     [Date].[Sales Calendar].CurrentMember 
     ) 
    ), 
    [Measures].[Volume] 
) 

所以努力工作是建設有正確的銷售幾個月的尺寸。 MDX只能導航該層次結構。

+0

感謝Greg。我最終做的是爲每個我正在查找的日期(MTD,YTD,去年MTD等)創建單獨的層次結構,在層次結構中查找我想要使用的開始日期和結束日期,然後使用STRTOSET函數動態創建計算的成員。這篇博文(https://ditchiecubeblog.wordpress.com/2013/06/16/multi-select-friendly-time-calculations-in-analysis-services/)概述了這項技術。 –

+0

@TonyG。 Greg Galloway的回答是否回答你的問題?我從你的評論中意識到這不是你已經實施的方法,而是它回答了這個問題? – whytheq

+0

@whytheq他的回答很好,但沒有解決我的問題,所以我猜不。對於一個共同的問題,這仍然是一個很好的答案,但不是我的。 –