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

Power BI中如何基于切片器在可视化对象内实现动物按浏览量排名

Power BI 切片器筛选后按浏览量排名的度量值解决方案

原始数据

Answers 表数据如下:

AnimalViewed
Cat17
Chicken12
Cow7
Dog28
Goat36

需求

设置 Animal 切片器后,在可视化对象中对筛选出的动物按 Viewed(浏览量)进行排名,需创建对应的度量值。

预期结果

当切片器选中 Chicken、Cow、Dog 时,排名结果如下:

AnimalViewedRANK
Chicken122
Cow73
Dog281

失败的尝试

尝试1:使用RANK Dense函数未生效

Rank_fkt = RANKX(ALL(Answers),CALCULATE(MAX(Answers[Viewed])),,DESC,Dense)

返回结果:

AnimalViewedRank_fkt
Chicken124
Cow75
Dog282

问题:ALL(Answers) 忽略切片器筛选,计算所有动物的全局排名,而非仅筛选后的范围。

尝试2:使用RANK ALLSELECTED函数未生效

Rank_ALL = rankx(ALLSELECTED(Answers[Animal]),CALCULATE(MAX(Answers[Viewed])))

返回结果:

AnimalViewedRank_ALL
Chicken121
Cow71
Dog281

问题:行上下文已筛选单个动物,CALCULATE(MAX(Answers[Viewed])) 仅返回当前行的浏览量,导致每个动物都和自身比较,排名均为1。

尝试3:结合RANK与Selectedvalue的尝试失败

RANK_sel = 
VAR SelectedAnimal = SELECTEDVALUE(Answers[Animal])
RETURN
    RANKX(
        ALL('Answers'),
        CALCULATE(SUM('Answers'[Viewed]), Answers[Animal] = SelectedAnimal),,DESC,Dense
         )

返回结果:

AnimalViewedRank_fkt
Chicken121
Cow71
Dog281

问题:SelectedAnimal 在可视化行上下文里是当前行的动物,迭代时每一行仅计算自身的浏览量,所有行排名均为1。

正确的度量值

使用以下DAX表达式创建度量值:

Animal Rank = 
RANKX(
    ALLSELECTED(Answers[Animal]),
    CALCULATE(MAX(Answers[Viewed])),
    ,
    DESC,
    DENSE
)

原理说明

  • ALLSELECTED(Answers[Animal]):限定排名范围为切片器筛选后的所有动物,确保仅在选中集合内计算排名。
  • CALCULATE(MAX(Answers[Viewed])):迭代每个选中的动物时,自动切换上下文获取对应动物的浏览量。
  • DESC:按浏览量降序排名,数值越大排名越靠前。
  • DENSE:采用紧密排名规则,相同浏览量对应相同排名,后续排名不跳跃。

内容的提问来源于stack exchange,提问作者Johnny Spindler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 00:07:27