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)    收藏  举报

导航