Excel 获取和转换 (Power Query) M 代码风格和性能

Excel Get & Transform (Power Query) M Code Style and Performance

我创建了一些相当复杂的 M 查询,并开始 运行 遇到一些严重的性能问题。我想知道是否与我有时组织代码的方式有关。

我遇到的问题是:

1) Power Query 不断使用所有几个 CPU 核心,计算 一些东西,即使我没有在等待结果。

2) 在任务管理器中,我有时可以看到 Power Query 线程 ("Microsoft.mashup.Container.NetFX40.exe") 几乎处于空闲状态,而 Excel.exe 正在使用一个内核的 100% 数十分钟 - 即使我最多只在几个参数 table 中查看值,这些参数不包含超过几十个单元格。

3) 即使涉及的操作微不足道,某些步骤的计算时间也非常长。例如,我有一个从 Excel table 中获取的 10 个文本值的列表。当我 'preview' 它时,此列表显示为我的查询步骤之一。然后我想移除单个值,所以下一步 = List.RemoveItems(myList, {"val"})。它在 30 分钟后没有计算,尽管我可以看到列表已在上一步中正确加载。

4) UI 有时在更改代码后几分钟内没有响应。仍然可以在左侧的Queries上右击进入高级编辑器,点击右上角的红色X选择保留更改,其余的都没有反应。没有变灰,只是没有反应。

无论如何,我只是想问问有没有人遇到过类似的问题,有没有人知道是什么触发了 PQ 中特别糟糕的性能。

我会经常使用类似于以下模式的东西来减少查询总数,同时仍然能够轻松检查各个步骤:

let
    ThisWB = Excel.CurrentWorkbook(),
    CfgTbl = ThisWB{[Name="myCfgTbl"]}[Content],
    x = aFn(CfgTbl),
    y = bFn(CfgTbl),
    output = [ThisWB=ThisWB, CfgTbl=CfgTbl, x=x, y=y]
in
    output

这可能会导致任何问题吗?只是想这可能是因为在等待一个简单的函数结果很长时间之后,我创建了一个新查询 = Excel.CurrentWorkbook(){[Name="myCfgTbl"]}[Content],引用了它来自另一个查询,我的结果立即计算出来。不知道为什么。

  1. 它计算预览。关闭自动预览生成。
  2. 在使用大量公式的表格的情况下,我搞砸了这样的事情。

其余的可能需要代码示例,尤其是您的最后一个案例。

顺便说一句,您的 power query 版本(或 Excel 2016)是最新的吗?