2011-03-15 66 views
1

當我建立反對冒險的MDX請求Works多維數據集分析服務2008R2使ParallelPeriod功能工作。我想在排幾個月和幾年中列,這樣的結果是這樣的:在SSAS,不能跨越幾個月甚至幾年

  2005 | 2006 | 2007 | ... 
January ... | ... | ... | ... 
February ... | ... | ... | ... 
March  ... | ... | ... | ... 
... 

以下要求正常工作:

SELECT 
[Date].[Month of Year].CHILDREN ON ROWS, 
([Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount] }) ON COLUMNS 
FROM [Adventure Works] 

現在,我想比較當前的銷售一個月銷售較上月:

   2005    ||  2006    || ... 
      Sales | Sales prev month || Sales | Sales prev month ||... 
January  ... |    ... || ... |    ... || ... 
February ... |    ... || ... |    ... || ... 
March  ... |    ... || ... |    ... || ... 
... 

我使用ParallelPeriod函數寫了一個請求:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], ParallelPeriod([Date].[Calendar].[Month], 1)) 
SELECT 
[Date].[Month of Year].CHILDREN ON ROWS, 
([Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month] }) ON COLUMNS 
FROM [Adventure Works] 

的問題是,我得到NULL值的[銷售金額上一頁月]的措施。

看起來,儘管每個單元代表一個月份和年份的事實,SSAS似乎並不能夠確定當前[日期],[日曆] [月]成員。然後,ParallelPeriod沒有設法獲得前一個月。

關於如何在這種情況下,ParallelPeriod功能工作的任何想法?非常感謝。

回答

0

什麼:當你想在一季度的相應月份

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], [Date].[Month of Year].CurrentMember.PrevMember), 
FORMAT_STRING = "Currency" 
SELECT 
[Date].[Month of Year].CHILDREN ON ROWS, 
([Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month] }) ON COLUMNS 
FROM [Adventure Works] 

並行區間內使用。這裏PrevMember應該夠了。

更新:您的評論我下面試圖利用已經存在的與其他解決方案的層次:

WITH 
MEMBER [Sales Amount Prev Month] AS 
    ([Measures].[Sales Amount], [Date].Calendar.currentMember.prevMember), 
FORMAT_STRING = "Currency" 

SELECT 
{[Date].[Calendar].[Month].Members} ON ROWS, 
( { [Measures].[Sales Amount], [Sales Amount Prev Month] }) ON COLUMNS 
FROM [Adventure Works] 
+0

嗯,除了一月的結果總是空它看起來不錯。我想知道是否有一個函數可以找到在給定月份和給定年份的交集處的層次結構的成員。這將允許使用ParallelPeriod函數。謝謝。 – 2011-03-16 17:59:59

1

我收到了來自微軟以下MDX查詢:

WITH MEMBER [Sales Amount Prev Month] AS ([Measures].[Sales Amount], ParallelPeriod([Date].[Calendar].[Month], 1)) 
member measures.def2 
as 
([Measures].[Sales Amount], ParallelPeriod(
    [Date].[Calendar].[Month], 
    1,   
    exists(
     descendants([Date].[Calendar].currentmember,[Date].[Calendar].[Month],SELF), 
     [Date].[Month of Year].currentmember).item(0) 
     ) 
) 
SELECT 
[Date].[Month of Year].CHILDREN ON ROWS, 
([Date].[Calendar Year].CHILDREN, { [Measures].[Sales Amount], [Sales Amount Prev Month],def2 }) ON COLUMNS 
FROM [Adventure Works] 

這是相當複雜的,但它似乎解決了這個問題。

+0

你試過我的第二個解決方案嗎?如果它對你的作品簡單得多。 – momobo 2011-03-21 13:42:53

+0

我試過你的解決方案,是的。謝謝。不幸的是,我需要在單獨的軸上獲得年和行。實際上,在我的第一次嘗試中,我還使用了日曆層次結構中的幾個月,但表格部分是空的(只填充了對角線上的單元格)。 – 2011-03-22 13:34:45

+0

啊,好吧。 +1 – momobo 2011-03-22 19:11:13

相關問題