本机查询上的查询折叠

在 Power Query 中,可以定义本机查询,并针对数据源运行查询。 使用本机数据库查询从数据库导入数据文章中介绍了如何使用多个数据源执行此过程。 但是,通过使用本文中所述的过程,查询将无法利用后续查询步骤中的任何查询折叠。

本文演示了一种替代方法,即使用 Value.NativeQuery 函数针对数据源创建本机查询,并在查询的后续步骤中保持查询折叠机制的活动状态。

注意

建议阅读有关查询折叠查询折叠指示器的文档,以便更好地了解本文中使用的概念。

支持的数据连接器

后文介绍的方法适用于以下数据连接器:

从数据源连接到目标

注意

为了展示此过程,本文使用 SQL Server 连接器和 AdventureWorks2019 示例数据库。 不同的连接器可能会有不同的体验,但本文展示了如何在受支持连接器的本机查询上启用查询折叠功能的基本原理。

连接到数据源时,请务必连接到要在其中执行本机查询的节点或级别。 在本文示例中,该节点是服务器中的数据库级别。

“连接设置”对话框的屏幕截图,此设置用于连接到 SQL Server 本地实例上的 AdventureWorks2019 数据库。

定义连接设置并提供连接的凭证后,将打开数据源的导航对话框。 导航对话框包含可连接到的所有可用对象。

在此列表中,需要选择运行本机查询的对象(也称为目标)。 在本示例,该对象是数据库级别。

在 Power Query 的导航器窗口中,选择并按住(或右键单击)导航器窗口中的数据库节点,然后选择“转换数据”选项。 选择此选项会创建数据库整体视图的新查询,这就是运行本机查询的目标。

选择数据的屏幕截图,其中显示了用户右键单击导航器中的数据库节点,并突出显示了“转换数据”选项。

查询进入 Power Query 编辑器后,“已应用的步骤”窗格中应仅显示“”步骤。 此步骤包含一个表,其中包含数据库中所有可用对象,类似于导航窗口中的显示方式。

屏幕截图,其中显示了仅包含源步骤的查询。

使用 Value.NativeQuery 函数

此过程的目标是执行以下 SQL 代码,并使用可折叠回源的 Power Query 应用更多转换。

SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'

第一步是定义正确的目标,在本例中即为运行 SQL 代码的数据库。 步骤具有正确的目标后,就可以选择该步骤(在本例中为“已应用的步骤中的”),然后选择编辑栏中的 fx 按钮添加自定义步骤。 在此示例中,将 Source 公式替换为以下公式:

Value.NativeQuery(Source, "SELECT DepartmentID, Name FROM HumanResources.Department WHERE GroupName = 'Research and Development'  ", null, [EnableFolding = true])

此公式最重要的组成部分是在函数的第四个参数中使用可选记录,该函数的 EnableFolding 记录字段设置为 true。

屏幕截图,其中显示了使用 Value.NativeQuery 函数和显式 SQL 查询的新自定义步骤公式。

注意

可以从官方文档文章中详细了解 Value.NativeQuery 函数。

输入公式后,将显示一条警告,要求为特定步骤启用本机查询。 选择“继续”评估此步骤。

此 SQL 语句会生成仅包含三行和两列的表。

屏幕截图,其中显示了针对目标数据库运行的本机查询结果。

测试查询折叠

若要测试查询的查询折叠,可以尝试将筛选器应用于任何列,并查看已应用步骤部分中的查询折叠指示器是否显示该步骤已折叠。 在这种情况下,可以筛选 DepartmentID 列,使其值不等于 2。

屏幕截图,其中显示了如何筛选“DepartmentID”列,使其值不等于 2。

添加此筛选器后,可以检查查询折叠指示器是否仍显示在此新步骤中发生了查询折叠。

筛选器步骤显示为折叠回“已应用的步骤”部分中的数据源。

要进一步验证要发送到数据源的查询,可以选择并按住(或右键单击)“筛选的行”步骤,然后选择“查看查询计划”选项,来查看该步骤的查询计划。

在查询计划视图中,可以看到名称为 Value.NativeQuery 的节点,该节点具有“查看详细信息”的超链接。 可以选择此超链接来查看要发送到 SQL Server 数据库的确切查询。

本机查询包裹在另一个 SELECT 语句中,可创建原始查询的子查询。 Power Query 会根据所使用的转换和所提供的本机查询,尽力创建最佳查询。

屏幕截图,其中显示了“筛选的行”步骤的查询计划。

提示

如果因为无法使用查询折叠而出现错误,建议尝试将步骤作为原始本机查询的子查询进行验证,从而检查是否存在任何语法或上下文冲突。