← 返回首页目录
# 什么是 Power Query?

Power Query 是一种数据转换和数据准备引擎。它提供了一个用于从数据源获取数据的图形界面,以及一个用于应用转换的 Power Query 编辑器。Power Query 负责转换数据,但并不提供单一的数据存储目的地;承载 Power Query 的产品或服务决定了处理结果的加载位置。通过使用 Power Query,您可以执行数据的提取、转换、加载(ETL)处理。

## 一、Power Query 在数据获取中的应用价值

Power Query 帮助用户连接数据、重塑数据,并将转换步骤保存为可重复运行的查询,支持后续刷新以获取最新数据。下表明确了常见数据准备挑战与 Power Query 功能之间的对应关系:

**存在的挑战**:查找并连接数据过于困难。**Power Query 的解决方案**:支持连接数百种数据源,涵盖各种规模和形态的数据。

**存在的挑战**:数据连接体验过于碎片化。**Power Query 的解决方案**:在不同数据源间提供一致性的体验和查询能力同步。

**存在的挑战**:数据在消费前常常需要重塑结构。**Power Query 的解决方案**:提供交互式、直观的体验,可针对任意规模的数据源快速进行迭代式查询构建。

**存在的挑战**:数据处理多数是一次性的、不可重复。**Power Query 的解决方案**:通过定义查询流程实现数据获取与转换的可重复性,未来可轻松刷新以获取最新数据。如需应对底层数据或架构变更,也可沿用初始定义时的交互体验进行修改。

**存在的挑战**:数据面临量(数据规模)、速(变化速率)、多样(数据源与形态的广泛性)三方面挑战。**Power Query 的解决方案**:支持基于数据集的子集定义所需的数据转换,便于过滤和缩减数据体量;同时支持用户通过手动方式、使用特定产品(如 Power BI)的定时刷新功能或通过 Excel 对象模型编程方式刷新查询。

Power Query 支持数百种数据源连接,并针对每种数据源提供超过 350 种数据转换操作,这使得用户可以从任何来源、以任何形态处理数据。

## 二、Power Query 的两种使用体验

Power Query 的使用无需编写代码。Power Query 编辑器支持通过功能区、菜单、按钮及其他界面组件应用数据转换。当用户在编辑器中创建转换步骤时,Power Query 会自动生成对应的 M 代码。Power Query 编辑器是主要的数据准备体验界面,用户可以连接数据源、预览数据,并从界面中选择数百种数据转换操作。这些数据转换能力在所有数据源之间保持一致,不受底层数据源限制。

目前有两种 Power Query 体验可供使用:

**Power Query Online**:可在集成于网页端的服务中使用,如 Power BI dataflows 和 Microsoft Power Platform dataflows。

**Power Query Desktop**:适用于桌面应用,如 Excel 和 Power BI Desktop。

需要注意的是,Power Query Online 在云端产品的网页浏览器中运行,而 Power Query Desktop 运行在桌面应用程序内。两者共享核心编辑器和转换体验,但在可用连接器、认证方式、数据目的地及特定产品功能方面可能存在差异,具体取决于承载环境。

## 三、Power Query 的数据转换功能

Power Query 的转换引擎预置了大量转换函数,这些函数可通过 Power Query 编辑器的界面操作使用。Power Query 将转换记录为查询步骤,并在查询运行时应用这些步骤,同时不影响源数据的原始状态。转换可以是简单的操作,如删除列或筛选行;也可以是常用操作,如将首行用作表标题。高级转换选项包括合并、追加、分组依据、透视和逆透视。所有这类转换均可在菜单中选择相应选项,再配置需求参数完成操作。

## 四、数据流与 Power Query 集成

数据流(Dataflows)提供基于云的 Power Query 体验,用于可复用的数据准备。在支持数据流的产品中,用户可以连接数据、应用 Power Query 转换,并将处理后的输出存储,以供其他流程、产品或服务使用。可用的目的地与刷新能力取决于承载数据流的产品。例如,数据流可以将输出存储在 Microsoft Dataverse 或 Azure Data Lake Storage 中,并非直接载入 Excel 或 Power BI。

