在 Power Query 中,可以定义本机查询,并针对数据源运行它。 使用本机数据库查询从数据库导入数据文章介绍了如何使用多个数据源执行此过程。 但是,通过使用该文章中所述的过程,您的查询不会利用后续查询步骤中的任何查询折叠。
本文演示了一种替代方法,用于使用 Value.NativeQuery 函数针对数据源创建本机查询,并使查询折叠机制保持活动状态,以便执行后续查询步骤。
支持的数据连接器
后续部分中介绍的方法适用于以下数据连接器:
从数据源连接到目标
注释
为了展示此过程,本文使用 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 语句生成一个仅包含三行和两列的表。
测试查询折叠
若要测试查询折叠功能,可以尝试将筛选器应用于你的任何列,并查看在应用步骤部分中的查询折叠指示器是否显示该步骤作为已折叠。 在这种情况下,可以筛选 DepartmentID 列,使其只显示不等于 2 的值。
添加此筛选器后,可以检查查询折叠指示器是否仍显示此新步骤中发生的查询折叠。
若要进一步验证要发送到数据源的查询,可以选择并按住“ 筛选的行 ”步骤,然后选择 “查看查询计划 ”选项来检查该步骤的查询计划。
在查询计划视图中,可以看到名称为 Value.NativeQuery 的节点具有 视图详细信息 超链接。 可以选择此超链接以查看发送到 SQL Server 数据库的确切查询。
本机查询嵌套在另一个 SELECT 语句中,以创建原始查询的子查询。 Power Query 努力根据使用的转换和提供的本机查询来创建最优查询。
小窍门
对于由于查询折叠无法进行而产生错误的情况,我们建议您尝试将您的步骤验证为本机查询的子查询,以检查是否存在语法或上下文冲突。