在 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 countxaveragex 形式时:

=
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
)