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

如何在Power BI中使用DAX而非Power Query合并指定行值?

用DAX实现业务单元值的统一转换与去重

我有一个名为"Business Unit"的表,数据如下:

Business Unit
A.1
A.2
A.3
B
C

希望将A.1、A.2、A.3的行值统一改为A,得到如下新表:

Business Unit
A
B
C

尝试了以下DAX表达式但存在错误:

Business Unite Measure = 
CALCULATETABLE( 'Events', 
        SWITCH( 'Events'[Business Unit], 
                "A.1", "A",
                "A.2", "A",
                "A.3", "A",
                "B", "B",
                "C", "C", BLANK() ) )

已知该需求可在Power Query中实现,请问是否能用DAX达成目标?

可以用DAX实现,先分析原表达式的问题

你的原DAX逻辑有误:CALCULATETABLE的第二个参数需要是筛选条件(返回布尔值的表达式),但你用SWITCH直接返回了字符串值,导致函数无法正确解析筛选逻辑,所以报错。

下面提供两种符合需求的DAX实现方案:

方案1:在原表中添加计算列(保留原数据,新增转换后的值)

如果需要在原Events表中新增一列存储统一后的值,创建计算列:

统一后业务单元 = 
IF(STARTSWITH('Events'[Business Unit], "A"), "A", 'Events'[Business Unit])
  • 用STARTSWITH判断是否以"A"开头,自动覆盖所有类似A.1/A.2/A.3的情况,比逐个列举更灵活。
  • 如果需要严格匹配指定的几个值(比如仅A.1/A.2/A.3),可以改用IN函数:
    统一后业务单元 = 
    IF('Events'[Business Unit] IN {"A.1", "A.2", "A.3"}, "A", 'Events'[Business Unit])
    

方案2:生成新的去重表(直接得到你想要的最终表结构)

如果需要生成一个仅包含去重后值的新表,使用以下DAX:

新业务单元表 = 
SUMMARIZE(
    'Events',
    "Business Unit",
    IF(STARTSWITH('Events'[Business Unit], "A"), "A", 'Events'[Business Unit])
)
  • SUMMARIZE会自动对转换后的值去重,最终得到仅包含A、B、C三行的表。
  • 也可以用DISTINCT+ADDCOLUMNS的组合实现,效果一致:
    新业务单元表 = 
    SELECTCOLUMNS(
        DISTINCT(
            ADDCOLUMNS(
                'Events',
                "统一后值", IF(STARTSWITH('Events'[Business Unit], "A"), "A", 'Events'[Business Unit])
            )
        ),
        "Business Unit", [统一后值]
    )
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 00:25:38