使用 Power Query 时的最佳做法

本文包含一些提示和技巧,用于充分利用 Power Query 中的数据整理体验。

选择正确的连接器

Power Query 提供大量的数据连接器。 这些连接器包括从数据源(例如 TXT、CSV 和 Excel 文件)到Microsoft SQL Server 等数据库,以及常用的 SaaS 服务(如 Microsoft Dynamics 365 和 Salesforce)。 如果在“获取数据”窗口中未看到你的数据源,可以使用ODBC或OLEDB连接器连接到你的数据源。

为任务使用最佳连接器可提供最佳的体验和性能。 例如,在连接到 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 功能区屏幕截图,其中显示了“添加列”菜单中特定于类型的选项。

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

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

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

注释

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

探索您的数据

在开始准备数据并添加新转换步骤之前,建议启用 Power Query 数据分析工具 以轻松发现有关数据的信息。

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

这些数据分析工具可帮助你更好地了解数据。 这些工具提供了小型可视化图表,基于每列显示信息,例如:

  • 列质量 - 提供一个小条形图和三个指示器,其中表示列中的值属于有效、错误或空值的类别。
  • 列分布 - 在列名称下提供一组视觉对象,这些视觉对象显示了每个列中值的频率和分布。
  • 列简介 - 提供更彻底的列视图,以及其相关统计信息。

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

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

注释

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

记录工作

我们建议你根据需求,通过重命名或为步骤、查询或组添加说明来记录查询。

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

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

注释

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

采用模块化方法

完全可以创建一个查询,其中包含可能需要的所有转换和计算。 但是,如果查询包含大量步骤,则最好将查询拆分为多个查询,其中一个查询引用了下一个查询。 此方法的目标是将转换阶段简化和分离为较小的部分,以便更易于理解。

例如,假设你有一个查询,其中包含下图所示的九个步骤。

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

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

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

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

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

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

注释

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

创建组

将工作井然有序的一种好方法是在查询窗格中利用分组。

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

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

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

注释

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

未来校对查询

确保您所创建的查询在未来刷新时不会出现任何问题是首要任务。 Power Query 中有多个功能,使查询能够复原更改,即使在数据源的某些组件发生更改时也能刷新。

最佳做法是明确定义查询的范围,包括它应执行的操作以及在结构、布局、列名称、数据类型和其他你认为与范围相关的组件中应考虑哪些因素。

有助于查询复原更改的转换的一些示例包括:

  • 如果查询具有具有数据的动态行数,但用作应删除的页脚的固定行数,则可以使用 “删除底部行 ”功能。

    注释

    若要详细了解如何按行位置筛选数据,请转到 按行位置筛选表

  • 如果查询具有动态数量的列,但只需从数据集中选择特定列,则可以使用 “选择列 ”功能。

    注释

    若要详细了解如何选择或删除列,请转到 “选择或删除列”。

  • 如果查询具有动态数量的列,并且只需要取消透视列的子集,则可以使用 仅透视选定的列 功能。

    注释

    若要详细了解用于取消透视列的选项,请转到 “逆透视列”。

  • 如果查询具有更改列数据类型的步骤,但某些单元格会生成错误,因为值不符合所需的数据类型,则可以删除产生错误值的行。

    注释

    若要详细了解如何处理工作中的错误,请转到 “处理错误”

使用参数

创建动态和灵活的查询是最佳做法。 Power Query 中的参数可帮助你使查询更加动态和灵活。 参数是一种轻松存储和管理可通过多种不同方式重复使用的值的方法。 但它在两种方案中更常用:

  • 步骤参数:可以使用参数作为多个由用户界面驱动的转换的输入。

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

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

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

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

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

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

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

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

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

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

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

注释

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

创建可重用函数

你可能会发现自己在需要将同一组转换应用到不同的查询或值的情况下。 在这种情况下,创建一个 Power Query 自定义函数,可以根据需要多次重复使用该函数。 Power Query 自定义函数是从一组输入值映射到单个输出值,是从本机 M 函数和运算符创建的。

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

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

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

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

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

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

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

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

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

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

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

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

注释

若要详细了解如何在 Power Query 中创建和使用自定义函数,请从“ 自定义函数”一文。