Power Query学习笔记(一)

Power Query是什么?

Power Query 功能复杂、用途多样,但常用的来说,就是 Excel 里一个用来整理和处理表格数据的工具,让数据分析更方便。

✅ 适合:重复性数据清洗和转换,比如对同样格式的数据嫉妒性的报表,比如日报周报等

❌ 不适合:一次性临时分析(直接手工更快)

❌ 不适合:需要人工判断的数据(如主观分类)

❌ 不适合:频繁变化的清洗规则

PQ常用功能

在我的理解里,它就是集成了一些常用功能,常用功能包括:

功能 作用说明 示例
填充空白单元格 将空值用上方或下方的非空值填充(常用于合并拆分后留下的空格) 上下合并后出现空行 → 自动向下填充
转置(行列转换) 将行变列,列变行(适用于宽表变长表) 把"一月、二月、三月"变成三列,每列一个月份的数据
删除空行或空列 清理无意义的空白行/列,使数据更整洁 删除全为空的行,或仅含空值的列
去除首尾空格 清理文本前后多余的空格 " 张三 ""张三"
批量替换/修改数据 对多个单元格进行统一更改 将"男"改为"男性","女"改为"女性"
合并列或拆分列 合并多个列内容,或将一列按分隔符拆分成多列 姓名 + 部门姓名_部门张三,李四 → 两列
筛选与排序 快速定位目标数据,按条件排序 筛选销售额 > 100,按日期降序排列
计算与添加列 根据已有字段生成新列 新增"总价"列 = 单价 × 数量
透视与反透视 改变数据布局,便于分析 • 透视(Pivot):将"月份"列变为多列(如"一月"、"二月") • 反透视(Unpivot):将多列数据还原为单列格式
添加索引列 为每一行添加唯一编号,方便后续处理 添加"序号"列,从 1 开始递增
提取文本/日期 从文本中提取特定部分(如日期、数字) 从"订单20240101"中提取"2024-01-01"
条件列 根据条件创建新的分类或标记 若"金额">500,则标记为"大额"
可重复操作(刷新机制) 所有步骤记录在查询中,下次数据更新只需点击"刷新" 数据换月后,直接刷新即可自动应用所有规则

数据源

打开数据源

在Excel顶部工具栏,按照自己的数据来源来选择就行了。

PS:建议操作PQ前,对数据源进行拷贝 ,用拷贝后的副本进行PQ数据分析。因为PQ的特性,会自动的把数据源变成表格,好处是更改数据源的内容,会自动同步到PQ,但是表格会更改数据源的样式,我不喜欢这个特性,因为数据源就是给人看的,会有很多颜色标注,建议还是拷贝数据源再操作,如果数据源不在意样式,可以随便的话就没事,避免数据源是样式很重要,PQ操作一下样式全没了。

  • 打开数据源后,如果是导入文件,选择需要操作的 sheet,点击 "转换数据"。我一般是打开excel,在对应sheet里选择"来自表格/区域"来导入PQ

  • 这时,Power Query 会在内存里生成这个表格的一个 副本 来进行操作,在编辑器里做的任何修改都 不会影响原表(不影响数据,但是会自动把数据源变成表格)

  • 调整好数据、整理完毕后,点击 "加载"或者"关闭后上载" ,Power Query 会把处理后的数据 生成一个新的表格(通常在新的工作表里中),原表格的内容保持不变。

  • 生成的这个新表格就是我们要用来做数据分析的表(可以左侧"查询"改名后再上载)。

关闭后再次打开PQ

编辑到一半退出后想继续编辑,如何打开对应的编辑呢

引用数据源报错-提示"表不能相互重叠"

比如我有以下sheet

我分别对ABC三列导入了PQ进行分析

我又想对整个数据区域进行分析,但我引用时却报错"表不能相互重叠",简单来说:当你试图在Excel中创建多个来自相同区域的数据查询时,如果这些查询指向的源数据范围有交叉或重复,Excel就会提示这个错误。

这是Excel的保护机制,主要为了避免:

  1. 数据不一致风险:同一份数据被多个查询修改

  2. 刷新冲突:多个查询同时更新同一区域

引用数据源报错-引用整个区域但只显示一部分

