首页 > 解决方案 > 如何设置 Power Query 的最大运行时间/超时?

问题描述

有没有办法在 Power Query 中设置最大运行时间或超时因素,以便在指定时间段后查询将自行终止,无论它是否成功执行?

这对我来说很重要,因为我在我的工作场所构建了各种查询,这些查询通常运行良好(就像我每天都在运行它几个月甚至几年都没有问题)但偶尔,它们会挂起(可能是因为与另一个进程发生冲突)那个时候,当服务器负载很重时)并无限期地在服务器上发出读取请求- 有一次 IT 告诉我,他们在几个小时内将超过 700 万次读取从我的机器记录到数据库中。在某些情况下,这些会导致服务器崩溃,从而导致大量停机。

所以我想知道是否有任何设置,或者我可以在查询本身中构建的任何东西,以确保它在一段时间后终止。

我精通 M Power Query 语言。

谢谢。

[更新 1] 感谢 Alexis 在对连接进行编码时提供以下有关设置 CommandTimeout 值的建议。这是一个很好的指针。

我会尝试一下,做一些测试并报告它是否最终解决了问题。

但与此同时,我对 Microsoft 的 Power Query 文档进行了一些挖掘,发现 CommandTimeout 参数本身已经内置了 10 分钟的默认值,所以理论上即使我们没有指定该参数,查询应该已经终止了。但事实并非如此。它运行了几个小时。

我想知道这是否是 Excel 版本的 Power Query 的错误?因为我也确实在 Power BI 中使用了 Power Query,而且我还没有看到它崩溃和挂起(诚然,我使用 Excel 版本的频率比我使用 Power BI 的频率高)。

但是,如果有人对此问题的潜在修复有任何其他建议,将不胜感激。谢谢。

标签: exceltimeoutpowerquerym

解决方案


我在这里找到了一个相当不错的答案。以下是该论坛上发布的步骤:

  1. 在报表视图中打开 Power BI Desktop 文件
  2. 单击“编辑查询”的箭头(在外部数据部分)
  3. 将出现一个下拉菜单 - 然后单击“数据源设置”
  4. 将出现数据源设置弹出窗口
  5. 点击“更改来源...”
  6. 将出现另一个弹出窗口
  7. 单击高级选项(弹出窗口中将出现一个下拉列表)
  8. “以分钟为单位的命令超时(可选)”将是第一个选项
  9. 输入一个值 - 我选择输入 60 分钟,但可以随意输入任何值
  10. 然后应用查询更改并等待刷新完成

这是为 Power BI 编写的,但它也适用于 Excel 查询编辑器。总之,

  1. 打开查询编辑器
  2. 选择文件 > 选项和设置 > 数据源设置
  3. 选择您的来源并单击更改来源...
  4. 展开高级选项并输入命令超时值

当我尝试连接到 SQL 服务器时,它CommandTimeout在我的 Source 步骤中添加了一个参数。您可以只使用此代码并跳过所有点击:

= Sql.Database("server", "DB", [CommandTimeout=#duration(0, 0, 15, 0)])

如果您没有连接到 SQL 服务器,则通过数据源设置可能会更好,因为参数可能不同。例如

= Web.Page(Web.Contents("URL", [Timeout=#duration(0,0,15,0)]))

或者

= OData.Feed("http://some.url/service.svc/", null, [Timeout=#duration(0, 0, 15, 0)])

推荐阅读