MDX:创建一个集合,排除来自不同层次结构的条目

MDX: Create a set excluding entries from a different hierarcy

我正在尝试创建一个自定义集以排除来自另一个层次结构的条目,因此我无法使用 except 函数。我试过这个,但我收到一条错误消息,指出层次结构在查询中显示了不止一次。有人可以告诉我如何以最好的方式做到这一点吗?

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:设法将其破解在一起[=13​​=]

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)) + "]") )

你不能这样做。你想限制来自不同维度的数据,所以你必须使用元组:

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]}
    )