Как исключить определенного участника из вызова MDX, который получает всех потомков члена на более высоком уровне
-
02-07-2019 - |
Вопрос
В базе данных OLAP, с которой я работаю, существует иерархия «Местоположение», состоящая из уровней Компания -> Регион -> Район -> Сайт -> Помещение.Я использую следующий MDX, чтобы получить всех потомков определенного участника на уровне компании.
DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)
Теперь у меня есть требование исключить из отчета определенный регион с именем «Резервный».Как изменить приведенный выше MDX, чтобы исключить этот конкретный регион (и всех его потомков)?Я знаю, что этот регион будет называться «Резервный», но я не хочу жестко запрограммировать имена других регионов, поскольку они могут измениться.
Решение
Функция 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
Другие советы
При возврате членов вашей иерархии просто используйте «-», чтобы исключить ненужного участника.Вот как я исключаю неизвестных участников:
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]}