2016-01-27 2 views
0

Я ищу помощь в том, как написать конкретную меру DAX. Вот упрощенная версия моих данных и модели:DAX Измерение с разной степенью детализации

Таблицы: Data

Модель:

Model

Меры:

Total Amt:=SUM(Amounts[Amt]) 
Total Pos Amt:=SUMX(Amounts, IF([Amt]<0,0,[Amt])) 
Total Amt All:=CALCULATE([Total Pos Amt],ALL(Ptr)) 
Total Amt All 2:=SUMX(Bridge,CALCULATE([Total Pos Amt],ALL(Ptr))) 
Total Amt All 3:=SUMX(VALUES(Bridge[Pri]),CALCULATE([Total Pos Amt],ALL(Ptr))) 

enter image description here enter image description here

Как можно видеть в первом сводной таблицы (где [Pri] & [Ptr] являются полями строкой), выделенные клетки показывают значение с проблемой. Показатель [Total Pos Amt] суммирует столбец [Amt] в таблице «Суммы» путем итерации через него и оценки выражения, в котором отрицательные суммы обрабатываются как нулевые, а положительные суммы сохраняются. При гранулярности уровня [Pri] я хочу, чтобы такая же логика применялась (т. Е. Оценивала выражение на уровне [Ptr]). Проблема с мерой [Total Amt All] заключается в том, что в сводной таблице я получаю строку для [Ptr] Z под [Pri] A, которую я не хочу. Меры [Total Amt All 2] и [Total Amt All 3] решают эту проблему, но промежуточные итоги на уровне [Pri] ошибочны в [Total Amt All 2], а общая сумма неверна в [Total Amt All 3].

Любая помощь была бы принята с благодарностью! Как я могу написать меру, которая не отображает [Ptr], которая не связана с [Pri] на таблицу Bridge, но также правильно суммирует показатель [Total Pos Amt] на уровне [Pri]?

+0

Некоторые полезные советы в будущем: объясните, что вы хотите с точки зрения бизнес-решения, а не кучу конкретных мер и промежуточных итогов, очень сложно следовать именно тем, что вы хотите. –

+0

В частности, вы хотите * видеть * каждый Ptr, связанный с Pri, который имеет общую сумму, даже если это не в таблице Amounts? –

+0

Так, например, A-GP не имеет значения в суммах, но вы хотите увидеть строку в сводной таблице, которая говорит A-GP-20? –

ответ

1

Таким образом, одной из ваших проблем может быть то, какие поля вы используете в сводной таблице. Я получил это работает, используя таблицу моста, как поля:

TotalAmtBridged:=CALCULATE (SUMX(Amounts, IF([Amt]<0,0,[Amt])) , Bridge) 
FinalTotalAmt:= Calculate([TotalAmtBridged], ALL(Bridge[Ptr]) 

И тогда PivotTable использует мост [Pri] и мост [Ptr]. Таким образом TotalAmtBridged просто заставляет вашу общую сумму использовать контекст Bridge, а затем FinalTotal говорит, что игнорирует Ptr (т. Е. Для каждой строки, которую мы показываем, вычисляет общую сумму только для Bridge [Pri]).

И тогда общая сумма уже делает это, поэтому Боб - ваш дядя.

+0

Спасибо Кайл. Да, я думаю, что работает; Я всегда старался избегать установки таблиц моста в строки/столбцы сводных таблиц. Если на обеих таблицах с одной стороны (Pri и Ptr) было несколько столбцов атрибутов, я бы тоже не смог их включить, используя таблицу мостов. Это один из недостатков отсутствия встроенной поддержки M2M в PowerPivot. Спасибо за помощь! – LoganTheSnowEater

+0

Ну, ваша настоящая проблема в том, что значения в Pri и Ptr не действуют как фильтры на Bridge, поэтому использование Pri [Pri], ALL (Ptr [Ptr]) вернет (как вы видите) строку для каждого Pri-Ptr комбо, а не только комбо Bridge. –

+0

Возможно, это было проще, чем я думал, но ваши расчеты помогли мне туда добраться! Если я использую FinalTotalAmt: = CALCULATE ([Total Amt All], Bridge), я получаю правильные результаты при использовании Pri и Ptr в сводной таблице (и не нужно ставить столбцы Bridge в сводной таблице). Кажется, лучшее из обоих миров. – LoganTheSnowEater

Смежные вопросы