Power BI - 如何对长查询使用本机查询和查询折叠?

Power BI - How to use native query AND query folding for long queries?

我有一个从 SQL 服务器中提取的 Power BI 报告,由于提取大量数据,需要设置增量刷新。由于负载相当复杂(并且 PQuery 编辑器很乏味并且经常中断折叠),我需要使用 SQL 查询(在 PBI 中也称为“本机查询”),同时保留查询折叠(以便增量刷新工作).

我一直在用很好的...

Value.NativeQuery( Source, query, null, [EnableFolding = true])

...技巧 found here 让它工作。

但它似乎只有在本机查询完成得相当快时才有效。当我的 WHERE 子句只拉取今年的数据时,没有问题。当我删除 WHERE 子句中的日期过滤器(以免与增量刷新过滤器冲突),或者只是将年份推得更远时,似乎需要更长的时间导致 PBI 确定:

"We cannot fold on top of this native query. Please modify the native query or remove the 'EnableFolding' option."

上述错误在几分钟后出现在 PQuery 编辑器中,或者如果我尝试通过快速单击“关闭并应用”来“绕过”它。不幸的是,由于我们的数据结构不是很好,底层 SQL 可能已经达到了最好的水平。我已经尝试通过脚本中的 OPTION (FAST 1) 来欺骗 PBI 看似超时,但它无法足够快地拉动任何东西。

我现在卡住了。这似乎是一个 silly 障碍,因为我需要做的就是让第一个导入完成,显然它 can query fold for shorter loads。我该如何解决这个问题?

回想起来,我最初没有尝试这个很愚蠢,但即使 Value.NativeQuery() M 步骤不允许命令超时选项,您仍然可以将它放在前面的 Sql.Database() 手动一步,它继续前进。我还从我的查询中删除了一些常见的 table 表达式,这些表达式也破坏了查询折叠(不知道为什么,但是通过将我的复杂逻辑保存为 sql 服务器本身的视图并加入它很容易修复) .现在需要一段时间 运行,但不会超时!