在 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 Data
中 Amount 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])
我发现性能比我在网上找到的其他一些解决方案快得多。希望对以后的人有帮助。
我已经用谷歌搜索并一直以太慢的公式结束。我怀疑如果我分步拆分公式(创建计算列),我可能会看到一些性能提升。
我有一个 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 Data
中 Amount 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])
我发现性能比我在网上找到的其他一些解决方案快得多。希望对以后的人有帮助。