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

StackOverflow https://stackoverflow.com/questions/148875

  •  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]}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top