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

从PowerQuery转SQL:如何按顺序执行系列数据转换命令?

PowerQuery顺序式系列转换构建指南

先抓底层逻辑

  • 每一步只干一件事,别在一个步骤里同时加字段、连表、分组,不然出问题根本找不到哪错了
  • 死磕「上一步输出=当前步输入」,比如步骤2必须用步骤1的结果,步骤3用步骤2的,绝对不能跳步引用原始表
  • 给每个步骤起人话名字,比如叫「加字段x」「连Table2」,别用系统默认的「已添加自定义」,回头看根本记不清干啥的

按目标倒推+顺向落地

1. 先画最终表的样子

先把你要的最终字段列出来(比如你示例里的agg(a), agg(b), agg(c), x, agg(T2.y), T3.z),倒推每一步要做啥:

  • 最后一步是连Table3拿z,那上一步必须是分组后的表
  • 分组的输入得是连完Table2的表
  • 连Table2的输入得是加了x的表
  • 最开始就是原始Table1

2. 对应你的示例一步步来

不管用可视化界面还是写M代码,按顺序走:

  • 步骤1:加载源表
    直接导入Table1,保留a、b、c,命名「源表Table1」
  • 步骤2:加字段x
    选「源表Table1」,加自定义列生成x(比如x=a+b),命名「加字段x」,结果列:a,b,c,x
  • 步骤3:左连Table2
    选「加字段x」,左连Table2,选好关联键(比如a),只保留T2的y列,命名「连Table2」,结果列:a,b,c,x,T2.y
  • 步骤4:按x分组聚合
    选「连Table2」,按x分组,给a、b、c、T2.y设好聚合规则(比如求和),命名「按x分组」,结果列:agg(a),agg(b),agg(c),x,agg(T2.y)
  • 步骤5:左连Table3
    选「按x分组」,左连Table3,匹配对应键,保留T3的z列,命名「连Table3」,拿到最终表

3. 偷懒又高效的技巧

  • 用高级编辑器写M代码时,直接用let-in结构,每一行对应一个步骤,自动继承上一步的结果,比如:
    let
        源表Table1 = Table.FromRecords({[a=1,b=2,c=3], [a=4,b=5,c=6]}),
        加字段x = Table.AddColumn(源表Table1, "x", each [a]+[b]),
        连Table2 = Table.NestedJoin(加字段x, {"a"}, Table2, {"a"}, "Table2", JoinKind.LeftOuter),
        展开T2y = Table.ExpandTableColumn(连Table2, "Table2", {"y"}, {"T2.y"}),
        按x分组 = Table.Group(展开T2y, {"x"}, {{"agg(a)", each List.Sum([a])}, {"agg(b)", each List.Sum([b])}, {"agg(c)", each List.Sum([c])}, {"agg(T2.y)", each List.Sum([T2.y])}}),
        连Table3 = Table.NestedJoin(按x分组, {"x"}, Table3, {"x"}, "Table3", JoinKind.LeftOuter),
        展开T3z = Table.ExpandTableColumn(连Table3, "Table3", {"z"}, {"T3.z"})
    in
        展开T3z
    
  • 可视化操作时,每做完一步就看「应用步骤」面板,顺序错了直接拖改,某步错了直接右键编辑,不用从头再来

4. 避坑提醒

  • 连表时必须保证关联键的类型一致,比如都是数字,一个文本一个数字绝对匹配不上
  • 分组时别用默认的计数,要明确每个字段的聚合方式(求和/平均/最大值)
  • 没用的列及时删,不然数据量越大越卡

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 08:30:47