首页 > 解决方案 > 在 PowerPivot / DAX 中查找计算度量的百分位数

问题描述

下面是一个类似于我正在处理的数据集的表格(虽然更简单),我想计算一些度量值,然后找到这些度量值的百分位数。

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

我有一个以 Rows 为所有者的数据透视表,然后看起来像

Owner NormAgeRating
 A        .5
 B       .72
 C        1

现在的问题是:我想得到percentile.inc新的 .33 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 countxaveragex采用以下形式时:

=
averagex(
    SUMMARIZE(
        all(Data[Owner]),
        [Owner],
        "risk",[NormAgeRating]),
    [risk]
)

我得到了正确的值,所以我不确定为什么 usingpercentilex.inc/exc会产生错误的值......

标签: daxpowerpivot

解决方案


PERCENTILEX(和所有迭代器函数)在第一个参数中逐行操作表。因此,在尝试计算百分位数之前,您需要该表处于所需的粒度,这意味着您需要进行汇总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
)

推荐阅读