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

基于两列值构造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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 05:22:29