You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PowerBI使用RANKX按歌曲得票数排名全部显示第1如何解决

问题根因

RANKX的执行逻辑为:先迭代第一个参数指定的表范围,对每一行计算第二个参数的表达式值生成排序值列表,再将当前筛选上下文下计算的第二个参数值与列表对比得到排名。
你原写法的问题在于:第二个参数MAX(songs[votes])在迭代ALL(songs)的每一行时,无法继承迭代的行上下文,迭代范围内所有行返回的值都等于当前可视化行对应歌曲的票数,排序值列表内所有值相等,因此所有歌曲的排名均为1。

解决方法

1. 先创建基础得票度量值(推荐)

统一封装票数统计逻辑,避免重复编写聚合函数,适配更多筛选场景:

total_votes = SUM(songs[votes])

如果你的songs表每行对应唯一歌曲,也可以替换为MAX(songs[votes])。

2. 修正RANKX度量值写法

根据你的业务需求选择对应写法:

  • 固定全库排名:不受页面其他歌曲筛选器影响,所有歌曲全局排名
songs_ranking = RANKX(ALL(songs[title]), [total_votes],, DESC, SKIP)

这里第一个参数仅指定清除songs[title]字段的筛选,比直接传入ALL(songs)性能更优,也不会干扰其他字段的筛选逻辑。

  • 动态范围排名:排名范围随页面筛选器同步变化(例如筛选特定歌手后,仅在该歌手的歌曲范围内排名)
songs_ranking = RANKX(ALLSELECTED(songs[title]), [total_votes],, DESC, SKIP)

可选参数调整

  • 第四个参数填DESC表示按票数从高到低排序,票数越高排名越靠前,填ASC则为从低到高排序
  • 第五个参数填SKIP表示同票时跳过后续名次(例:2个第1名,下一名为第3名),填DENSE表示同票时保留连续排名(例:2个第1名,下一名为第2名)

内容的提问来源于stack exchange,提问作者Javier Blanco

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 07:15:07