0

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

我有一个表,其中包含一些数字列以及一些最终会作为切片器的列。目的是在所选切片器的某些数字列上具有第 10、第 25、第 50、第 75 和第 90 个百分位数。

这就是我在“总 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]
                             )

这需要几分钟,但仍然没有数据显示。我在这张表中有大约 30 万条记录。

4

1 回答 1

2

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

为了计算Amount Paid表中的第 10 个百分位数Data,我遵循了以下书外公式:

计算第 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])

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

于 2015-06-23T03:37:05.843 回答