使用 Power Query 时的最佳做法
本文包含一些提示和技巧,旨在充分利用 Power Query 中的数据整理体验。
选择正确的连接器
Power Query 提供大量的数据连接器。 这些连接器从数据源(例如 TXT、CSV 和 Excel 文件)到数据库(如 Microsoft SQL Server),以及 Microsoft Dynamics 365 和 Salesforce 等常用 SaaS 服务不等。 如果未看到获取数据窗口中列出了数据源,始终可以使用 ODBC 或 OLEDB 连接器连接到数据源。
使用最适合任务的连接器时,可提供最佳的体验和性能。 例如,连接到 SQL Server 数据库时使用 SQL Server 连接器,而不是 ODBC 连接器,不仅提供了更好的获取数据体验,而且 SQL Server 连接器还提供可改善体验和性能的功能,例如查询折叠。 要了解有关查询折叠的详细信息,请转到 Power Query 中的查询评估和查询折叠的概述。
每个数据连接器都遵循标准体验,如获取数据中所述。 此标准化体验具有名为数据预览的阶段。 在此阶段中,将提供用户友好的窗口,用于选择要从数据源获取的数据(如果连接器允许),以及该数据的简单数据预览。 甚至可以通过导航器窗口从数据源中选择多个数据集,如下图所示。
注意
要在 Power Query 中查看可用连接器的完整列表,请转到 Power Query 中的连接器。
提前筛选
建议始终在查询的早期阶段或尽早筛选数据。 某些连接器将通过查询折叠来利用筛选器,如 Power Query 中的查询评估和查询折叠概述中所述。 这也是筛选出与案例无关的任何数据的最佳做法。 这样,便能更好地专注于手头的任务,仅显示与数据预览部分相关的数据。
可以使用自动筛选菜单来显示列中值的不同列表,以选择要保留或筛选掉的值。还可以使用搜索栏来帮助查找列中的值。
还可以利用特定于类型的筛选器,例如在前面适用于日期、日期时间或甚至日期时区列。
这些特定于类型的筛选器有助于创建动态筛选器,该类筛选器将始终检索前 x 秒、分钟、小时、天、周、月、季度或年的数据,如下图所示。
注意
要详细了解如何根据列中的值筛选数据,请转到按值筛选。
上次执行成本高昂的操作
某些操作需要读取完整的数据源,才能返回任何结果,因此在 Power Query 编辑器中预览速度会很慢。 例如,如果执行排序,则前几个排序行可能位于源数据末尾。 因此,为了返回任何结果,排序操作必须先读取所有行。
其他操作(如筛选器)不需要在返回任何结果之前读取所有数据。 相反,它们以所谓的“流式处理”方式操作数据。 数据会“流式传输”,并且期间会返回结果。 在 Power Query 编辑器中,此类操作只需读取足够的源数据,即可填充预览。
如果可能,先执行此类流式处理操作,最后执行成本更昂贵的操作。 这有助于最大程度地减少每次向查询添加新步骤时等待预览呈现的时间量。
暂时处理数据子集
如果在 Power Query 编辑器中向查询添加新步骤时速度很慢,请考虑先执行“保留前几行”操作,并限制要处理的行数。 接着,添加所需的所有步骤后,删除“保留前几行”步骤。
使用正确的数据类型
Power Query 中的某些功能与所选列的数据类型上下文相关。 例如,选择日期列时,“添加列”菜单中的“日期和时间列”组下的可用选项将可用。 但是,如果列没有数据类型集,则这些选项将灰显。
类型特定的筛选器也会出现类似的情况,因为它们特定于某些数据类型。 如果列未定义正确的数据类型,则这些特定于类型的筛选器将不可用。
始终使用适合列的数据类型至关重要。 使用结构化数据源(如数据库)时,将从数据库中找到的表架构中获取数据类型信息。 但是,对于非结构化数据源(如 TXT 和 CSV 文件),务必为来自该数据源的列设置正确的数据类型。 默认情况下,Power Query 会为非结构化数据源提供自动数据类型检测。 可以阅读来详细了解此功能,以及在数据类型方面提供的帮助。
注意
要详细了解数据类型的重要性以及如何使用它们,请参阅数据类型。
浏览数据
在开始准备数据和添加新转换步骤之前,建议启用 Power Query 数据分析工具,以便轻松发现有关数据的信息。
这些数据探查工具有助于更好地了解数据。 这些工具提供小型可视化效果,这些可视化效果基于每列显示信息,例如:
- 列质量 - 提供一个小条形图和三个指示器,其中表示列中的值属于有效、错误或空值的类别。
- 列分布 - 在列名称下方提供一组视觉对象,显示每列中值的频率和分布。
- 列配置文件 - 提供列及其关联的统计信息的更详细视图。
还可以与这些功能进行交互,这有助于准备数据。
注意
要详细了解数据探查工具,请转到数据探查工具。
记录工作
建议根据自己的需要,重命名或添加步骤、查询或组的说明来记录查询。
虽然 Power Query 会在“应用的步骤”窗格中自动创建步骤名称,但也可以重命名步骤,或向其中的任何步骤添加说明。
注意
要详细了解“应用的步骤”窗格中的所有可用功能和组件,请转到使用“应用的步骤”列表。
采用模块化方法
完全可以创建一个查询,其中包含可能需要的所有转换和计算。 但是,如果查询包含大量步骤,则最好将查询拆分为多个查询,其中一个查询引用下一个查询。 此方法的目标是将转换阶段简化和分离为较小的部分,以便更易于理解。
例如,假设有一个查询,其中包含下图所示的九个步骤。
可以在与价格表合并步骤中将此查询拆分为两个查询。 这样,就更容易理解合并之前应用于销售查询的步骤。 要执行此操作,请右键单击与价格表合并步骤,然后选择提取之前的步骤选项。
接着,系统会使用一个对话框提示您,为新查询提供名称。 这将有效地将查询拆分为两个查询。 在合并之前,一个查询将包含所有查询。 另一个查询将具有一个初始步骤,该步骤将引用新查询,并且与价格表合并的原始查询中的其余步骤将逐步拆分。
还可以根据需要利用查询引用。 但是,最好让查询保持在一个级别,以便一目了然地看到如此多的步骤并不令人生畏。
注意
要详细了解查询引用,请转到了解查询窗格。
创建组
保持工作井然有序的一种好方法是利用查询窗格中的组。
组的唯一用途是帮助通过充当查询的文件夹来组织工作。 如果需要,可以在组中创建组。 跨组移动查询与拖放一样简单。
尝试为组提供有意义的名称,对您和案例都有意义。
注意
要详细了解查询窗格中的所有可用功能和组件,请转到了解查询窗格。
面相未来的查询
确保创建在将来刷新期间不会出现任何问题的查询是重中之重。 Power Query 中有多个功能,使查询能够适应更改,即使在数据源的某些组件发生更改时也能刷新。
最佳做法是将查询的范围定义为应执行的操作,以及在结构、布局、列名称、数据类型,以及认为与范围相关的任何其他组件方面应考虑的内容。
有助于查询适应更改的一些转换示例包括:
如果查询具有含数据的动态行数,但用作应删除的页脚的固定行数,则可以使用删除最后几行功能。
注意
要详细了解如何按行位置筛选数据,请转到按行位置筛选表。
如果查询具有动态数量的列,但只需从数据集中选择特定列,则可以使用选择列功能。
注意
要详细了解如何选择或删除列,请转到选择或删除列。
如果查询具有动态数量的列,并且只需逆透视列的子集,则可以使用仅逆透视选定列功能。
注意
要详细了解用于逆透视列的选项,请转到逆透视列。
如果查询具有更改列数据类型的步骤,但某些单元格会产生错误,因为值不符合所需的数据类型,则可以删除产生错误值的行。
注意
要详细了解如何处理错误,请转到处理错误。
使用参数
最佳做法是创建动态和灵活的查询。 Power Query 中的参数有助于使查询更加动态和灵活。 参数是一种轻松存储和管理可通过多种不同方式重用的值的方法。 但是,它在两种场景中更常用:
Step 参数 - 可以使用参数作为从用户界面驱动的多个转换的参数。
自定义函数参数 - 可以通过查询创建新函数,并引用参数作为自定义函数的参数。
创建和使用参数的主要优点包括:
通过管理参数窗口集中查看所有参数。
可在多个步骤或查询中重用参数。
使自定义函数的创建简单易行。
甚至可以在数据连接器的某些参数中使用参数。 例如,在连接到 SQL Server 数据库时,可以为服务器名称创建参数。 接着,可以在 SQL Server 数据库对话框中使用该参数。
如果更改服务器位置,只需更新服务器名称的参数,并且将更新查询。
注意
要详细了解如何创建和使用参数,请转到使用参数。
创建可重用函数
如果发现自己需要将同一组转换应用于不同的查询或值,那么创建一个可以根据需要多次重用的 Power Query 自定义函数可能会很有帮助。 Power Query 自定义函数是从一组输入值到单个输出值的映射,是从本机 M 函数和运算符创建的。
例如,假设有多个查询或值需要同一组转换。 可以创建一个自定义函数,稍后可以针对所选的查询或值调用该函数。 此自定义函数可以节省时间,并有助于在集中位置管理转换集,并随时可对其进行修改。
可以从现有查询和参数创建 Power Query 自定义函数。 例如,假设一个查询包含多个代码作为文本字符串,并且想要创建一个函数来解码这些值。
首先创建一个参数,该参数具有一个作为示例的值。
可以利用该参数创建一个可在其中应用所需转换的新查询。 对于这种情况,需要将代码 PTY-CM1090-LAX 拆分为多个组成部分:
- 始发地 = PTY
- 目的地 = LAX
- 航空公司 = CM
- FlightID = 1090
接着,可以右键单击查询并选择创建函数,将该查询转换为函数。 最后,可以将自定义函数调用到任何查询或值中,如下图所示。
在进行一些更多转换后,可以看到已产生所需的输出,并且利用了从自定义函数进行此类转换的逻辑。
注意
要详细了解如何在 Power Query 中创建和使用自定义函数,请参阅自定义函数一文。