Power Query功能区 - 主页
关闭关闭并上载翻译一下就是保存的意思。会把结果和查询的步骤都保存下来结果会生成到Excel里。查询刷新预览刷新的概念刷新 重新执行查询步骤从数据源读取最新数据并生成结果当源数据例如 Excel 表发生变化时不需要重新导入源数据不需要重新创建查询只需要点击刷新 → 查询会按照已有步骤重新生成最新结果使用场景区分手动自动连接外部数据源依赖手动刷新查询在 Excel 表 A源数据来自 Excel 表 B、CSV、数据库等外部文件查询不会自动更新需要手动刷新或设置自动刷新才能获取最新数据手动刷新就是本小节提到的”刷新预览“和”全部刷新“同一工作簿数据源可能自动刷新例如查询在 Sheet1源数据在 Sheet2Excel 可能触发内部联动刷新修改源数据后查询结果往往会自动更新但这种更新不稳定不应依赖如果没有更新需要手动刷新刷新预览只作用于当前正在编辑的查询重新执行该查询步骤更新编辑器中的预览数据❗ 不会更新 Excel 中的最终结果全部刷新作用于当前工作簿中的所有查询重新执行所有查询步骤更新所有查询结果Excel表 / 数据模型举个例子例子1同一工作簿可能自动刷新我有以下数据源sheet1日期客户金额地区45292张三100上海45293李四200北京45294王五150上海我对这个表格/区域导入PQ进行以下操作步骤删除空行- 提升标题-筛选出”上海“数据以下是查询结果。那么我现在对查询进行保存后修改sheet1的源数据增加3行上海数据。再次打开查询会发现查询1的预览结果自动更新了这个是Excel内部机制的自动更新不稳定但一般都会自动更新的。例子2外部数据源必须手动刷新我们创建一个空白Excel表链接一个外部数据源创建2个查询分别叫外部1外部2。外部数据源数据如下在空白Excel表导入该外部数据创建的查询1筛选出北方的数据查询2查询出东方的数据。这个时候我们修改外部的源数据增加4行数据2个北方2个东方保存更改。这个时候我们新建的查询并不会自动更新我们需要手动的点击刷新。若点击刷新预览只会修改选中查询的结果这个时候外部2的查询是没有更新的因为刷新预览只是更新当时在编辑的查询。点击全部刷新外部2的数据都会一起刷新了全部刷新是针对全部的查询进行刷新。配置刷新设置可以更改刷新的配置来配合自己的工作需求比如我就不喜欢自动后台刷新因为不小心改了什么数据我根本就不知道那我就可以把后台刷新关闭了。也可以设置全部刷新时是否要刷新某个查询也可以设置刷新频率等。右键查询点击’属性“即可设置。属性查询/修改名字备注作用就是用于查询当前属性的名称和说明当然也可以同步修改这些内容。高级编辑器M语言编辑器高级编辑器其实就是是M语言的编辑器所有查询步骤本质都是M代码实现的。右侧“应用的步骤”是 M 代码的可视化形式。如果代码按“逐步命名”的方式编写每一步都会显示为一个步骤如果使用嵌套或合并写法则可能不会完整显示在步骤中。意思就是只有自己写代码时注意定义步骤按“逐步命名”的方式才会显示在右侧的步骤里。逐步命名每一步都用一个变量名命名并在下一步明确引用上一步 → 右侧“应用的步骤”会完整显示每一步。嵌套或合并写法一行代码做多步处理即使有变量名也可能不会显示为独立步骤。结论只有在自己写代码时注意拆分并逐步命名才能保证每一步在右侧步骤里可见。可以自己找AI要个代码添加到编辑器里面测试一下。管理管理查询对当前查询进行删除复制引用的操作。管理列选择列删除列字面意思减少行指定行数字面意思保留行保留最前面几行保护最后几行这个几行是可以指定数目的自己想搞几行就输入几行。删除行字面意思。删除最前面机会删除最后机会这个几行是可以指定数目的自己想搞几行就输入几行。排序Excel和PQ排序有差异PQ按照unicode排序PQ的排序和Excel的排序不同PQ的文本排序是按照unicode码排序的而Excel在默认为中文系统的情况下遇上汉字是按照拼音首字母排序的。数字列→ 直接按数值大小排序。文本列→ 按字符的Unicode 编码排序。常见错误以为PQ这边汉字按拼音首字母排序。例如安和办拼音分别是An和Ban有人会以为安升序排在前。实际上PQ 排序看的是 Unicode 编码而不是拼音。安的 Unicode 比办大所以升序时办在前安在后。Unicode 是固定编码和拼音无关。规则如下按第一个字符的 Unicode 比较Unicode 小 → 升序排前Unicode 大 → 升序排后如果第一个字符相同再比较第二个字符的 Unicode依次类推直到能确定顺序如果字符完全一样但长度不同短的排前升序举个例子Excel和PQ排序差异比如我现在对人名进行排序有一下原始数据未排序的哈我在Excel表里对客户名字进行升序排序结果如下这是因为按照拼音首字母进行排序Li,Wang,Zhang我在PQ里对客户名字进行升序排序结果如下这是因为按照第一个字符的unicode进行排序了。名字第一个汉字Unicode十进制张三张24352李四李26446王五王29579转换参考前面的笔记功能区“添加列或者功能区”转换“里面有解释。组合合并查询应用场景合并查询可以替代 Excel 中的 VLOOKUP / INDEX MATCH 等操作当然这个应用更广。关键字段 用于匹配的列对应 VLOOKUP 里的查找列合并查询 PQ 里的可视化 VLOOKUP / XLOOKUP作用都是按关键字段匹配把另一张表的数据加到当前表里Power QueryExcel匹配列选中的列查找值列VLOOKUP 第1列左表主表当前表右表副表被查找的数据表Excel vs Power Query 核心区别ExcelVLOOKUP需要指定返回第几列如果要返回多列 → 每一列都要写一个公式数据量大或字段多时维护成本高Power Query合并查询按关键字段匹配后可以一次性展开右表的多个列不需要重复写公式只需点击展开基本概念在 Power QueryPQ里主页功能区的“合并查询”是用来把两个或多个查询的数据按照某种关联关系类似数据库的 Join组合在一起。简单说它就是把两个表按指定字段匹配把数据“拼”到一起。查询 A和查询 B都是表格选择一个或多个关键字段就是列名作为匹配条件合并后会生成一个新的查询把匹配上的数据加到左表主表里类似数据库里的INNER JOIN / LEFT JOIN常见操作步骤在 PQ主页功能区点击“合并查询”选择主表左表和副表右表选择匹配列比如名字、ID选择联接类型Join 类型左连接Left Outer保留左表全部行右表匹配的列加进来右连接Right Outer保留右表全部行内连接Inner只保留匹配上的行全连接Full Outer左右表所有行没匹配的空值左反连接Left Anti左表中没有匹配的行右反连接Right Anti右表中没有匹配的行点击确定→ 生成新的查询展开右表列选择需要合并进来的列举个简单例子用下面的例子自己试一遍上面的所有连接类型就能理解每个联接类型的意思了。A工资表主表员工工资张三5000李四6000王五5500表B绩效表副表员工绩效张三优秀李四良好赵六良好操作左联接结果新查询生成的查询结果默认是table类型可以点击字段右侧的展开按钮来展开数据展开后王五没有匹配 → 工号显示 nullExcel对应的操作得写一个vlookup追加查询在 Power Query 里“追加查询”和“合并查询”不同它不是按字段匹配而是把两个或多个表“上下叠加”成一个表就像把表 A 放在表 B 的下面。应用场景可以把追加查询理解为一种“手动版的合并文件”但两者适用场景不同追加查询和合并文件各有适用场景追加查询Append Queries适合少量数据源特点结构可以不完全一致自动补 null优点灵活可控缺点需要手动逐个选择数据源合并文件Combine Files适合批量文件如一个文件夹下多个 Excel/CSV特点要求结构基本一致如 sheet 名、列结构优点自动化一次设置可长期复用缺点结构不一致时容易出问题基本概念追加查询 堆叠行要求表的列名和列类型最好一致否则 PQ 会自动对齐列名不存在的列用null填充生成的新查询包含所有表的所有行举个例子表A姓名部门张三财务李四销售表B姓名部门王五技术赵六财务操作结果可以看到行是上下堆叠的不是按某个字段匹配如果是三个表及以上的查询追加结果如下追加结果是根据列数最多的表来不存在的列用null填充总结对比合并/追加查询功能操作方式结果类型合并查询按匹配列连接类似 Join左表 匹配列列扩展追加查询上下堆叠所有行所有表行累加列名对齐参数参数 可以被多个查询使用的“可修改变量”面对全局不只是面对一个查询。通俗理解的话就是类比Excel里绝对引用的单元格$A$1参数就等于这个$A$1。创建参数管理参数-点图中的创建就在右侧输入一些信息。配置中建议的值解释如下模式含义使用场景任意值参数可以填任何值灵活筛选文本、日期、数字都可以列表中的值你可以预先定义一个值列表下拉选择避免输入错误比如地区参数只能选“上海/北京/广州”查询参数值来源于另一个查询生成的列表数据驱动例如可选年份列表、部门列表等因此我们生成了一个参与目前值是“上海”使用参数修改M代码打开查询1手动筛选一下M代码会自动生成我们再打开高级编辑器把这行代码复制下来。筛选的行 Table.SelectRows(更改的类型1, each ([地区] 上海))修改这一行筛选的代码改成以下内容然后打开查询2打开高级编辑器复制上去使用参数来筛选行 Table.SelectRows(更改的类型1, each ([地区] 地区参数))代码修改完毕确认后结果如下那现在我想把筛选的值换成“北京”点击左侧的参数修改值为“北京”查询2的结果就自动修改了数据源配置权限新建查询就是新建一个查询可以从外部导入也可以自己手动输入数据还可以创建自定义函数。新建其他源 - 空白查询一般用来创建函数比如“添加列”功能区调用自定义函数时就需要创建空白查询输入代码来自定义一个函数。