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

如何在Power BI中用DAX按月份和类别创建分组排名?

Power BI中按月份和类别分组创建DAX排名的问题解决

原代码返回销售额而非排名的原因

你的DAX公式本质是计算销售额而非生成排名:

  • 公式核心是CALCULATE([Total Sales], ...),作用是对[Total Sales]应用筛选条件后求值;
  • TOPN(10, ALLSELECTED(category),[Total Sales])仅作为筛选器,限定只计算销售额TOP10的类别数据;
  • VALUES(category)锁定了当前行的类别,最终结果就是当前类别(且属于TOP10)的销售额,自然不会输出排名数值。

正确的月度类别排名DAX写法

要实现每个月份内按类别销售额排名,需使用DAX专门的排名函数RANKX,示例代码如下:

类别月度排名 = 
RANKX(
    // 定义排名上下文:当前选中月份下的所有类别
    CALCULATETABLE(ALLSELECTED('你的表名'[category]), ALLSELECTED('你的表名'[月份列])),
    // 排名依据的度量值
    [Total Sales],
    // 排序方式:降序(销售额越高排名越靠前)
    , DESC,
    // 并列值处理:密集排名(相同销售额共享排名,后续排名不跳过空位)
    DENSE
)

公式逻辑说明

  • CALCULATETABLE(...):限定排名范围为当前月份内的所有类别,确保排名是按月份分组计算的,不会跨月份排名;
  • [Total Sales]:指定排名的依据字段,即按类别销售额高低排序;
  • DESC:显式设置降序排序,可根据需求改为ASC升序;
  • DENSE:设置密集排名规则,若不需要可省略(默认是SKIP,即并列后跳过对应空位)。

筛选TOP10类别的补充方案

如果需要只显示每个月销售额TOP10的类别,可在视觉对象的筛选器中添加条件:类别月度排名 ≤10;也可以直接创建度量值标记是否属于TOP10:

是否TOP10类别 = 
VAR 当前排名 = [类别月度排名]
RETURN IF(当前排名 <= 10, "是", "否")

内容的提问来源于stack exchange,提问作者Andrey Hartung

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 01:20:05