在 DAX 中计算 PERCENTILE

Calculating PERCENTILE in DAX

我已经用谷歌搜索并一直以太慢的公式结束。我怀疑如果我分步拆分公式(创建计算列),我可能会看到一些性能提升。

我有一个 table 有一些数字列和一些最终会作为切片器的列。目的是为所选切片器的某些数字列设置第 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]
                             )

花了几分钟,仍然没有数据显示。我在 table.

中有大约 300K 条记录

我找到了一种将计算分解为一系列步骤的方法,从而获得了一个非常快速的解决方案。

为了计算 table DataAmount Paid 的第 10 个百分位数,我遵循了以下现成的公式:

计算第 10 个百分位元素的序数排名

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

可能会出现小数(小数)如 112.45

计算小数部分

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

计算正下方(floor)元素的序数排名

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

计算正上方元素的序数排名(上限)

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

计算floor对应的元素

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

我发现性能比我在网上找到的其他一些解决方案快得多。希望对以后的人有帮助。