## 五、Power Query M 公式语言

部分数据转换需要图形界面暂不支持的特定配置和设置。Power Query 引擎在后台使用一种脚本语言执行所有转换,即 Power Query M 公式语言,简称为 M。M 语言是 Power Query 的数据转换语言,所有查询中的操作均以 M 编写完成。若您希望基于 Power Query 引擎执行高级转换,可使用高级编辑器访问查询脚本并按需修改。当界面提供的函数与转换无法满足某些精确变更需求时,建议使用高级编辑器和 M 语言进行微调。以下为一个 M 查询示例,演示了 Power Query 转换序列在 M 中的表示方式:

```powerquery
let
    Source = Exchange.Contents("xyz@contoso.com"),
    Mail1 = Source{[Name="Mail"]}[Data],
    #"Expanded Sender" = Table.ExpandRecordColumn(Mail1, "Sender", {"Name"}, {"Name"}),
    #"Filtered Rows" = Table.SelectRows(#"Expanded Sender", each ([HasAttachments] = true)),
    #"Filtered Rows1" = Table.SelectRows(#"Filtered Rows", each ([Subject] = "sample files for email PQ test") and ([Folder Path] = "\Inbox\")),
    #"Removed Other Columns" = Table.SelectColumns(#"Filtered Rows1",{"Attachments"}),
    #"Expanded Attachments" = Table.ExpandTableColumn(#"Removed Other Columns", "Attachments", {"Name", "AttachmentContent"}, {"Name", "AttachmentContent"}),
    #"Filtered Hidden Files1" = Table.SelectRows(#"Expanded Attachments", each [Attributes]?[Hidden]? <> true),
    #"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File from Mail", each #"Transform File from Mail"([AttachmentContent])),
    #"Removed Other Columns1" = Table.SelectColumns(#"Invoke Custom Function1", {"Transform File from Mail"}),
    #"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File from Mail", Table.ColumnNames(#"Transform File from Mail"(#"Sample File"))),
    #"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}, {"Column8", type text}, {"Column9", type text}, {"Column10", type text}})
in
    #"Changed Type"
```

该示例展示了从 Microsoft Exchange 获取邮件附件、按附件状态/主题/文件夹筛选消息、调用自定义转换函数处理每个附件,以及为输出列设定数据类型的完整流程。

## 六、Power Query 支持的应用场景

下表列出了包含 Power Query 的 Microsoft 产品及服务:

| **产品** | **M 引擎** | **Power Query Desktop** | **Power Query Online** | **数据流** |
|---|---|---|---|---|
| Excel for Windows | 是 | 是 | 否 | 否 |
| Excel for Mac | 是 | 是 | 否 | 否 |
| Power BI | 是 | 是 | 是 | 是 |
| Power Apps | 是 | 否 | 是 | 是 |
| Power Automate | 是 | 否 | 是 | 否 |
| Power BI Report Server | 是 | 是 | 否 | 否 |
| Azure Data Factory | 是 | 否 | 是 | 是 |
| Data Factory in Microsoft Fabric | 是 | 否 | 是 | 是 |
| SQL Server Integration Services | 是 | 否 | 否 | 否 |
| SQL Server Analysis Services | 是 | 是 | 否 | 否 |
| Dynamics 365 Customer Insights | 是 | 否 | 是 | 是 |

> 注:M 引擎指运行 M 公式语言查询的底层执行引擎;Power Query Desktop 指桌面应用程序中的体验;Power Query Online 指网页应用中的体验;数据流则作为云端服务运行,独立于具体产品,其他应用或服务可复用其存储结果。

## 七、相关资源

- 连接器概述:Power Query 中的 Connectors
- 数据获取指南:Getting data overview
- 用户界面详解:The Power Query user interface
- 数据流说明文档:What are dataflows?

Power Query 作为企业级数据准备工具,可显著简化数据集成过程,提高数据处理的可重复性与自动化水平,是现代数据工程与分析工作流中的基础组件。