在 PowerPivot / DAX 中查找计算度量的百分位数
Finding Percentile of a calculated measure in PowerPivot / DAX
一个 table 类似于我正在处理的数据集(虽然更简单)低于我想计算一些度量然后找到度量的百分位数。
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])
)
我有一个主元 table,其中 Rows 是所有者,然后看起来像
Owner NormAgeRating
A .5
B .72
C 1
现在问题:
我想获得新 NormAgeRating
的 .33 percentile.inc
。我想用它来将每个所有者分类(<=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
会产生错误的值...
PERCENTILEX(和所有迭代器函数)在第一个参数中的 table 上逐行操作。因此,在尝试计算百分位数之前,您需要 table 达到所需的粒度,这意味着您需要汇总 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
)
一个 table 类似于我正在处理的数据集(虽然更简单)低于我想计算一些度量然后找到度量的百分位数。
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])
)
我有一个主元 table,其中 Rows 是所有者,然后看起来像
Owner NormAgeRating
A .5
B .72
C 1
现在问题:
我想获得新 NormAgeRating
的 .33 percentile.inc
。我想用它来将每个所有者分类(<=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
会产生错误的值...
PERCENTILEX(和所有迭代器函数)在第一个参数中的 table 上逐行操作。因此,在尝试计算百分位数之前,您需要 table 达到所需的粒度,这意味着您需要汇总 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
)