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

在Power Query中利用表达式查找创建动态列

Power Query 基于转换表动态扩展布尔列

核心思路

用List.Accumulate迭代转换表的每一行,逐行为Source表添加新列,配合Expression.Evaluate解析转换表中的文本表达式,实现动态扩展。

具体实现步骤

假设你的数据结构如下:

  • Source表:包含若干布尔类型列(如列1、列2)
  • 转换表:包含两列,新列名(指定要添加的列名称)、表达式(基于Source列的布尔运算文本,如[列1] and [列2])

直接套用以下M代码,替换你的原始表和你的转换表为实际数据源:

let
    // 替换为你的原始布尔列数据源
    Source = 你的原始表,
    // 替换为你的转换规则表
    TransformTable = 你的转换表,
    // 将转换表转为记录列表,方便迭代
    TransformList = Table.ToRecords(TransformTable),
    // 迭代添加列
    Result = List.Accumulate(
        TransformList,
        Source,
        (当前表, 转换规则) => 
            Table.AddColumn(
                当前表,
                转换规则[新列名],
                // 解析表达式并在当前行上下文执行
                each Expression.Evaluate(转换规则[表达式], [_ = _]),
                // 指定新列为布尔类型,与原始列保持一致
                type logical
            )
    )
in
    Result

关键细节说明

  • List.Accumulate:作为迭代器,从Source表开始,每一步根据转换规则添加一列,最终生成包含所有新列的表
  • Expression.Evaluate:把转换表中的文本表达式(如[列1] or [列2])转换成可执行的M代码,[_ = _]确保表达式能识别当前行的列引用
  • 类型指定:type logical强制新列为布尔类型,避免自动识别出错

注意事项

  • 转换表的表达式必须是合法的M语言布尔运算:用and/or/not,不要用Excel函数AND/OR
  • 列名带空格时,表达式里要写成[带空格的列名]格式
  • 若转换表存在重复的新列名,后续规则会覆盖之前的列,建议提前去重

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.23 11:24:16