Power BI DAX实现特定公司各产品组销售排名需求
Power BI 特定公司各产品组销售排名的正确DAX写法
你的度量值返回全1的原因很明确:外部筛选器已经锁定了选中的公司,导致CALCULATE(SUM([sales]))在RankX迭代时,始终只计算当前选中公司的销售额——每个产品组里只有这一个数值,排名自然都是1。
正确度量值写法(带注释)
Rank Group = VAR CurrentCategory = SELECTEDVALUE('Table'[Prod Group]) VAR AllCompaniesInCategory = CALCULATETABLE( ALL('Table'[company]), 'Table'[Prod Group] = CurrentCategory ) RETURN RANKX( AllCompaniesInCategory, CALCULATE(SUM('Table'[sales])), , DESC, DENSE )
关键逻辑说明
AllCompaniesInCategory变量:获取当前产品组下的所有公司,解除了外部的公司筛选限制,确保RankX能在完整的公司集合里做排名比较。- 保留了当前行的产品组筛选,保证排名仅在同一个产品组内进行。
- 外部的公司筛选器只会控制最终展示的结果——当你选中特定公司后,视觉对象只会显示该公司在各产品组的排名,而排名计算的底层是基于整个产品组的所有销售数据。
简化版写法
如果觉得变量冗余,也可以用ALLEXCEPT直接实现:
Rank Group = RANKX( CALCULATETABLE( ALL('Table'[company]), ALLEXCEPT('Table', 'Table'[Prod Group]) ), CALCULATE(SUM('Table'[sales])), , DESC, DENSE )
ALLEXCEPT('Table', 'Table'[Prod Group])的作用是移除除产品组外的所有筛选,直接得到当前产品组下的所有公司集合,逻辑和上面的版本一致。
内容的提问来源于stack exchange,提问作者Vineesh V
相关产品推荐
相关产品推荐

