基于两列值构造Power BI计算列的M代码需求及报错求助
Power BI 实现按姓名标记"Yes or No"计算列(M代码优先)
M代码方案(避免分组报错)
直接在Power Query编辑器中替换现有代码,或新建查询使用以下逻辑,可规避新手常遇到的分组行步骤错误:
let 源 = 你的数据表名称, // 替换成实际的数据表名 // 生成按姓名判断的辅助表 姓名标记表 = Table.Group(源, {"姓名"}, { {"Yes or No", each let // 统一处理回答:移除空格+转小写 处理后的回答列表 = List.Transform([回答], (txt) => Text.Lower(Text.Remove(txt, " "))), // 判断该姓名下是否有回答包含"peas" 标记结果 = if List.AnyTrue(List.Transform(处理后的回答列表, (txt) => Text.Contains(txt, "peas"))) then "YES" else "NO" in 标记结果, type text} }), // 将标记合并回原表 合并原表 = Table.NestedJoin(源, {"姓名"}, 姓名标记表, {"姓名"}, "姓名标记表", JoinKind.LeftOuter), // 提取标记列 提取标记列 = Table.ExpandTableColumn(合并原表, "姓名标记表", {"Yes or No"}, {"Yes or No"}), // 保留原表所有列+新增的标记列 最终结果 = Table.ReorderColumns(提取标记列, List.Combine({Table.ColumnNames(源), {"Yes or No"}})) in 最终结果
代码说明
Text.Remove(txt, " ")移除回答中的所有空格,Text.Lower统一转小写,确保忽略大小写和空格的判断逻辑生效List.AnyTrue+Text.Contains组合判断分组内是否存在符合条件的回答,避免分组时的列表处理错误- 全程指定数据类型
type text,减少Power Query的类型推断报错
DAX计算列方案
如果更习惯用DAX,直接在数据表中新建计算列:
Yes or No = VAR 当前用户 = '数据表'[姓名] // 获取当前用户的所有回答,清理空格并转小写 VAR 清理后的回答 = SELECTCOLUMNS( CALCULATETABLE(VALUES('数据表'[回答]), '数据表'[姓名] = 当前用户), "处理后", LOWER(SUBSTITUTE([回答], " ", "")) ) // 判断是否包含"peas" VAR 符合条件 = CONTAINSSTRINGEXACT(清理后的回答, "peas") RETURN IF(符合条件, "YES", "NO")
代码说明
SUBSTITUTE([回答], " ", "")移除空格,LOWER转小写,实现忽略大小写和空格的匹配CALCULATETABLE限定当前姓名的范围,确保同一用户的所有行标记一致
内容的提问来源于stack exchange,提问作者rockingmark
相关产品推荐
相关产品推荐

