Как исключить определенный элемент из вызова MDX, который получает все потомки элемента на более высоком уровне
в базе данных OLAP, с которой я работаю, есть иерархия "местоположение", состоящая из уровней Company -> Region -> Area -> Site -> Room. Я использую следующий MDX, чтобы получить всех потомков конкретного члена на уровне компании.
DESCENDANTS([Location].[Test Company],[Location].[Site], SELF_AND_BEFORE)
теперь у меня есть требование исключить из отчета определенный регион с именем "избыточный". Как я могу изменить вышеупомянутый MDX, чтобы исключить этот конкретный регион (и всех его потомков)? Я знаю, что этот регион будет называться "резервным" но я не хочу жестко кодировать любые другие названия регионов, так как они могут измениться.
2 ответов
функция 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]}