2017-07-31 79 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可以获得更多人的帮助 –