如何在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
相关产品推荐
相关产品推荐

