惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

A
About on SuperTechFans
Y
Y Combinator Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Microsoft Security Blog
Microsoft Security Blog
aimingoo的专栏
aimingoo的专栏
I
InfoQ
C
Check Point Blog
IT之家
IT之家
MyScale Blog
MyScale Blog
Apple Machine Learning Research
Apple Machine Learning Research
Vercel News
Vercel News
Last Week in AI
Last Week in AI
GbyAI
GbyAI
P
Proofpoint News Feed
量子位
Stack Overflow Blog
Stack Overflow Blog
Microsoft Azure Blog
Microsoft Azure Blog
月光博客
月光博客
阮一峰的网络日志
阮一峰的网络日志
人人都是产品经理
人人都是产品经理
B
Blog
T
The Blog of Author Tim Ferriss
H
Help Net Security
云风的 BLOG
云风的 BLOG

博客园 - 哥本哈士奇(aspnetx)

dbt+SQLServer构建数据仓库(13):运维 FAQ 篇 dbt+SQLServer构建数据仓库(12):进阶 FAQ 篇 dbt+SQLServer构建数据仓库(11):FAQ 篇 dbt+SQLServer构建数据仓库(10):macro 以及 data vault的应用实例 dbt+SQLServer构建数据仓库(9):用Vibe Coding创建一个DBT UI dbt+SQLServer构建数据仓库(8):Vibe Coding用dbt构建data vault数仓 dbt+SQLServer构建数据仓库(7):进阶扩展 dbt+SQLServer构建数据仓库(6):Jinja与DAG实战 dbt+SQLServer构建数据仓库(5):数据测试 dbt+SQLServer构建数据仓库(4):分层建模实战 dbt+SQLServer构建数据仓库(3):dbt_project.yml配置精讲 dbt+SQLServer构建数据仓库(2):与传统方案对比及迁移决策 dbt+SQLServer构建数据仓库(1):认识dbt与项目工作流程 SQL Server 索引知识汇总 医疗器械行业 Salesforce Territory 完整落地实例 Raw Data Vault vs Business Data Vault Neo4j 多跳查询实战:从社交网络场景理解图遍历 Git 本地版本管理学习笔记 看完《低智商犯罪》,学习Cypher构建知识图谱 LangChain DeepAgents 学习笔记 LangChain Deepagent 版本0.6.1中间件一个bug Neo4j笔记(五):查询的处理流程 微软 SQL Server 版本演进史:从诞生到 SQL Server 2025 提升 Text2SQL 准确率 SQLServer Management Studio(SSMS) 22 Copilot 最佳实践学习笔记 SQLServer RAG笔记4:从服务层到前端交互 SQLServer RAG笔记5:为SQLServer 2025配置Ollama SQL Server RAG 笔记3:SQLServer2025 向量数据库 详解传统RAG、Text2SQL、Graph RAG:适用场景与问题示例汇总 SQL Server RAG 笔记2:图数据库服务层与前端可视化构建
Power BI学习笔记第03篇:Power Query 数据清洗与转换
哥本哈士奇(aspnet · 2026-04-25 · via 博客园 - 哥本哈士奇(aspnetx)

第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 函数速查

下一篇:我们将进入数据建模环节,学习如何建立表与表之间的关系,以及如何处理模型中常见的"星型模型"和"雪花模型"设计。