如何停止查询完整原始数据集的电源查询

时间:2018-02-05 20:57:46

标签: excel powerquery

我有一个连接到访问数据库的excel文件。我已经通过Power Query创建了一个查询,它只是将目标表放入文件中并对其进行了一些小的处理。我不会将其加载到工作表,但仅保持连接。

然后我有许多其他查询链接到第一个查询中创建的表。

在其中一个链接查询中,我应用了各种过滤器来排除某些产品,客户等。这会将第一个查询中原始表中的400,000条记录减少到大约227,000条记录。然后我将此表加载到工作表中进行一些分析。

最后,我有几个查询查看227,000记录表。但是,我注意到当我刷新这些查询并在右侧窗格中观察进度时,它们仍然会查看400,000条记录,就像它们正在查看原始表一样。

有没有办法阻止这种情况发生,期望这样做有助于加快引用本身已被过滤的数据集的查询?

或者,有更好的方法来做我正在做的事情吗?

由于

1 个答案:

答案 0 :(得分:0)

首先:您如何刷新查询?如果一次执行一次,那么是的,它们都是独立的。但是,在对所有查询均禁用“快速数据加载”的工作簿上使用Excel 2016时,我发现刷新全部 缓存并与以下对象共享查询结果下游查询!

如果失败,您可以尝试以下操作:

  1. 将使227,000行的表移动到称为“刷新优先”的组中的查询
  2. 将光标置于227,000行表格中,然后点击数据-获取和 转换-从表格
  3. 更改所有查询以从此新查询而不是源中提取。
  4. 创建另一个称为“刷新第二”的组,其中包含每个查询
    • 位于您在步骤2中创建的查询的下游,
    • 将数据加载到工作簿
  5. 将所有加载到工作簿的剩余查询移动到“先刷新”,“再刷新”或其他一些组中。 (顺便说一句:我通常也有一个“连接”组,该组包含所有不将数据加载到工作簿的查询。)

不幸的是,一旦您执行了此操作,就必须两次进行“全部刷新”,以确保所有源更改都被完全传播,因为将使用这227,000行,然后才从40万如果您愿意忍受并手动刷新,那么一切就绪!您可以右键单击并刷新查询组。只需右击并刷新第一组,然后等待,然后右键单击并刷新第二组。

对于更愚蠢的刷新方式...您可以 尝试使用VBA自动执行,但查询通常在后台刷新;在完成“刷新优先”组中的所有查询之前,需要花费一些额外的工作来确保第二组查询没有启动。

或者... 通过以下操作,我学会了在逼真度和开发速度之间取得平衡:

  1. 创建一个名为“ ProductionMode”的查询,如果要获取全部数据,则返回true,如果您只是测试每个查询,则返回false。如果您愿意,可以只是一个参数。

  2. 创建一个名为“ 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
    
  3. 对于加载到表中的每个慢查询(“ YourQueryName”),

    1. 创建“ YourQueryName Cached”作为直接从结果表中提取的查询。
    2. 将“ modeYourQueryName”创建为定义为fModeSensitiveQuery("YourQueryName")的查询
    3. 将所有使用YourQueryName的查询更改为使用modeYourQueryName。

现在,您可以将ProductionMode翻转到true并完全传播更改,或者将ProductionMode翻转到false可以快速测试小的更改;如果您仅刷新一个查询,则不会重新计算整个上游以对其进行测试!另外,我不知道为什么,但是在执行 Refresh All (刷新全部)时,我很确定,即使ProductionMode为true

此方法有三个我需要注意的警告:

  • 无论何时添加,删除,重命名或以其他方式键入“ YourQueryName”查询的结果列,请确保更新“ YourQueryName Cached”查询。最好还是删除并重新创建它们。您可以这样做是因为
  • Power-Query无法将您的“ YourQueryName”和“ YourQueryName Cached”查询识别为“ modeYourQueryName”的依赖项。查询依赖关系图不太正确,您将能够删除“ YourQueryName”或“ YourQueryName Cached”而无需Power Query阻止您,并且重命名YourQueryName会破坏事情,而不是Power Query会相应地自动更改所有其他查询。
  • 虽然速度更快,但用户体验也很艰难! UI变得有些生涩,因为(而且我完全猜到了这里)这项技术似乎导致更多查询同时完成,从而使Excel同时充满了太多重新绘制请求。 (实际上,这不是问题,但可以确定当您不期望它时,它们看起来像一个!)