2017-07-31 61 views
0

我想創建一個自定義集合,它排除來自另一個層次結構的條目,並且因此我不能使用except函數。我已經嘗試過,但是我收到一條錯誤消息,指出在查詢中多次顯示層次結構。有人可以請教我如何以最好的方式做到這一點?MDX:創建一個不包括來自不同層次的條目的集合

WITH 
SET [Market1] AS { 
    [Market].[Market].[Market].&[103], 
    -([Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
    [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]) 
} 

編輯:這是我的查詢(大部分是從查詢構建器構建)

WITH 
SET [Market1] AS SUM((
    [Market].[Market].[Market].&[103], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    )), [Measures].[Price]) 
SELECT NON EMPTY [Market1] ON ROWS 
FROM (SELECT ({ StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]") }) ON COLUMNS 
FROM (SELECT ({ [Travel Type].[Travel Type].&[101], 
        [Travel Type].[Travel Type].&[102], 
        [Travel Type].[Travel Type].&[103] }) ON COLUMNS 
FROM (SELECT ({ [Departure Date].[Year].&[2017] }) ON COLUMNS 
FROM [Booking]))) 
WHERE ([Departure Date].[Year].&[2017], 
     [Travel Type].[Travel Type].CurrentMember, 
     StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]")) 

EDIT2:託管砍一起

WITH 
SET [Market1] AS (
    [Market].[Market].[Market].&[103], 
    EXCEPT({[Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS}, 
     {[Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    )) 
MEMBER Agg AS SUM 
    ([Market1], [Measures].[Price] 
    ) 
SELECT NON EMPTY Agg ON COLUMNS 
FROM (SELECT ({ StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]") }) ON COLUMNS 
FROM (SELECT ({ [Travel Type].[Travel Type].&[101], 
        [Travel Type].[Travel Type].&[102], 
        [Travel Type].[Travel Type].&[103] }) ON COLUMNS 
FROM (SELECT ({ [Departure Date].[Year].&[2017] }) ON COLUMNS 
FROM [Booking]))) 
WHERE ([Departure Date].[Year].&[2017], 
     [Travel Type].[Travel Type].CurrentMember, 
     StrToMember("[Report Date].[Report Date].&[" + Str(Int(CDbl(Now()) - 38718)) + "]")) 

回答

0

你不能做這個辦法。你想限制不同維度的數據,所以你必須使用元組:

WITH 
SET [Market1] AS (
    [Market].[Market].[Market].&[103], 
    EXCEPT([Agency].[Nationality - Consortium - Agency].[Nationality].ALLMEMBERS, 
     {([Agency].[Nationality - Consortium - Agency].[Nationality].&[111], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[116], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[242], 
     [Agency].[Nationality - Consortium - Agency].[Nationality].&[134]} 
    ) 
+0

謝謝,它的工作原理!我怎麼總結一切?現在我得到所有機構的所有行。我已經嘗試了sum函數,但是我得到了一個錯誤消息,說函數需要一個元組作爲參數,我已經把原來的文章中的查詢 – joddm

+0

你不能在SET中求和 - 你必須創建計算成員(就像你在Edit2中)或者直接在查詢中執行。在未來,如果你有另外一個問題時詢問單獨的查詢會更好。通過這種方式,SUM可以獲得更多人的幫助 –