У меня довольно сложная проблема для выражения. В 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)