我用谷歌搜索并继续使用太慢的公式。我怀疑如果我按步骤分割公式(创建计算列),我可能会看到一些性能提升。
我有一个表有一些数字列和一些最终会成为切片器的表。目的是在所选切片器的某些数字列上具有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的记录。
答案 0 :(得分:1)
我找到了一种方法,可以通过一系列步骤打破计算,从而获得了一个非常快速的解决方案。
为了计算表Amount Paid
中Data
的第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])
我发现性能明显快于我在网上找到的其他解决方案。希望将来有人帮助。