Как исключить определенный член из вызова MDX, который получает всех потомков члена на более высоком уровне

В базе данных OLAP я работаю с иерархией "Местоположение", состоящей из уровней Company → Region → Area → Site → Room. Я использую следующий MDX, чтобы получить всех потомков определенного участника на уровне компании.

DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)

Теперь у меня есть требование исключить из отчета конкретный регион с названием "Избыточный". Как я могу изменить вышеуказанный MDX, чтобы исключить этот конкретный регион (и все его потомки)? Я знаю, что этот регион будет называться "избыточным", но я не хочу жестко кодировать любые другие имена регионов, поскольку они могут измениться.

Ответ 1

Функция EXCEPT примет набор и удалит члены, которых вы не хотите. В вашем случае вам нужно сказать:

EXCEPT(
{DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)},
{DESCENDANTS([Location].[Whatever].[Redundant],[Location].[Site], SELF_AND_BEFORE)}
)

Это дает вам все в первом комплекте, кроме того, что вы упомянули во втором. Это проще понять следующим образом:

EXCEPT({the set i want}, {a set of members i dont want})

Вам не нужно беспокоиться о третьем (необязательном) аргументе: http://msdn.microsoft.com/en-us/library/ms144900.aspx

Ответ 2

При возврате членов вашей иерархии просто используйте "-", чтобы исключить участника, которого вы не хотите. Вот как я исключаю неизвестных членов:

select
{[Module].[Hierarchy].[Module].Members - [Module].[Hierarchy].[Module].[Unknown]} on rows,
{[Date].[Month-day].[Day Of Month].Members - [Date].[Month-day].[Day Of Month].[Unknown]} on     columns
from [StatsView]
where {[Measures].[Maintainability Index]}