Power BI学习笔记第03篇:Power Query 数据清洗与转换
第03篇:Power Query 数据清洗与转换
1. Power Query 是什么
Power Query 是 Power BI 中内置的 ETL(Extract-Transform-Load)工具,全称"查询编辑器"。它让你在将数据加载到报表之前,对原始数据进行清洗、转换和整理。
简单来说:把"脏数据"变成"干净数据" 的过程都在这里完成。
Note: Power BI Desktop中打开Power Query编辑器的方法:
打开任意Power BI报告之后,左侧点击模型视图,然后菜单选择:主页 - 转换数据 - 转换数据。
2. 常用数据清洗操作
2.1 删除重复项
当数据中存在完全相同的行时,使用"删除重复项"去除冗余。
操作路径:主页 → 删除行 → 删除重复项
⚠️ 注意:是整行完全相同才算重复,部分字段相同不会删除。
2.2 删除错误行
数据导入时,某些单元格可能显示"Error",可以用此功能一键清除。
操作路径:主页 → 删除行 → 删除错误
2.3 填充空值
空值(Null)在计算时会导致问题,可以用以下方式处理:
| 方式 | 说明 |
|---|---|
| 向上填充 | 用上方单元格的值填充空值 |
| 向下填充 | 用下方单元格的值填充空值 |
| 替换为特定值 | 将空值替换为 0、平均值或其他指定值 |
操作路径:转换 → 替换值(或 填充)
# Power Query M 语言示例:将空值替换为0
= Table.ReplaceValue(
源,
null,
0,
Replacer.ReplaceValue,
{"销售额"}
)
2.4 更改数据类型
确保每一列的数据类型正确,是后续计算的基础。
常见数据类型:
| 类型 | 说明 | 示例 |
|---|---|---|
| 文本 | 字符串 | "张三"、"产品A" |
| 整数 | 整型数字 | 100、2024 |
| 小数 | 带小数的数字 | 3.14、99.99 |
| 日期 | 日期 | 2024-01-01 |
| 日期/时间 | 日期+时间 | 2024-01-01 09:30:00 |
| 布尔值 | 真/假 | true / false |
操作路径:选中列 → 在列标题上点击数据类型图标 → 选择对应类型
💡 常见错误:如果某列包含非数字文本,将该列改为整数类型后会全部变成 Error。此时应先清洗数据,移除或修正错误值。
3. 数据转换操作
3.1 筛选行
类似 Excel 的筛选功能,可以设置条件只保留符合条件的行。
操作路径:
- 方法一:点击列标题旁的下拉箭头 → 取消勾选不需要的值
- 方法二:
主页→保留行→保留顶部行 / 保留重复行 / 保留错误等
示例:只保留销售额 > 1000 的行
= Table.SelectRows(源, each [销售额] > 1000)
比如:
= Table.SelectRows(financials_Table, each [Units Sold] > 1000)
3.2 排序
点击列标题旁的排序图标,支持升序、降序排序,也支持多列同时排序。
3.3 透视列与逆透视列
这是 Power Query 中非常实用的功能:
| 操作 | 说明 | 典型场景 |
|---|---|---|
| 透视列 | 将多列合并为一列,值作为新列名 | 汇总数据展开为明细 |
| 逆透视列 | 将多列合并为一列(属性+值) | 宽表转长表 |
示例:将月份列(1月、2月、3月...)逆透视,转换为"月份"和"销售额"两列。
3.4 拆分列
当一列中包含多种信息时,可以拆分。
操作路径:主页 → 拆分列
示例:
- "姓名-部门" 拆分为 "姓名" 和 "部门"
- "2024-01-01" 按分隔符"-"拆分为年、月、日
3.5 合并查询
类似 SQL 的 JOIN,将两个表按指定键合并。
操作路径:主页 → 合并查询
| 合并类型 | 说明 |
|---|---|
| 左外部 | 保留左表所有行,匹配右表 |
| 右外部 | 保留右表所有行,匹配左表 |
| 完全外部 | 保留两表所有行 |
| 内部 | 只保留两表都有的匹配行 |
| 左反 | 只保留左表中有、右表中没有的行 |
3.6 追加查询
类似 SQL 的 UNION(严格的来说是UNION ALL),将多个表纵向拼接。
操作路径:主页 → 追加查询
💡 当多个文件结构相同(如多个月的订单数据),先分别导入,再用"追加查询"合并为一张总表。
4. 自定义列与条件列
4.1 自定义列
通过 M 语言公式创建新列。
示例:创建"利润率"列
= [销售额] - [成本]
示例:创建"销售等级"列(条件逻辑)
= if [销售额] > 10000 then "高"
else if [销售额] > 5000 then "中"
else "低"
4.2 条件列
图形化的条件逻辑创建工具,适合简单的 if-then-else 判断。
操作路径:添加列 → 条件列
如果 [产品类别] = "电子产品" 则 "科技"
否则如果 [销售额] > 5000 则 "高价值"
否则 "普通"
5. 分组与聚合
类似 SQL 的 GROUP BY,对数据进行汇总。
操作路径:转换 → 分组
示例:按产品类别汇总销售额和数量
| 产品类别 | 销售额合计 | 数量合计 |
|---|---|---|
| 电子产品 | 50000 | 100 |
| 服装 | 30000 | 150 |
对应的 M 语言:
= Table.Group(
源,
{"产品类别"},
{
{"销售额合计", each List.Sum([销售额]), type number},
{"数量合计", each List.Sum([数量]), type number}
}
)
6. 常用 M 函数速查
| 函数 | 用途 |
|---|---|
Table.SelectRows |
按条件筛选行 |
Table.TransformColumnTypes |
更改列类型 |
Table.RenameColumns |
重命名列 |
Table.RemoveColumns |
删除列 |
Table.PromoteHeaders |
将第一行提升为列标题 |
Table.UnpivotOtherColumns |
逆透视 |
Table.NestedJoin |
合并查询 |
Table.Combine |
追加查询 |
7. 小结
本篇介绍了:
- ✅ 删除重复项、删除错误行、填充空值等基础清洗操作
- ✅ 更改数据类型,确保数据准确
- ✅ 筛选、排序、透视/逆透视、拆分列等转换操作
- ✅ 合并查询与追加查询(类似 SQL 的 JOIN 和 UNION)
- ✅ 自定义列与条件列的创建方法
- ✅ 分组聚合与常用 M 函数速查
下一篇:我们将进入数据建模环节,学习如何建立表与表之间的关系,以及如何处理模型中常见的"星型模型"和"雪花模型"设计。
posted on 2026-04-25 12:58 哥本哈士奇(aspnetx) 阅读(119) 评论(0) 收藏 举报
浙公网安备 33010602011771号