我有一个连接到访问数据库的excel文件。我已经通过Power Query创建了一个查询,它只是将目标表放入文件中并对其进行了一些小的处理。我不会将其加载到工作表,但仅保持连接。
然后我有许多其他查询链接到第一个查询中创建的表。
在其中一个链接查询中,我应用了各种过滤器来排除某些产品,客户等。这会将第一个查询中原始表中的400,000条记录减少到大约227,000条记录。然后我将此表加载到工作表中进行一些分析。
最后,我有几个查询查看227,000记录表。但是,我注意到当我刷新这些查询并在右侧窗格中观察进度时,它们仍然会查看400,000条记录,就像它们正在查看原始表一样。
有没有办法阻止这种情况发生,期望这样做有助于加快引用本身已被过滤的数据集的查询?
或者,有更好的方法来做我正在做的事情吗?
由于
答案 0 :(得分:0)
首先:您如何刷新查询?如果一次执行一次,那么是的,它们都是独立的。但是,在对所有查询均禁用“快速数据加载”的工作簿上使用Excel 2016时,我发现刷新全部 缓存并与以下对象共享查询结果下游查询!
如果失败,您可以尝试以下操作:
不幸的是,一旦您执行了此操作,就必须两次进行“全部刷新”,以确保所有源更改都被完全传播,因为将使用这227,000行,然后才从40万如果您愿意忍受并手动刷新,那么一切就绪!您可以右键单击并刷新查询组。只需右击并刷新第一组,然后等待,然后右键单击并刷新第二组。
对于更愚蠢的刷新方式...您可以 尝试使用VBA自动执行,但查询通常在后台刷新;在完成“刷新优先”组中的所有查询之前,需要花费一些额外的工作来确保第二组查询没有启动。
或者... 通过以下操作,我学会了在逼真度和开发速度之间取得平衡:
创建一个名为“ ProductionMode”的查询,如果要获取全部数据,则返回true
,如果您只是测试每个查询,则返回false
。如果您愿意,可以只是一个参数。
创建一个名为“ fModeSensitiveQuery”的查询,定义为
let
// Get this once per time this function is retrived and cached, OUTSIDE of what happens each time the returned function is executed
queryNameSuffix = if ProductionMode then
""
else
" Cached",
// We can now use the pre-rendered queryNameSuffix value as a private variable that's not computed each time it's called
returnedFunction = (queryName as text) as table => Expression.Evaluate(
Expression.Identifier(
queryName & queryNameSuffix
),
#shared
)
in
returnedFunction
对于加载到表中的每个慢查询(“ YourQueryName”),
fModeSensitiveQuery("YourQueryName")
的查询现在,您可以将ProductionMode翻转到true
并完全传播更改,或者将ProductionMode翻转到false
可以快速测试小的更改;如果您仅刷新一个查询,则不会重新计算整个上游以对其进行测试!另外,我不知道为什么,但是在执行 Refresh All (刷新全部)时,我很确定,即使ProductionMode为true
!
此方法有三个我需要注意的警告: