DAX - 2-фазное средневзвешенное значение с 2-мя различными мерами веса

У меня довольно сложная проблема для выражения. В DAX powerpivot я пытаюсь создать показатель, который будет использовать два разных средневзвешенных значения в одном показателе на основе уровня агрегирования.

Проблема усложняется еще больше, потому что меры веса имеют разный уровень дублирования (необходимо применять к ним разные СУММ). Я смог создать Отличительные СУММ Меры 1 и 2, чтобы решить эту проблему.

[Weight_1] = SUMX(DISTINCT(Table1[Level2],[SupportWeight1])
[SupportWeight1] = MAX(Table1[RevenueLevel2])

[Weight_2] = SUMX(DISTINCT(Table1[Level3],[SupportWeight2])
[SupportWeight1] = MAX(Table1[RevenueLevel3])

Пока все хорошо. Это было необходимо, потому что, как вы увидите в приведенном ниже примере, обе меры должны быть «дедуплицированы» во время агрегации. Weight_1 является уникальным для измерения уровня 2, а вес 2 уникален на более высоком уровне для измерения уровня 3.

После этого я хотел создать средневзвешенное значение, используя Weight_1, создав новый вспомогательный столбец:

[Measure x Weight_1] = [Measure] * [Weight_1]

Я забыл упомянуть, веса уникальны при более высокой степени детализации (уровень 2 и уровень 3), однако [Measure] уникальна при самой низкой детализации: уровень 1.

Теперь у меня было все для создания первого средневзвешенного значения:

[Measure Weight_1] = SUMX(Table1,[Measure x Weight_1])/SUMX(Table1,[Weight_1])

Это было сделано и работает, как ожидалось.

Хитрая часть началась сейчас. Я думал, что просто создав одну следующую опорную колонку и окончательную меру, я выполню «Окончательную взвешенную» меру. И он будет вести себя по-разному на Уровнях 1,2,3 и по-разному на Уровнях 4,5,6,...

Итак, я использую [Измерить вес_1] и создаю:

[Measure Weight_1 x Weight_2] =  [Measure Weight_1] * [Weight_2]

Следовательно, окончательная мера:

[Measure Weight_2 over Weight_1] =SUMX(Table1, [Measure Weight_1 x Weight_2] )/SUMX(Table1,[Weight_2])

Однако это не работает, очевидно, что эти меры имеют разную степень детализации и не объединяются во время агрегации. В окончательной мере проблема заключается в том, что агрегация уровня 3 является средним арифметическим, а не средневзвешенным, но я ожидаю получить тот же результат, что и в [Measure Weight_1]. Просто потому, что weight #2 имеет одинаковое значение уровня 3,2,1.

Следовательно, что-то подобное, вероятно, будет обработано в MDX с помощью функции «Фокус».

Возможно, проблема в столбце [Measure Weight_1 x Weight_2], может быть, мне нужно сначала агрегировать и это.

Возможно, это можно было бы сделать с помощью функций ROLLUP, но я не уверен, как это написать.

Я застрял здесь.

Попробуйте программно переписать желаемое решение:

Weighted Average of Measure X =
IF Dim = Level1 Then Measure
IF Dim = Level2 Then AVG(Measure)
IF Dim = Level3 Then SUM(AVG(Measure)*Weight_1) / SUM(Weight_1)
IF Dim = Level4 Then SUM(SUM(AVG(Measure)*Weight_1) / SUM(Weight_1) * Weight_2) / SUM(Weight_2)

введите здесь описание изображения


person milan minarovic    schedule 01.03.2017    source источник