首页 > 解决方案 > 使用单元格值作为参数对 SQL 进行 Powerquery 非常慢

问题描述

设想:


运行 XL 表,使用单个 powerquery 从 SQL 服务器检索数据。生成的数据集用于两个子查询。然后将所有三个数据集加载到 XL 表中的数据透视表中。

客观的:


使用从 XL 表中检索到的 2 个参数发送查询,从而减小返回数据集的大小。将查询折叠回 SQL 服务器,而不是在 PQ 中过滤后检索。

问题描述:


如果我对主查询使用以下配置:

let
    dbQuery = "SELECT * FROM dbo.somequery",
    Source = Sql.Database("<server>", "<database>", [Query=dbQuery])
in
    Source

这工作正常,几乎立即返回大约 6500 行。

以下函数在 PQ 中定义为“GetRange”以检索单元格值:

(rangeName) => 
    Excel.CurrentWorkbook(){[Name=rangeName]}[Content]{0}[Column1]

使用以下语法检索两个参数:

= GetRange("<named cell>")

如果我现在将 dbQuery 更改为:

dbQuery = "SELECT * FROM dbo.xlPAS_PivotOutput 
           WHERE parameter1=" & Text.From(parameter1) & " and parameter2=" & Text.From(parameter2),

查询确实编译并返回结果,但 Excel PQ 实际返回值大约需要 1 到 2 分钟?出于某种原因,简单地检索 2 个单元格值并将它们用作输入参数似乎需要付出巨大的努力?

标签: excelparameterspowerquery

解决方案


我一直在尝试调试一个查询,该查询从我从电子表格中的单元格中提取的 URL 中提取数据。它运行得非常慢,而在查询中明确使用 URL 运行良好。我一直在尝试简化电子表格以排除故障,直到我有一个查询只是从一个空电子表格中的单个单元格中选择文本值,这仍然很慢。

名称管理器显示有几个无效的名称引用,其中一个引用了我无法访问的另一个位置的另一个 Excel 文件中的范围。删除这些过时的名称似乎已经解决了这个问题。

电子表格中未使用的名称引用导致此类问题的事实绝对是 Excel 错误,但至少知道这一点,搜索无效的名称引用并删除它们似乎可以解决问题。


推荐阅读