使用 Power Query 时的最佳做法

这些Power Query最佳做法可帮助你改进查询性能、利用查询折叠、选择正确的数据类型、组织转换以及使用参数和自定义函数重用逻辑。 它们适用于 Power Query Desktop 和 Power Query Online 体验。

选择正确的连接器

Power Query提供了许多数据连接器。 这些连接器从数据源(例如 TXT、CSV 和Excel文件)到数据库(如Microsoft SQL Server)和常用软件即服务(SaaS)产品(如Microsoft Dynamics 365和 Salesforce)不等。 如果 “获取数据” 窗口中没有专用连接器,请使用 ODBC 或 OLE DB 等通用连接器。

如果有适用于您的数据源的专用连接器,请选择它。 例如,在连接到 SQL Server 数据库时,SQL Server 连接器提供比通用 ODBC 连接器更好的获取数据体验。 SQL Server连接器还支持性能功能,例如查询折叠。 若要了解详细信息,请转到Power Query中的查询评估和查询折叠概述

每个数据连接器都遵循标准体验,如 “获取数据”中所述。 此标准化体验具有一个名为 “数据预览”的阶段。 在此阶段中,你将提供一个用户友好的窗口,用于选择要从数据源获取的数据(如果连接器允许该数据)以及该数据的简单数据预览。 甚至可以通过 导航器 窗口从数据源中选择多个数据集。

示例导航器窗口的屏幕截图,其中显示了选择所需数据的位置和数据预览窗格。

注释

若要查看 Power Query 中可用连接器的完整列表,请转到 Power Query 中的连接器

提前筛选数据以提高性能

尽早筛选数据,以减少Power Query后续转换中处理的行数。 对于支持查询折叠的连接器,Power Query可以将筛选器推送回数据源,如Power Query查询评估和查询折叠概述中所述。 筛选掉不相关的数据也会限制数据预览中显示的数据。

使用自动筛选菜单(显示列中找到的值的不同列表)选择要保留或筛选掉的值。使用搜索栏可帮助你在列中查找值。

Power Query 中“自动筛选”菜单的屏幕截图,其中突出显示了列值。

还可以利用特定于类型的筛选器,例如在先前的日期、日期时间或日期时区列中使用。

日期列的示例类型特定筛选器的屏幕截图,其中上一个选项被突出显示。

这些特定于类型的筛选器可帮助你创建动态筛选器,该筛选器始终检索前 秒、分钟、小时、天、周、月、季度或年份中的数据。

“筛选行”对话框的屏幕截图,其中显示了“以前特定于日期的筛选器”。

注释

若要详细了解如何根据列中的值筛选数据,请转到 “按值筛选”。

将高开销操作放在最后执行以提高性能

若要提高 Power Query 编辑器中的预览性能,请将高开销操作放到最后执行。 某些操作需要读取完整的数据源才能返回 任何 结果,因此预览速度缓慢。 例如,如果执行排序,则前几行可能位于源数据末尾。 若要返回任何结果,排序操作必须首先读取 所有 行。

其他作(如筛选器)不需要在返回任何结果之前读取所有数据。 相反,它们以被称为“流式处理”的方式对数据进行操作。 数据在流动过程中,结果被返回。 在 Power Query 编辑器中,此类操作只需读取足够的源数据以填充预览。

如果可能,请先执行此类流式处理操作,并最后执行更昂贵的操作。 按此顺序执行作有助于最大程度地减少每次向查询添加新步骤时等待预览呈现的时间。

开发查询时使用数据子集

如果在Power Query编辑器中添加新步骤速度较慢,请使用“保留第一行”来限制在开发查询时处理的数据。 添加所有必需的步骤后,删除 “保留第一行 ”步骤,以便完成的查询处理完整的数据集。

使用正确的数据类型

