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

求Power BI中按状态优先级赋值的DAX计算列

实现Power BI按状态优先级为重复引用分配最高状态的DAX计算列

问题场景

现有Power BI数据表包含两列:

  • Column A:存在重复的引用值(如示例中的人名)
  • Column B:状态值为G1、G2、G3、G4、G5,同一引用可能对应多个状态

需要创建DAX计算列,按照G5 > G4 > G3 > G2 > G1的优先级,为每个引用的所有行分配其对应的最高优先级状态,示例如下:

原始数据:

Column AColumn B
RahulG1
RahulG2
RahulG3
MehulG1
MehulG5
RohitG1
RanjeetG2
RanjeetG5

期望结果:

Column AColumn BResult
RahulG1G3
RahulG2G3
RahulG3G3
MehulG1G5
MehulG5G5
RohitG1G1
RanjeetG2G5
RanjeetG5G5

解决方案:DAX计算列公式

通用版(适配任意状态命名)

通过将状态转换为可比较的优先级数值,再提取最大值对应的状态:

Result = 
VAR CurrentRef = '表名'[Column A]
VAR StatusPriority = 
    SWITCH(
        TRUE(),
        '表名'[Column B] = "G5", 5,
        '表名'[Column B] = "G4", 4,
        '表名'[Column B] = "G3", 3,
        '表名'[Column B] = "G2", 2,
        '表名'[Column B] = "G1", 1
    )
VAR MaxPriority = 
    CALCULATE(
        MAXX('表名', StatusPriority),
        ALLEXCEPT('表名', '表名'[Column A])
    )
RETURN
    SWITCH(
        MaxPriority,
        5, "G5",
        4, "G4",
        3, "G3",
        2, "G2",
        1, "G1"
    )

简化版(适配G+数字的状态命名)

如果状态固定为G加数字的格式,可以直接提取数字进行比较,省去两次SWITCH:

Result = 
VAR CurrentRef = '表名'[Column A]
VAR MaxStatusNum = 
    CALCULATE(
        MAXX('表名', VALUE(RIGHT('表名'[Column B], 1))),
        ALLEXCEPT('表名', '表名'[Column A])
    )
RETURN
    "G" & MaxStatusNum

公式说明

  1. CurrentRef:获取当前行的引用值,用于筛选同一引用的所有行。
  2. StatusPriority/MaxStatusNum:将状态转换为可比较的数值,数值越大代表优先级越高。
  3. MaxPriority:用ALLEXCEPT保留当前引用的所有行,再用MAXX提取其中的最高优先级数值。
  4. RETURN部分:将最高优先级数值转换回对应的状态文本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 17:37:37