#dax #powerpivot
#dax #powerpivot
Вопрос:
Ниже приведена таблица, похожая на набор данных, над которым я работаю (хотя и намного проще), для которой я хотел бы рассчитать некоторые меры, а затем найти процентили мер.
Table Name: Data
Owner AgeRating OtherRating
A 1 2
A 4 4
A 4 6
B 3 3
B 3 9
B 7 4
C 8 8
C 4 2
Сначала — небольшая справка: я начинаю с того, что беру среднее значение оценок (по владельцу), а затем нормализую все оценки, деля каждый рейтинг на максимальный рейтинг владельца — это создает меру, из которой я хотел бы получить процентиль:
NormAgeRating=
average(Data[AgeRating])/
calculate(
maxx(
SUMMARIZE(Data,[Owner],"avg",average([AgeRating]))
,[avg]
)
,all(Data[owner])
)
У меня есть сводная таблица, владельцем которой являются строки, которая затем выглядит как
Owner NormAgeRating
A .5
B .72
C 1
Теперь вопрос:
Я хотел бы получить .33 percentile.inc
нового NormAgeRating
. Я хотел бы использовать это, чтобы классифицировать каждого владельца по группам (<= 33% ile или> 33% ile)
Это то, к чему я пытаюсь добраться:
Owner NormAgeRating 33%ile classification
A .5 .64 bottom
B .72 .64 top
C 1 .64 top
Я безуспешно пробовал это и многие другие варианты с разными groupby и т. Д. И Постоянно получаю неправильное значение:
33%ile=percentilex.inc(all(data[owner]),[NormAgeRating],0.33)
Любая помощь будет с благодарностью
Обновление: когда я пытаюсь sumx
countx
и averagex
в форме:
=
averagex(
SUMMARIZE(
all(Data[Owner]),
[Owner],
"risk",[NormAgeRating]),
[risk]
)
Я получаю правильные значения, поэтому я не уверен, почему использование percentilex.inc/exc
приведет к неправильным значениям…
Ответ №1:
ПРОЦЕНТИЛЕКС (и все функции итератора) обрабатывает строку за строкой в таблице в первом аргументе. Поэтому вам нужно, чтобы эта таблица имела желаемую степень детализации, прежде чем пытаться вычислить процентиль, что означает, что вам нужно суммировать Data[Owner]
, чтобы у вас была уникальная строка для каждого владельца, а не перебирать необработанный столбец.
Имея это в виду, обе меры могут быть записаны аналогично:
NormAgeRating =
DIVIDE (
AVERAGE ( Data[AgeRating] ),
MAXX (
SUMMARIZE (
ALL ( Data[Owner] ),
Data[Owner],
"Avg", AVERAGE ( Data[AgeRating] )
),
[Avg]
)
)
33%ile =
PERCENTILEX.INC (
SUMMARIZE (
ALL ( Data[Owner] ),
Data[Owner],
"Risk", [NormAgeRating]
),
[Risk],
0.33
)
Комментарии:
1. Привет, Алексис — Спасибо за ответ. Я попробовал это точно, и столбец оказался пустым без значений. Смотрите Обновление выше, я смог использовать тот же метод только с averagex, и он дал мне правильный ответ. Есть ли какое-либо ограничение для процентилекса, о котором я не знаю?
2. Это сработало для меня, когда я реплицировал данные вашего примера. Возможно, с вашим PBIX происходит что-то, чего не видно из того, что вы показали. i.stack.imgur.com/M6je0.png