为每一列设置正确的数据类型,以便 Power Query 提供特定于该类型的转换和筛选。 例如,选择日期列时,可以使用“添加列”菜单中的“日期和时间”列组下的选项。 如果该列未设置数据类型,这些选项会显示为灰色。

Power Query 功能区屏幕截图,其中显示了“添加列”菜单中特定于类型的选项。

类型特定的筛选器也会出现类似的情况,因为它们特定于某些数据类型。 如果列未定义正确的数据类型,则这些特定于类型的筛选器不可用。

日期列的类型特定筛选器的屏幕截图。

始终使用列的正确数据类型至关重要。 处理结构化数据源(如数据库)时,数据类型信息将从数据库中找到的表架构中获取。 但是,对于非结构化数据源(如 TXT 和 CSV 文件),请务必为来自该数据源的列设置正确的数据类型。 默认情况下,Power Query 为非结构化数据源提供自动数据类型检测。 可以阅读有关此功能的详细信息,以及如何在 数据类型中帮助你。

注释

若要详细了解数据类型的重要性以及如何使用它们,请转到 数据类型

分析和探索您的数据

在准备数据并添加转换步骤之前,请启用Power Query数据分析工具来发现有关数据的信息。

Power Query 中的数据预览或数据分析工具的屏幕截图。

Power Query提供三种数据分析工具:

工具 它显示的内容
列质量 有效、包含错误或为空的列中的值的比例。
列分布 每个列中值的频率和分布。
列配置 有关所选列的详细统计信息。

还可以与这些功能进行交互,这有助于准备数据。

演示数据质量悬停选项的屏幕截图。

注释

若要详细了解数据分析工具,请转到 数据分析工具

记录工作

通过为步骤、查询和组提供有意义的名称和说明,来为 Power Query 解决方案编写文档。 这些详细信息使每个转换的用途更易于理解和维护。

虽然 Power Query 会在应用的步骤窗格中自动为你创建步骤名称,但也可以重命名步骤或向其中的任何步骤添加说明。

已应用步骤窗格的屏幕截图,其中记录了步骤并添加了说明。

注释

若要详细了解应用的步骤窗格中找到的所有可用功能和组件,请转到 “使用应用的步骤”列表

将大型查询拆分为模块

将大型Power Query查询拆分为较小的引用查询,使其转换阶段更易于理解和维护。 尽管单个查询可以包含所需的所有转换和计算,但是当一个查询引用下一个查询时,具有许多步骤的查询更易于管理。

例如,以下查询包含九个步骤,其中包括一个与“价格”表合并步骤。

已应用步骤窗格的屏幕截图,其中包含记录的步骤和添加的说明。

您可以在“与价格表合并”步骤中将此查询拆分为两个。 这样,就更容易理解合并之前应用于销售查询的步骤。 若要执行此作,请右键单击 “合并与价格”表 步骤,然后选择“ 提取上一 步”选项。

应用的步骤上下文菜单的屏幕截图,其中突出显示了“提取上一步”。

然后,系统会提示你输入一个对话框,以便为新查询提供一个名称。 此步骤有效地将查询拆分为两个查询。 一个查询包含合并前的所有步骤。 另一个查询具有一个初始步骤,该步骤引用了您的新查询,以及原始查询中从合并与价格表步骤开始的其余步骤。

提取上一步作后原始查询的屏幕截图。

你也可以根据需要使用查询引用。 但是,最好将查询保持在一个级别,使之不至于因步骤过多而令人生畏。

注释

若要了解有关查询引用的详细信息,请转到 “了解查询”窗格

将查询组织到组中

使用查询窗格中的组,让工作井然有序。

“查询”窗格的上下文菜单屏幕截图,展示如何在 Power Query 中使用分组功能。

组的唯一用途是帮助你通过充当查询的文件夹来组织工作。 如果需要,可以在组中创建组。 跨组移动查询与拖放一样简单。

尝试为你的小组起一个对你情况有意义的名字。

注释

若要详细了解查询窗格中找到的所有可用功能和组件,请转到 “了解查询”窗格

