I am trying to create a custom set which excludes entries from another hierarchy, and I can't use the except function because of this. I have tried this, but I get an error message saying that the hierarchy is shown more than once in the query. Could someone please advise me on how to do this in the best way?
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])
}
EDIT: Here is my query (most of it is built from a query builder)
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: Managed to hack it together
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)) + "]") )
You cannot do it this way. You want to limit data from different dimensions, so you have to use tuple:
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]}
)