计算DAX中的PERCENTILE

时间:2015-06-04 03:32:50

标签: olap powerpivot dax powerbi ssas-tabular

我用谷歌搜索并继续使用太慢的公式。我怀疑如果我按步骤分割公式(创建计算列),我可能会看到一些性能提升。

我有一个表有一些数字列和一些最终会成为切片器的表。目的是在所选切片器的某些数字列上具有10%,25%,50%,75%和90%的百分位数。

这就是我对“Total Pd”栏目中第10个百分位数的看法。

TotalPaid10thPercentile:=MINX(
                              FILTER(
                                     VALUES(ClaimOutcomes[Total Pd]),
                                     CALCULATE(
                                               COUNTROWS(ClaimOutcomes),
                                               ClaimOutcomes[Total Pd] <= EARLIER(ClaimOutcomes[Total Pd]) 
                                              )> COUNTROWS(ClaimOutcomes)*0.1
                                    ),
                               ClaimOutcomes[Total Pd]
                             )

需要几分钟但仍然没有数据显示。我在这张表中有大约300K的记录。

1 个答案:

答案 0 :(得分:1)

我找到了一种方法,可以通过一系列步骤打破计算,从而获得了一个非常快速的解决方案。

为了计算表Amount PaidData的第10个百分点,我遵循了以下的书外公式:

计算第10个百分位元素的序数等级

10ptOrdinalRank:=0.10*(COUNTX('Data', [Amount Paid]) - 1) + 1

它可能会出现一个十进制(分数)数字,如112.45

计算小数部分

10ptDecPart:=[10ptOrdinalRank] - TRUNC([10ptOrdinalRank])

计算元素(地板)下方元素的序数等级

10ptFloorElementRank:=FLOOR([10ptOrdinalRank],1)

计算元素的序数等级(天花板)

10ptCeilingElementRank:=CEILING([10ptOrdinalRank], 1)

计算与楼层对应的元素

10ptFloorElement:=MAXX(TOPN([10ptFloorElementRank], 'Data',[Amount Paid],1), [Amount Paid])

计算与天花板相对应的元素

10ptCeilingElement:=MAXX(TOPN([10ptCeilingElementRank], 'Data',[Amount Paid],1), [Amount Paid])

计算百分位值

10thPercValue:=[10ptFloorElement] + [10ptDecPart]*([10ptCeilingElement]-[10ptFloorElement])

我发现性能明显快于我在网上找到的其他解决方案。希望将来有人帮助。