面向未来的查询

设计查询以处理源数据的预期更改,以便将来的刷新继续成功。 Power Query提供转换,使查询在数据源中的行、列或值发生更改时具有复原能力。

定义查询的范围,包括应执行的操作,以及它应该在结构、布局、列名称、数据类型和任何其他相关组件方面考虑的内容。

以下转换可帮助查询保持对更改的复原能力:

源数据场景 Power Query 转换 Learn more
数据行数发生更改,但必须删除固定数量的页脚行。 删除底部行 按行位置筛选表格
列数更改,但查询只需要特定列。 选择列 选择或删除列
列数发生更改,但查询必须仅撤消特定子集。 仅透视所选列 逆透视列
对于不符合目标类型的值,数据类型转换会产生错误。 删除包含错误的行。 处理错误

使用参数

使用Power Query参数来存储和管理可在转换、数据源函数和自定义函数中重复使用的值。 参数使查询更易于更新,因为可以在一个位置更改值,而不是编辑使用该查询的每个查询。 两种常见方案包括:

  • 步骤参数:使用某个参数作为由用户界面驱动的多个转换操作的参数。

    “筛选行”对话框的屏幕截图,其中为转换参数设置了“选择参数”选项。

  • 自定义函数参数:从查询创建新函数,并引用参数作为自定义函数的参数。

    突出显示的“查询上下文”菜单“创建函数”选项和“创建函数”对话框的屏幕截图。

创建和使用参数的主要优点包括:

  • 通过 “管理参数 ”窗口集中查看所有参数。

    “管理参数”下拉菜单的屏幕截图,其中突出显示了“新建参数”和“管理参数”对话框。

  • 在多个步骤或查询中可重用参数。

  • 使自定义函数的创建简单简单易行。

甚至可以在数据连接器的某些参数项中使用参数。 例如,在连接到 SQL Server 数据库时,可以为服务器名称创建参数。 然后,可以在 SQL Server 数据库对话框中使用该参数。

SQL Server 数据库对话框的屏幕截图,其中设置了服务器名称的参数集。

如果更改服务器位置,只需更新服务器名称的参数,并更新查询。

注释

若要详细了解如何创建和使用参数,请转到 “使用参数”。

创建可重用函数

如果需要将同一组转换应用于不同的查询或值,请创建Power Query自定义函数。 Power Query自定义函数将一组输入值映射到单个输出值,并从本机Power Query M 公式语言函数和运算符创建。

例如,假设有多个查询或值需要同一组转换。 可以创建一个自定义函数,稍后针对所选的查询或值调用该函数。 此自定义函数可节省时间,并帮助你在中心位置管理转换集,你可以随时对其进行修改。

可以从现有查询和参数创建 Power Query 自定义函数。 例如,假设一个查询包含多个代码作为文本字符串,并且你想要创建一个解码这些值的函数。

航班数据代码的原始列表的屏幕截图。

首先,使用一个包含示例值的参数。

“管理参数”对话框的屏幕截图,其中输入了示例参数代码值。

根据该参数创建一个新查询,并在其中应用所需的转换。 在这种情况下,你需要将代码 PTY-CM1090-LAX 拆分为多个组件。

  • 原点 = PTY
  • 目标 = LAX
  • 航空公司 = CM
  • 航班ID = 1090

示例转换查询的屏幕截图,其中每个部分都位于其自己的列中。

然后,可以通过右键单击该查询并选择 “创建函数”将查询转换为函数。 最后,可以将自定义函数调用到任何查询或值中。

填充了“调用自定义函数”值的代码列表的屏幕截图。

再进行一些转换后,可以看到你达到了所需的输出,并应用了从自定义函数进行此类转换的逻辑。

屏幕截图,显示调用自定义函数后的最终输出查询。

注释

若要详细了解如何在Power Query中创建和使用自定义函数,请参阅自定义函数