Вычисляемые элементы с несколькими иерархиями атрибутов - MDX - PullRequest
0 голосов
/ 01 ноября 2018

Я нашел этот маленький код, где он динамически вычисляет TOTAL с для всех измерений / иерархий, которые я хочу.

Это близко к тому, что мне нужно, но не будет работать для измерений, которые имеют разное количество уровней иерархии (иерархия атрибутов). Текущий код работает только при наличии только одной иерархии атрибутов из-за CurrentMember.Parent. Я мог бы использовать CurrentMember.Parent.Parent для Dimension.Hierarchy, которые имеют два уровня и т. Д., Но не работал бы для тех, у кого только одна иерархия атрибутов (уровень).

CALCULATE;     
CREATE MEMBER CURRENTCUBE.[Measures].[Total On Hand Amount]
AS ([Measures].[On Hand Amount],Axis(1).Item(0).Item(0).Dimension.CurrentMember.Parent), 
FORMAT_STRING = "#,#", 
VISIBLE = 1  ;

Я бы хотел, чтобы этот код MDX работал для любого Dimension.Hierarchy независимо от количества иерархий атрибутов (Level / s).

Любая помощь приветствуется !!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018
(Axis(1).Item(0).Item(0).Dimension.Levels(0).Item(0), [Measures].[On Hand Amount])

Выше приведен правильный ответ: итого для меры для динамического выбора любого измерения, но этот расчет MDX не будет работать из отчета PowerBI (DAX), который является лишь ограничением PowerBI.

У меня теперь ВСЕГО работает с этим -

SCOPE(DESCENDANTS([Warehouses].[Warehouses],,AFTER));          
[Measures].[Total On Hand Amount] = (ROOT([Warehouses]),[Measures].[On Hand Amount]);
END SCOPE;

Мне просто нужно повторить эту ОБЛАСТЬ для каждого [Измерения]. [Иерархии] в кубе, чтобы ИТОГО работало для любого выбора, включая несколько измерений из Power BI. У него нет динамической функциональности, как у Axis (), но он дает нужный мне результат.

Надеюсь, это поможет кому-то еще !!

0 голосов
/ 05 ноября 2018

Вы можете использовать функцию ancestors вместо родителя. Он принимает параметр измерения и второй параметр, который показывает, сколько уровней вы хотите получить (как глубоко в дереве пройти). Поэтому, если вы знаете, сколько уровней имеет ваше измерение, вы можете использовать что-то вроде:

Ancestors(Axis(1).Item(0).Item(0).Dimension.CurrentMember, 5) 

Вместо числа вы также можете добавить уровень измерения в качестве второго параметра. Тогда он пойдет так глубоко, как заданный уровень измерения - поэтому, если вы добавите корневой уровень измерения, он должен добраться до него

...