PowerBI向SSAS发送请求时忽略TOPN筛选 全量计算帕累托值
PowerBI帕累托计算忽略TOPN筛选的解决方案
问题核心
你遇到的问题本质是视觉对象的TOPN筛选属于查询上下文的一部分,ALLSELECTED()作用于整个表时会继承这个TOPN的筛选结果,导致总和仅统计TOP10的数据,占比无法达到100%;而ALL()会清除所有外部筛选,不符合按选定日期、班次等条件统计的需求。
修改后可用的DAX代码
Pareto Breakdown Description:= // 计算选定筛选条件下所有条目的总时长,仅移除分类维度的筛选 VAR TotalQuantity = CALCULATE ( SUM ( Breakdown[DurationSeconds] ), REMOVEFILTERS( 'Breakdown'[Description SK] ) ) // 当前视觉上下文中单个条目的时长 VAR CurrentBreakdownAmount = SUM ( Breakdown[DurationSeconds] ) // 汇总所有符合外部筛选条件的条目时长,不受TOPN限制 VAR SummarizedTable = SUMMARIZE ( CALCULATETABLE( 'Breakdown', REMOVEFILTERS( 'Breakdown'[Description SK] ) ), 'Breakdown'[Description SK], "Amount", SUM ( Breakdown[DurationSeconds] ) ) // 计算大于等于当前条目的累计时长 VAR CumulativeSum = SUMX ( FILTER ( SummarizedTable, [Amount] >= CurrentBreakdownAmount ), [Amount] ) RETURN DIVIDE( CumulativeSum, TotalQuantity )
逻辑说明
- 用
REMOVEFILTERS('Breakdown'[Description SK])替代原代码中的ALLSELECTED(Breakdown),仅清除用来做TOPN分类的Description SK列的筛选,保留日期、班次、是否上报等所有其他外部筛选条件,总时长会统计你选定条件下的全部数据,不会被TOPN限制。 - 汇总表
SummarizedTable也基于移除了分类维度筛选的上下文生成,包含所有符合条件的条目,保证累计占比最终可以达到100%。
如果你的TOPN筛选还用到了Breakdown表的其他列,只需要把对应列也加入到REMOVEFILTERS的参数里即可,比如同时用到了[Breakdown Type],就写成REMOVEFILTERS( 'Breakdown'[Description SK], 'Breakdown'[Breakdown Type] )。
内容的提问来源于stack exchange,提问作者marhyno
相关产品推荐
相关产品推荐

