PowerBI中按ISIN分组计算百分位数的问题求助
按ISIN分组计算债券Bid/Ask百分位数的DAX解决方案
问题根源
你当前的公式使用ALLSELECTED(CleansedBenchmark[Securities])破坏了ISIN的分组上下文,导致无法按每个ISIN聚合计算百分位数,因此每行返回自身的PxBid值。以下是两种可行的解决方式:
方案1:在原表中添加计算列(保留每行数据并显示对应ISIN的百分位数)
直接在CleansedBenchmark表中创建计算列,计算每个ISIN的Q1(25%分位数)和Q3(75%分位数):
Bid价格的Q1计算列
Bid_Q1 = CALCULATE( PERCENTILEX.INC( CleansedBenchmark, CleansedBenchmark[PxBid], 0.25 ), ALLEXCEPT(CleansedBenchmark, CleansedBenchmark[ISIN]) )
Bid价格的Q3计算列
Bid_Q3 = CALCULATE( PERCENTILEX.INC( CleansedBenchmark, CleansedBenchmark[PxBid], 0.75 ), ALLEXCEPT(CleansedBenchmark, CleansedBenchmark[ISIN]) )
Ask价格的百分位数(同理)
将上述公式中的PxBid替换为PxAsk,即可得到Ask价格的Q1和Q3。
原理:ALLEXCEPT函数会移除除ISIN外的所有筛选上下文,确保计算范围限定在当前行所属的同一个ISIN的所有数据行内。
方案2:新建汇总表(仅保留ISIN及其对应百分位数)
如果不需要保留原表的每行细节,可创建一张仅包含ISIN和对应百分位数的汇总表:
ISIN_价格百分位数汇总 = SUMMARIZE( CleansedBenchmark, CleansedBenchmark[ISIN], "Bid_Q1", CALCULATE(PERCENTILEX.INC(CleansedBenchmark, CleansedBenchmark[PxBid], 0.25)), "Bid_Q3", CALCULATE(PERCENTILEX.INC(CleansedBenchmark, CleansedBenchmark[PxBid], 0.75)), "Ask_Q1", CALCULATE(PERCENTILEX.INC(CleansedBenchmark, CleansedBenchmark[PxAsk], 0.25)), "Ask_Q3", CALCULATE(PERCENTILEX.INC(CleansedBenchmark, CleansedBenchmark[PxAsk], 0.75)) )
原理:SUMMARIZE函数按ISIN分组,对每组数据单独计算指定的百分位数,最终生成一张紧凑的汇总表。
补充:可视化场景下的度量值方案
如果是在Power BI可视化中按ISIN分组展示百分位数,可使用度量值(而非计算列):
Bid_Q1_度量值 = PERCENTILEX.INC( CALCULATETABLE(CleansedBenchmark, ALLEXCEPT(CleansedBenchmark, CleansedBenchmark[ISIN])), CleansedBenchmark[PxBid], 0.25 )
将该度量值拖入可视化组件,并按ISIN分组,即可正确显示每个ISIN的Bid价格Q1。
内容的提问来源于stack exchange,提问作者Kronivar
相关产品推荐
相关产品推荐