但我又想对整个sheet得ABC三列进行分析,于是我引用整个区域,但是很诡异的是,导入PQ后生成的查询只显示第一列的数据。

这是因为Power Query有"记忆"功能! 当重复引用相同或重叠的区域时,它不会创建新查询,而是直接复用已有的查询结果

因为我对A列有过一个查询了,我引用整个区域,这个引用和前面ABC三列的查询是重合的,所以PQ直接复用已有的查询。

引用数据源规范-避免报错

如果报错了就重新删了重来吧,如何避免报错,也是一种对引用数据源的规范,有以下方案;

方案一:整体引用后拆分(仅操作PQ,不操作excel),

引用法步骤(推荐):
  1. 创建"主查询":引用完整A:D区域

  2. 右键"主查询" → 【引用】3次

→ 生成:主查询、主查询1、主查询2、主查询3

  1. 分别重命名和修改:
  • 主查询1 → 重命名为"引用_分析_A" → 删除B、C、D列

  • 主查询2 → 重命名为"引用_分析_B" → 删除A、C、D列

  • 主查询3 → 重命名为"引用_分析_C" → 删除A、B、D列

复制法步骤:
  1. 创建"主查询":引用完整A:D区域

  2. 右键"主查询" → 【复制】3次

→ 生成:主查询 (2)、主查询 (3)、主查询 (4)

  1. 分别重命名和修改:
  • 主查询 (2) → 重命名为"分析_A" → 删除B、C、D列

  • 主查询 (3) → 重命名为"分析_B" → 删除A、C、D列

  • 主查询 (4) → 重命名为"分析_C" → 删除A、B、D列

方案二:数据源分离法(操作excel)

步骤:

  1. 创建4个Sheet:

Sheet1_原始:存放完整原始数据

Sheet2_A列:只复制A列数据

Sheet3_B列:只复制B列数据

Sheet4_C列:只复制C列数据

  1. 分别基于不同Sheet创建查询

  2. 完整分析仍在Sheet1_原始进行

如何判断当前是什么方法?

判断方法:

  1. 查看查询的"源"步骤:
  • 如果源是其他查询名 → 引用法

  • 如果源直接指向Excel表 → 复制法

  1. 查看查询依赖项:
  • 视图 → 查询依赖项

认识PQ表结构

认识表格结构-Excel 导入 PQ 后显示差异

Excel是"电子纸张" ,可以自由排版、合并、加样式。
PQ是"数据库思维" ,要求数据是规范的二维表:第一行是列名,每列一种数据类型,没有合并单元格,没有空行/空列。

|---------------|--------------------------------------------|-----------------------------------------------------------|
| Excel 显示 | Power Query 显示 | 说明 |
| 合并单元格 | 只保留第一个单元格的值,其余单元格变成空白(PQ 内显示为 null) | PQ 不识别合并单元格本身,只处理单元格内容 |
| 空白单元格 | 显示为 null | PQ 用 null 来表示空单元格,和 Excel 空格不同 |
| 首行列标题 | 默认 PQ 会把第一行提升为列名(Promoted Headers) | 如果第一行是数据,PQ 会自动把它当作列名 |
| 数据类型 | 每列显示类型图标(ABC、123、日历等),自动生成"Changed Type"步骤 | Excel 不显示类型,所有内容默认是文本或数字;PQ 会严格区分文本、数字、日期等;excel日期本质就是数字。 |
| 公式 / 合并内容 | PQ 不会保留 Excel 内置公式,显示的是公式计算结果 | 例如 SUM、IF 等公式在 PQ 中不会保留,导入后只能看到计算结果 |
| 单元格格式 | PQ 不显示字体颜色、背景色、边框、格式设置 | PQ 专注于数据内容和结构,不处理视觉样式 |
| 行列结构 | PQ 的表格是严格的"数据表",每列必须有列名,每行必须对齐 | Excel 可以有空行、空列、自由排版,PQ 会自动规整 |

认识表结构-数据类型

PQ有自己的数据类型,该列的数据类型显示在列头,如图,点击这个地方可以更改该列的数据类型。

数据类型有几大类,文本、数字、逻辑值、日期。详细的可以点击图中的位置展开看看,会显示对应的图标的。

