
每个月月底对着同一份销售数据做同样的清理动作换过多少种姿势了VLOOKUP、复制粘贴、手动删空行、把日期格式改回来……最后就为了那几张透视表。这大概是很多Excel老手第一次接触Power Query时的真实场景——一开始还以为它是个类似VLOOKUP的查找函数用了一段时间才发现这玩意儿真正解决的不是单次操作快不快而是下次还要不要从头再来。Power Query是微软提供的数据获取与转换工具内置在Excel 2016之后版本和Power BI Desktop里。它可以把从各个来源拉取数据、清洗、整理这个过程变成一套可保存、可刷新的固定流程。只要你点击一次刷新它就会按照记录好的步骤自动重跑一遍。这篇文章是我自己的学习笔记第一弹面向刚接触Power Query的读者先把基础概念和操作步骤理清楚。文章不涉及太深的理论而是按照我实际动手时的思路写先理解它到底解决了什么问题再摸清界面和几个核心概念最后拿一份乱糟糟的数据完整跑一遍。1. Power Query解决什么问题从重复劳动说起1.1 传统数据处理流程的最大痛点先聊一个扎心的事实做数据分析的人真正花在分析上的时间其实很少大部分时间都在清洗数据。我之前在整理一份月度销售报表的时候每周都要从业务系统导出一份Excel拿到的数据差不多长这样第一行根本不是列名而是公司Logo那一行字段名里带空格日期列显示的是2024/01/05但实际存的是文本金额前面挂一个¥符号中间还夹杂着几个合计汇总行。这种数据的处理流程传统Excel的做法非常固定删掉多余行、把第一行提升为标题、筛选掉合计行、把日期从文本转成真日期、把金额里的¥去掉再转成数字。这套动作我每个月都要做一遍做了两年之后整个人都快变成流水线工人了。传统办法无非三条路手工操作重复而且容易漏录制宏或写VBA能自动化但代码维护成本高只要源数据格式稍微一变宏就崩用SQL或者专业数据处理工具很多表哥表姐没有数据库权限日常拿到的数据源只有Excel和CSV。这三条路都走不通的时候Power Query的价值就出来了。1.2 什么场景下Power Query收益最大Power Query的定位是数据获取与转换工具行业内叫ETL工具核心使命是把数据从源头搬到分析工具里并在搬运过程中完成清洗和整形。它不解决分析和图表问题它是把数据整理好了喂给Excel透视表、Power BI这类分析工具的。哪些场景收益最大我实际用下来的经验是这四类定期从同一来源导入数据比如每月从系统导出报表再处理多个文件需要合并比如一个文件夹里散落着几十个分店的Excel要合并成一张总表数据格式统一化不同类型的源导入后统一日期、编码、字段类型脏数据清理需要把一系列清洗动作沉淀下来反复使用。这类需求有个共同特点操作的配方永远不变变的只是数据本身。Power Query就是为这种场景设计的。1.3 为什么叫查询Query新手最容易困惑的一个点明明是数据处理为什么叫查询Power Query里导入的数据源叫查询查询保存的不是数据本身而是获取、清洗、转换这一套流程的配方。用一个简单的类比查询就像菜谱——你保存的不是那盘菜而是这道菜怎么做。数据源更新了点一下刷新数据就按菜谱重新做一遍。这个理解是整个Power Query思维的基石。后面学函数、学M语言、学合并查询都是在这个配方逻辑上展开的。2. 三类核心概念查询步骤、函数、M语言到底指什么2.1 查询步骤每一步操作都被完整记录打开Power Query编辑器右侧有个查询设置面板里面最核心的区域叫已应用的步骤。你每点一次菜单比如筛选行、删除列、改数据类型这里就会新增一步。这个步骤列表相当于操作的流水账支持回看、删除、重命名。别小看这个列表它决定了Power Query和传统操作的本质区别。在Excel里直接处理数据你改的是单元格的值操作本身不留下痕迹在Power Query里你改的是操作序列数据只是步骤执行后的结果。步骤是有依赖关系的。一开始可能没感觉等步骤多了就会发现改了前面某一步后面的步骤可能跟着报错。举个例子先做了筛选行筛选金额100再重命名列因为筛选步骤实际上就是在引用金额这一列后面改名了并不影响前面但如果你先筛选、再把金额列删掉后面的筛选就找不到列了。所以养成每一步看一眼应用步骤的习惯比什么都重要。2.2 函数界面按钮背后就是函数Power Query编辑器里的功能按钮背后对应的都是一个个函数。点击将第一行用作标题生成的是Table.PromoteHeaders点击筛选行生成的是Table.SelectRows点击更改数据类型生成的是Table.TransformColumnTypes。这个关系刚学时不太需要背但一定要知道你每点一次菜单就是在调用一个函数。界面操作就是代写函数的过程。打个比方界面按钮是菜单函数是后厨的配方你点菜后厨按配方出菜。后面等步骤复杂了、想去手动优化查询时这个理解能帮你很快看懂M代码。2.3 M语言能听懂比会说更省力M语言的全称是Power Query Formula Language它是Power Query的底层公式语言。所有查询最终都会编译成M代码。你可以在编辑器的视图选项卡里打开公式栏每点一步公式栏就会显示当前步骤对应的M表达式。我刚学时犯过一个错误觉得自己必须先把M语言背熟才能用Power Query。后来发现完全没必要。正常做数据清洗90%的操作靠点按钮就够了M语言是能听懂远比会写重要。先混个脸熟就行。M代码最典型的结构是let...in...放在开头意思就是先做一堆步骤最后输出结果。所有的表操作函数都以Table.开头引用某个步骤时用#步骤名。看到这些不要慌它们对应的就是你右侧已应用的步骤里的每一步。3. 第一次打开Power Query编辑器界面布局与功能映射3.1 从Excel进入Power Query的两种常见入口第一次打开Power Query很多人会找半天入口。Excel 2016之后的版本入口在数据选项卡里。如果你当前工作表里已经有一片数据区域最快的办法是选中这片区域然后点数据 → 来自表格/区域Excel会让你确认是否创建表确认后就直接进入Power Query编辑器了。如果是从外部文件导入就走数据 → 获取数据 → 来自文件里的各种选项。用Power BI Desktop的话入口在主页 → 获取数据逻辑差不多。需要提醒的是Excel 2010和2013一开始没有内置Power Query要单独下载安装插件。我刚学的时候吃过这个亏在同事的Excel 2013上找了半天才发现对方根本没装。3.2 编辑器内部四大分区进入编辑器后界面乍一看有点懵其实就四大块左侧是查询列表显示当前工作簿里所有已创建的查询可以分组管理新建查询、复制查询、删除查询都在这操作。中间是数据预览区展示当前步骤作用之后的数据样子注意只是预览不是最终输出结果。右侧是查询设置上半部分是查询名称和属性下半部分就是之前说的已应用的步骤。顶部是功能区包含主页、转换、添加列、视图几个选项卡。各选项卡的常用操作我用一个表整理出来选项卡常用操作典型场景主页将第一行用作标题、数据类型、删除行/列、替换值、排序、筛选、关闭并上载最常用的清洗操作基本都在这里转换拆分列、合并列、格式、替换、透视列/逆透视列处理列结构变化添加列自定义列、条件列、索引列基于已有数据新增计算字段视图公式栏、高级编辑器打开底层代码查看新人第一个月其实只要熟练使用主页和转换两个选项卡就够了。添加列里的自定义列功能也很实用但思路和Excel里的辅助列不同需要单独花点时间理解。3.3 公式栏和高级编辑器看代码入门神器强烈建议一上来就把视图 → 公式栏打开。每次点一个按钮就看一眼公式栏里的M表达式变化不需要彻底看懂只需要知道界面操作的每一步都有代码对应。这个习惯坚持一周你会发现M语言不再神秘——那些看起来满屏英文的函数其实就是你操作过的按钮的后台记录。高级编辑器则可以查看完整的let...in...代码整个查询的全部步骤都在这里。等操作链条长了高级编辑器就是排查问题的主战场。4. 完整动手一遍从导入数据到结果上桌4.1 准备一份乱糟糟的原始数据纸上谈兵没意思直接上一份真实案例。我这边准备了一张2024年的销售明细表拿到手的时候有这些问题第一行不是列名是个大标题2024年度销售明细标题下面还有一行空行订单号列里混着几行合计汇总行日期列看起来是日期实际上是文本格式还是2024/01/05这种非标准写法商品名和规格挤在同一列比如巧克力-A001数量列里出现了好几个NULL字符串单价列带¥符号直接转数字必然报错。我要做的是把它清洗成一张规范的一维明细表字段包括订单号、日期、商品名、规格、数量、单价、总价。4.2 从导入到上载完整步骤清单Step 1 导入数据。选中数据区域或者直接数据 → 来自表格/区域。进去之后先别急着处理在预览区把整张表从头浏览一遍看看有多少列、多少行。预览区右下角可能有加载更多按钮点一下把被折叠的行展开否则你根本不知道数据全貌。Step 2 提升标题。在主页选项卡里点将第一行用作标题。这一步会把原来的第一行提升为列名。操作完之后顺手把步骤改个名比如提升标题。右侧已应用的步骤里每个步骤都可以重命名建议一步一命名后面排查问题时能省很多时间。Step 3 删除多余行。在订单号列上做筛选把合计行和空行都勾掉。当年我一开始用删除空行按钮发现没效果因为那些合计行不是空行筛选才是对的。Step 4 修数据类型。选中日期列在主页 → 数据类型里改成日期数量、单价、总价改成小数。类型这块越早改越好因为后续很多操作都以正确类型为前提。这里有个坑如果你的日期列是像2024/01/05这种文本直接改日期类型Power Query大概率能识别但如果是2024.01.05这类格式它会当成文本或者干脆报错需要先用替换值把.换成/。Step 5 处理NULL和错误。选中数量列右键替换值把NULL替换成空。如果某些行因为数据错误变成了错误状态可以用替换错误把错误值统一替换成0或者空。这一步非常实用而且只有Power Query能做到替换错误值这种针对性操作。Step 6 拆分列。选中商品名-规格这一列到转换选项卡里点拆分列 → 按分隔符分隔符选-拆成两列分别命名为商品名规格。拆分时有个细节如果分隔符在数据里不唯一比如商品名里也带-就要选仅拆分第一个匹配项否则会多拆出几列。Step 7 新增总价列。到添加列 → 自定义列公式写[数量] * [单价]生成总价列。注意M语言里引用列名用方括号[列名]字段之间运算直接用*号。这一步其实就是手动写函数做完后公式栏里会出现一行Table.AddColumn代码仔细看一眼你就明白函数和界面操作的关系了。Step 8 关闭并上载。在主页选项卡点关闭并上载Power Query会默认把结果加载到Excel的新工作表中。如果数据量很大不想直接铺一张大表可以选关闭并上载至选择仅创建连接这样数据不会占用工作表空间之后用透视表引用这个查询即可。这八步做完一张原始乱表就变成规整的一维明细表了。最关键的是下次源文件更新后在Excel里点数据 → 全部刷新整套流程会自动重跑一遍你不需要再手动重复任何一个动作。4.3 操作过程中最容易忽略的习惯第一个习惯是每步命名。这一步我踩过很深的坑刚开始图快步骤全部叫筛选行更改的类型一个多月后回来维护根本分不清哪步做了什么。从第一步开始养成命名习惯后面会非常省心。第二个习惯是操作完回看步骤顺序。我见过不少新人在一条查询里点了几十个步骤升序降序交叉着来中间还有无意义的临时操作整个查询乱成一团。Power Query的优势在于可以随时回去修改步骤但也容易把查询做成屎山。每完成一次清洗把步骤列表从头看一遍能合并的合并能删除的删除。第三个习惯是不要做完就忘记刷新。上载到Excel之后很多新人以为完事了源文件更新后对着查询结果满世界找重新导入。记住在Excel的数据选项卡里点全部刷新所有基于查询的数据就会同步更新。5. 新手容易在哪儿翻车Power Query常见坑位盘点5.1 数据源结构变更导致全表报错这是使用Power Query后最常遇到的情况。你建立好查询跑了三个月都正常某天刷新的时候突然弹出一堆错误。最常见的原因是源文件的结构变了多了一列、删了一列、或者列名改了。遇到这种问题先看错误提示里报的到底是哪一列然后点击右侧已应用的步骤里那个高亮报警的步骤再回到前面的步骤去检查。多数情况下你会发现在某个更改类型或者筛选行步骤里引用了已经消失的列名。更主动的预防办法是源表导入后如果列名经常变可以在一开始就加一个重命名列步骤把不稳定的列名固定成统一名称后面所有步骤都引用这个统一的名称源表怎么变都不怕。5.2 步骤之间有依赖关系乱删步骤会出事Power Query里步骤不是孤立存在的后面的步骤会引用前面步骤的产出。很多人觉得删除中间某个步骤应该不影响最后结果实际操作中恰恰是这一步的问题最多。比如你第3步筛选了金额100第5步把金额列删了第3步就彻底失效因为筛选引用的列已经不存在了。想改又不知道从哪下手这时候我的排查办法是点击出错的步骤先看公式栏里它引用了哪个列或者哪个步骤再决定修改哪个上游步骤。这里有个隐含的知识点某些操作会自动调整步骤顺序比如筛选行依赖的列如果被删除了Power Query有可能把筛选步骤提前到删除列步骤之前也可能直接报错取决于具体操作类型。遇到这种情况别慌顺着依赖链一步步捋总归能查明白。5.3 刷新按钮和加载目标没分清刷新和加载目标是两个概念。刷新是重新执行查询让数据按照最新源数据重新算一遍加载则决定了结果输出到哪里。在Excel里关闭并上载会创建一个工作表表数据直接铺在单元格里关闭并上载至可以选择仅创建连接不产生物理工作表。有些新人在仅创建连接模式下改了源数据之后去对应工作表里找刷新自然是找不到的。数据连接只在透视表、图表或者Power Pivot里才会实际调用。所以如果选择仅创建连接后续所有分析操作都要在引用这个查询的组件里做刷新。5.4 日期和数值被识别成文本、编码错乱CSV文件导入的时候经常遇到一列数字被识别成文本或者日期变成45423这种数字。日期那种是Excel序列日期Power Query默认把它读成了整数在数据类型里改成日期就能显示正常。文本日期则是另一回事这类数据往往混着空格、换行符建议先在转换选项卡里做格式 → 修剪和清除把不可见字符去干净再转日期。CSV导入乱码的问题十有八九是编码问题。在用获取数据 → 来自文本/CSV导入时对话框里有一个编码选项默认是UTF-8如果你的文件是ANSI编码保存的就会出现中文乱码。把编码改成ANSI或者简体中文(GB2312)重试一次就好。我自己吃过这个亏当时还以为是文件坏了后来才发现是编码不匹配。6. 系列学习的节奏安排与后续预告6.1 为什么建议先把概念和界面学扎实我见过不少人一上来就找神操作比如合并查询、透视列、自定义列的进阶用法。不是说这些不需要学而是基础不牢的时候直接上进阶操作出了问题连排查方向都没有。你连应用步骤和刷新之间的关系都没建立起来碰到报错只能到处瞎点。我自己的体会是先花一两天把步骤、函数、M语言这三者的关系理清楚比狂记菜单管用得多。这篇文章列的操作步骤虽然简单但每一步背后都对应着查询就是配方这个核心逻辑。把这个逻辑刻在脑子里后面一切学习都会顺利很多。6.2 这一系列后续会讲什么按照我整理笔记的节奏这个系列的规划大概是这样第二篇讲列的操作重点拆解拆分列、合并列、逆透视其中逆透视是把交叉表变一维表的核心手段实战价值极高第三篇讲合并查询把两张表关联起来学会之后基本可以告别VLOOKUP第四篇讲从文件夹批量导入并合并几十个工作簿这是自动化报表的必经之路第五篇讲M语言入门let、in、步进函数、自定义函数第六篇讲性能优化让查询在几万行、几十万行数据下跑得够快。6.3 给新手的三个练习建议练习一拿自己手头一份真实数据按本文第4节完整跑一遍每做完一步就看一下右侧步骤列表和公式栏加深对操作即函数、步骤即配方的理解。练习二中途故意改一个步骤比如把拆分列的位置调整到前面或者把某个步骤删除观察后面哪些步骤跟着报错这样能最快理解步骤间的依赖关系。练习三做完查询后分别试验关闭并上载和关闭并上载至 — 仅创建连接两种加载方式再回到Excel里刷新对比区别。我个人在实际使用中的体会是Power Query的入门门槛其实很低难的是从一开始就建立步骤思维——每次操作都在修改一个可复用的流程而不是修改一坨静态数据。遇到任何清洗需求先想能不能把操作沉淀成查询再去动手。带着这个思维用上一两个星期再看那些进阶技巧就会有一种原来如此的通透感。最后再分享一个小技巧把自己最常用的清洗动作比如提升标题、去重、替换NULL、改类型做成一套标准查询模板。下次接到类似结构的脏数据直接复制这个模板查询再把列名映射改一改就行几分钟就能把别人一下午的活干完。这个习惯我保持了很久也是我能坚持把Power Query用下去的重要原因。