如何在Power BI中移除RANKX函数的不必要筛选器,仅保留指定维度筛选效果
DAX 固定维度范围排名解决方案
原有写法错误原因
- 初始
testrank度量值使用ALLSELECTED(Sales)作为排名范围,会保留所有用户施加的筛选条件,筛选ParentBrand后排名范围自动缩小,导致排名变更。 - 之前的
Rank(allexcept)写法仅在RANKX的迭代范围使用了ALLEXCEPT,计算单品销量的第二个参数仍受ParentBrand等其他筛选影响,每个单品的销量仅统计筛选后的值,和全局范围的销量不一致,最终排名错误。
正确实现代码
Fixed Scope Rank = RANKX( -- 定义排名范围:仅保留部门、品类、子品类三类维度的用户筛选,清除其他所有筛选 CALCULATETABLE( ALLSELECTED(Sales), ALLEXCEPT(Sales, Sales[CorporateDepartment], Sales[Category], Sales[SubCategory]) ), -- 计算单品全量销量:保留三类维度+当前单品的筛选,清除其他筛选影响 CALCULATE( SUM(Sales[UnitsPerStore]), ALLEXCEPT(Sales, Sales[CorporateDepartment], Sales[Category], Sales[SubCategory], Sales[UPC]) ), , ASC )
效果说明
- 筛选ParentBrand、母公司、UPC等非三类指定维度的字段时,仅会过滤显示符合筛选条件的单品,单品的排名和未筛选该字段时的排名完全一致。
- 调整Department、Category、Subcategory的筛选时,排名范围会同步变更,可实现指定维度范围内的全局排名查询。
注意:如果你的单品不是通过UPC唯一标识,可将第二个
ALLEXCEPT函数末尾的Sales[UPC]替换为对应的单品唯一标识字段,多字段的话依次追加即可。
内容的提问来源于stack exchange,提问作者adam
相关产品推荐
相关产品推荐

