Как исключить определенный член из вызова 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]}