认识工作区

认识工作区-应用的步骤(历史记录)

右侧"应用的步骤:会记录操作的每一个步骤,前面几个都是系统自带的,第一步"源"可以看到是来自哪个文件,第二步"导航"可以看到来自哪个sheet,第三步"提升的标题是PQ自动将数据第一行当作列标题 的操作,第四步"更改的类型",这是PQ自动识别每列的数据类型并转换的操作,数据类型见前文。这四个步骤都是系统自动操作。

我们进行操作后右侧就会显示对应的操作步骤,点击对应步骤,会显示该步骤操作后的样子,每一步都可以单独删除,重命名,插入等。

比如我新增一列,并且把数据类型改为数字,就会在右侧显示以下步骤。每个步骤都可以右键后重命名的,或者删除等等

右侧查询设置关闭后如何打开

工作栏-视图-最左侧"查询设置"

认识工作区-查询

左侧数据框会显示有"查询",查询就是Query的意思,一个查询就等于生成一个新的表格,比如你只有一个源数据表,但是你想对这里面的数据分开处理,生成几个表格来做数据分析,你就可以生成多个"查询"。

比如我有一个源数据表如下,我想对A、B、C三列分别做数据分析,所以分别选择ABC三列,就会生成三个"查询"

每个查询都有自己的操作步骤,"查询"上载会生产对应的sheet,右键查询更改名字。

操作步骤实例

PQ是对列/行操作,没有excel单个单元格的概念,不存在单独只改一个格子的操作。

填充-合并单元格的空白单元格

如图,选中指定列-工具栏-转换-填充-向下

替换-空白单元格

数据列有一些空白单元格null,为了保持数据的一致性,将指定列的null替换为"空"。

工具栏-转换-替换值-替换值-输入

删除列-不纳入分析的列

工具栏-删除列

添加列-计算数据

工作栏-添加列-自定义列

这一步我会使用到M函数,笔记放在这:

合并列-合并多列为一列(A1+分隔符+B1=C1)

工具栏-转换-合并列

透视和逆透视

操作 输入(源数据) 输出(结果) 目的
逆透视 宽表(交叉表) 长表(数据表) 数据清洗,为分析做准备
透视 长表(数据表) 宽表(汇总表) 数据展示,便于阅读

用人话来说:

PQ透视 ≈ Excel数据透视表的"透视"功能,都是把长数据变成宽汇总表。

PQ逆透视 = Excel数据透视表的"逆操作"!比如平时我们双击数据透视表,会弹出一个明细表一样。

具体亲自上手操作会更清晰。

摊平列-多列"摊平"成两列(逆透视)

工具栏-转换-逆透视列

比如我有这样一个表格的结构,不同项目的中奖和参与人数不一样,我现在想要所有项目所有参与人员的名单, 但是参与人员有4列n行。

这个时候可以对参与人员区域进行逆透视。

单独把这个区域做一个查询

选中这四列,选择"逆透视列"

结果如下,多列摊平成两列(逆透视)的意思就是,标题行单独一列(属性),其余的全部为一列(对应属性的值。

然后删除"属性"列,对人名一列进行去重,就得到所有项目所有参与人员的名单了。

相关推荐
淡忘旧梦3 小时前
词错误率/WER算法讲解
人工智能·笔记·python·深度学习·算法
Dream Algorithm3 小时前
POS机的机制,以及流量是怎么传送的
笔记
狐573 小时前
2026-01-21-牛客每日一题-静态区间和(前缀和)
笔记·算法
佳哥的技术分享4 小时前
Function<T, R> 中 apply,compose, andThen 方法总结
java·学习·r语言
Yu_Lijing4 小时前
基于C++的《Head First设计模式》笔记——状态模式
c++·笔记·设计模式
阳明Coding4 小时前
golang从入门到通天—数据库操作(gorm框架使用)(最简单最详细的golang学习笔记)
笔记·学习·golang
AI视觉网奇4 小时前
ue5 开发 web socket server 实战2026
c++·学习·ue5
嗯嗯=4 小时前
STM32单片机学习篇6
stm32·单片机·学习
2301_797312264 小时前
学习Java42天
java·开发语言·学习