
简介《Power Query 入门手册》是一份面向 Excel 用户的数据预处理学习资料尤其适合希望摆脱复制粘贴、实现报表自动化的初学者与进阶者。内容从入门案例切入覆盖获取文本文件、更改数据类型、将数据返回 Excel 等基础操作并延伸至 M 函数导入、修改与删除应用步骤、添加自定义列与条件列、逆透视与分组依据、追加与合并查询、模糊查询等进阶主题最后以数据清洗十招收尾帮助读者系统掌握数据导入、清洗、转换与组合的完整流程。资源为单个 PDF 文件压缩包约 3.13MB结构清晰、便于按章节查阅。目前已有 4568 人学习适合作为日常数据整理与报表自动化的案头参考。1. Power Query 入门手册从手工复制粘贴到一键刷新差的不只是效率每个月末做经营分析报表你是不是也经历过这种循环从 ERP 导出一份 CSV从业务部门收三份格式各异的 Excel再手动 VLOOKUP 拼到一张总表里改完格式、删完空行、统一完日期两个小时过去了。下个月同样的动作再来一遍。Power Query 就是为终结这个循环而生的。它是 Excel 和 Power BI 内置的数据获取与转换引擎你只需要把「怎么清洗、怎么合并、怎么汇总」的步骤配置一次之后数据源更新了点一下刷新所有结果自动重算。它适合所有被重复性数据整理工作困住的职场人——不需要会写代码但需要你愿意花一个下午把过去两年的手工流程翻译成一套可复用的查询步骤。M 函数是它背后的公式语言入门阶段不用深究但理解它的存在会让你在遇到复杂转换时知道该往哪个方向查。2. 先搞清楚 Power Query 到底在做什么从数据获取到加载的完整链路2.1 它不是一个函数而是一条流水线很多人第一次打开 Power Query 编辑器会懵——界面上没有单元格没有公式栏左边是「查询」列表中间是数据预览右边是「应用的步骤」。这个布局本身就说明了它的工作方式你不是在直接编辑数据而是在定义一条流水线。流水线的起点是数据源Excel 工作表、CSV 文件、数据库、Web 页面都行中间是若干个转换步骤删列、筛选、拆分、合并、透视终点是加载目标工作表或数据模型。关键认知在于Power Query 不修改原始数据。你在编辑器里看到的每一步操作都只是记录了一条「转换指令」原始文件纹丝不动。这意味着两件事——第一你永远不会因为误操作弄丢源数据第二所有步骤可以随时回退、调整顺序、禁用或删除。这种「声明式」的工作方式和直接在单元格里改数据有本质区别。常见做法是把原始数据放在一个独立的工作表或文件夹里用 Power Query 读取它所有清洗逻辑在查询里完成最终输出到另一张工作表。这样原始数据和结果数据物理隔离刷新时不会互相干扰。2.2 数据获取从「excel导入数据库」到「excel表格怎么导入arcgis10.8」的通用起点Power Query 的「获取数据」入口覆盖了绝大多数日常场景。在 Excel 里路径是「数据」选项卡 →「获取数据」。常用的几类源从文件Excel 工作簿、CSV、文本文件。注意 CSV 的编码问题中文环境常见 GBK 和 UTF-8 两种选错了会乱码。从文件夹这是批量处理的杀手锏。把几十个结构相同的 Excel 文件放进一个文件夹Power Query 可以一次性读取全部并追加成一张表。从数据库SQL Server、MySQL、Oracle 等需要安装对应的驱动。这一步经常卡住新手后面避坑章节会细说。从 Web输入 URL 后Power Query 会解析页面上的表格。适合抓取公开的统计数据集。操作步骤以「从文件夹」为例点击「获取数据」→「从文件」→「从文件夹」→ 输入文件夹路径 → 在弹出的文件列表中点击「转换数据」而不是「合并」。这个选择很关键「合并」会直接生成一个追加查询但你失去了在追加之前对单个文件做清洗的机会。「转换数据」进入编辑器后你会看到一个包含所有文件元信息文件名、扩展名、修改日期、内容的表点击 Content 列的双箭头即可展开每个文件的内容。提示文件夹路径中如果包含中文或空格某些旧版本会报错。遇到这种情况先把文件移到纯英文路径下测试确认是路径问题后再决定是否迁移。2.3 转换步骤M 函数在背后做了什么每次你在编辑器里点一个按钮——删除列、筛选行、更改类型——右侧「应用的步骤」就会多一条记录。这些步骤本质上是一行行 M 代码。点击「高级编辑器」你能看到完整的 M 脚本。入门阶段不需要手写 M但看懂它的结构很有必要let 源 Folder.Files(C:\Data\Monthly), 筛选Excel Table.SelectRows(源, each [Extension] .xlsx), 展开内容 Table.AddColumn(筛选Excel, 数据, each Excel.Workbook([Content])), 移除其他列 Table.SelectColumns(展开内容, {Name, 数据}), 展开数据 Table.ExpandTableColumn(移除其他列, 数据, {Sheet1}, {Sheet1}) in 展开数据这段 M 代码的逻辑是读取文件夹 → 只保留 .xlsx 文件 → 对每个文件调用 Excel.Workbook 解析内容 → 只保留文件名和数据列 → 展开数据列中的 Sheet1。每一步都对应编辑器里的一次点击。参数说明Folder.Files的路径参数必须是绝对路径Excel.Workbook的第二个参数可以控制是否使用表头默认 trueTable.ExpandTableColumn的第四、五个参数分别指定要展开的列名和展开后的新列名。理解这层映射关系后你就能在遇到编辑器按钮无法实现的转换时直接改 M 代码。比如「excel如果为空则返回上一行的值」这种需求编辑器没有现成按钮但可以用Table.FillDown函数实现。3. 动手搭一条可复用的查询从单表清洗到多表合并的完整操作3.1 单表清洗的最小闭环拿一张典型的销售明细表举例常见问题是日期列是文本格式、金额列混有货币符号、存在完全空白的行、列名包含多余空格。以下是在 Power Query 编辑器里的操作序列第一步更改类型。选中日期列点击列标题左侧的图标选择「日期」。如果直接报错说明列里有非日期值先选「使用区域设置更改类型」指定正确的区域比如中文简体。第二步清理金额列。选中金额列 →「转换」选项卡 →「替换值」→ 输入「¥」替换为空。然后更改类型为「小数」。如果还有千分位逗号同样用替换值处理。第三步删除空行。点击「主页」→「删除行」→「删除空白行」。注意这个操作只删除所有列都为空的行如果某行只有部分列为空不会被删。第四步重命名列。双击列标题直接改或者右键 →「重命名」。建议去掉前后空格用「转换」→「格式」→「修剪」。完成后的步骤列表应该清晰可读每一步的命名尽量具体。我一般会把「更改的类型」改成「日期列转日期格式」这样的描述方便几个月后回来看懂。3.2 多表合并合并查询与追加查询的选择这是 Power Query 最核心的两个操作新手最容易搞混。追加查询是纵向堆叠——两张表结构相同把行拼在一起。比如 1 月、2 月、3 月的销售表列名一致用追加。操作「主页」→「追加查询」→ 选择要追加的表。如果超过两张选「将查询追加为新查询」在对话框里一次性添加所有表。合并查询是横向关联——两张表通过某个键关联把列拼在一起。比如销售表和产品维度表通过产品编号关联。操作「主页」→「合并查询」→ 选择主表和关联表 → 分别点击关联列 → 选择联接种类左外部、内部等。联接种类的选择直接决定结果行数。左外部保留主表所有行匹配不上的关联列显示 null内部只保留匹配上的行。做报表时我默认用左外部因为主表的行通常不能丢。合并完成后关联表的列会以「Table」形式出现在主表右侧点击双箭头展开需要的列。展开时注意取消勾选「使用原始列名作为前缀」否则列名会变成「产品表.产品名称」这种冗长格式。3.3 分组汇总与条件列替代 SUMIFS 和 IF 嵌套「excel同一列中统计含关键词对应数据求和」这类需求在 Power Query 里用分组依据实现。选中要分组的列比如产品类别「转换」→「分组依据」→ 新列名填「销售总额」操作选「求和」柱选「金额」。结果就是每个类别一行汇总值。如果需要更复杂的条件比如「金额大于 1000 的才算」先在分组前加一步筛选再分组。Power Query 的步骤是顺序执行的筛选在前、分组在后逻辑很直观。条件列替代 IF 嵌套「添加列」→「条件列」→ 设置判断条件和输出值。多个条件可以点「添加子句」继续加。比 Excel 里写五六层 IF 清爽得多而且改条件不用动公式结构。// 在高级编辑器里手写条件列的 M 代码 Table.AddColumn(源, 等级, each if [金额] 10000 then A else if [金额] 5000 then B else if [金额] 1000 then C else D )逻辑说明each表示对每一行执行后面的判断[金额]是当前行的金额列值if...then...else if...then...else是 M 语言的条件语法。参数说明新列名「等级」可以改成任意名称阈值 10000、5000、1000 按实际业务调整。这段代码等价于在编辑器里点三次「条件列」但手写更灵活比如可以嵌套函数调用。3.4 加载与刷新把结果落到该去的地方清洗完成后点击「主页」→「关闭并上载」→「关闭并上载至」。在弹出的对话框里选择仅创建连接查询结果不落到工作表只存在于后台。适合作为中间查询供其他查询引用。表加载到当前工作簿的新工作表。适合最终输出给同事看的报表。数据模型加载到 Power Pivot 数据模型。适合数据量大、需要建关系做透视的场景。选「表」时注意勾选「将此数据添加到数据模型」会影响后续能否用 DAX 函数。如果只是普通报表不勾也行。刷新操作数据源变了之后右键任意结果表 →「刷新」或者「数据」→「全部刷新」。如果查询引用了外部文件确保文件路径没变、文件没被占用。刷新失败时点「数据」→「查询和连接」→ 双击出错的查询看是哪一步报错通常错误信息会直接指出问题行。4. 避坑指南Power Query 新手最容易翻车的五个场景4.1 改了源文件列名刷新后查询报错现象刷新时提示「找不到列 XXX」查询步骤里出现 Error。原因Power Query 的步骤记录的是列名。源文件里把「金额」改成了「销售金额」查询里引用的还是「金额」自然找不到。解决进入编辑器找到报错的那一步把引用的列名改成新名称。如果列名经常变可以在查询最前面加一步「提升的标题」之后用「转换」→「重命名列」统一改成固定名称后续步骤都引用这个固定名。这样源文件列名变了只需要改重命名这一步。4.2 数据类型自动更改导致日期错乱现象日期列刷新后变成一串数字或者月份和日期颠倒。原因Power Query 默认会根据前 200 行自动检测类型。如果前 200 行恰好是「2024-01-05」这种格式它可能识别为日期但如果后面有「05/01/2024」这种美式格式就会解析错误。解决不要依赖自动检测。在「更改类型」时选择「使用区域设置更改类型」明确指定区域为「中文(中国)」。如果源数据格式不统一先用「拆分列」把年月日拆开再用「合并列」拼成标准格式最后转日期。4.3 从文件夹读取时混入了临时文件现象追加了几十个文件结果多出几行乱码数据。原因文件夹里除了 .xlsx 文件还有 Excel 打开时生成的~$临时文件或者 .tmp 文件。Power Query 默认读取所有文件。解决在「源」步骤之后加一步筛选只保留 Extension 等于 .xlsx 的行。如果还有子文件夹用「筛选行」排除 Name 列以~$开头的行。4.4 合并查询后行数变多了现象原本 1000 行的主表合并后变成 1500 行。原因关联表里存在重复的键值。比如产品编号在维度表里出现了两次合并时主表每一行都会匹配到两条记录行数膨胀。解决先检查关联表的键值是否唯一。在合并之前对关联表做一次「分组依据」按键值分组并计数筛选出计数大于 1 的行确认是数据问题还是业务逻辑允许重复。如果确实需要保留重复改用「左外部」并接受行数变化如果不需要先去重再合并。4.5 刷新速度越来越慢现象刚开始刷新几秒钟后来要等几分钟。原因查询步骤太多、引用了其他查询、或者数据量本身很大。Power Query 是单线程执行的步骤越多每一步都要遍历全部数据。解决合并步骤。比如连续三步「替换值」可以合并成一步用「替换值」对话框里的「高级选项」一次替换多个值。删除中间不需要的列越早删越好减少后续步骤处理的数据量。如果数据量超过几十万行考虑用数据库做预处理Power Query 只负责最后的轻量转换。5. 进阶技巧用参数和自定义函数把重复劳动压到零5.1 参数化文件夹路径换月份不用改查询每个月的数据放在不同文件夹里如果每次都进编辑器改路径那和手工操作没区别。做法是在编辑器里「主页」→「管理参数」→「新建参数」名称填「数据路径」类型选「文本」当前值填文件夹路径。然后在「源」步骤里把硬编码的路径替换成这个参数名。换月份时只需要在 Excel 的「数据」→「查询和连接」里右键参数 →「编辑」改一下值刷新即可。更进一步可以把参数值绑定到某个单元格用「从表格」读取单元格内容作为参数值这样在表里改路径就行完全不用进编辑器。5.2 自定义函数批量处理结构相同的文件如果每个文件的清洗逻辑完全一样可以写一个自定义函数然后对文件夹里的每个文件调用它。操作新建一个空白查询在高级编辑器里写// 自定义函数清洗单个月份的销售表 (文件内容 as binary) as table let 工作簿 Excel.Workbook(文件内容), 工作表 工作簿{[ItemSheet1,KindSheet]}[Data], 提升标题 Table.PromoteHeaders(工作表), 删除空行 Table.SelectRows(提升标题, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {, null}))), 日期转换 Table.TransformColumnTypes(删除空行, {{日期, type date}}), 金额清理 Table.TransformColumns(日期转换, {{金额, each Number.From(Text.Remove(_, ¥,)), type number}}) in 金额清理逻辑说明函数接收一个 binary 类型的文件内容依次执行解析工作簿、取 Sheet1、提升标题、删空行、转日期、清理金额。参数说明文件内容 as binary是输入参数类型{[ItemSheet1,KindSheet]}是定位具体工作表如果表名不固定可以改成取第一个 SheetText.Remove(_, ¥,)删除货币符号和千分位逗号。写好后在文件夹查询里添加一步「调用自定义函数」传入 Content 列。这样每个文件都会走同一套清洗逻辑新增文件只需刷新。5.3 验证刷新结果是否正确的三个习惯刷新完成后不要直接发给同事。我一般会做三件事第一对比行数。在 Power Query 里记下当前行数刷新后看是否一致如果少了大概率是筛选条件误伤了新数据。第二抽查边界值。比如金额最大的那行、日期最早的那行看是否和源数据一致。第三检查空值。用「筛选」→「空值」快速看关键列有没有意外的 null尤其是合并查询后的关联列。这三个习惯帮我拦下过好几次「刷新后数据对不上」的事故。Power Query 的自动化很香但自动化意味着错误也会自动重复验证环节不能省。5.4 一个我踩过的坑不要在生产查询里直接改 M 代码刚用 Power Query 那会儿我觉得编辑器按钮太慢经常直接开高级编辑器手写 M。有一次改一个合并查询的展开逻辑手滑把Table.ExpandTableColumn的列名参数写错了刷新后整张表变成了一列 Error。更麻烦的是我没有备份只能从头重建查询。后来我养成了一个习惯任何超过五步的查询在改动之前先右键 →「复制」留一个备份查询。改坏了删掉新查询把备份改个名继续用。另外M 代码的改动尽量小步走改一行刷新一次确认没问题再改下一行。这个习惯看起来笨但省下的返工时间远超那几秒钟。希望帮到你。本文还有配套的精品资源点击获取