我创建了一些相当复杂的 M 查询,并开始遇到一些严重的性能问题。我想知道是否与我有时如何组织我的代码有关。
我遇到的问题是:
1) Power Query 不断使用所有几个 CPU 内核,计算一些东西,即使我不等待结果。
2)在任务管理器中,我有时可以看到 Power Query 线程(“Microsoft.mashup.Container.NetFX40.exe”)几乎处于空闲状态,而 Excel.exe 正在使用一个内核的 100% 数十分钟 - 即使在大多数我在一些不包含几十个单元格的参数表中查找值。
3)有些步骤需要很长时间来计算,即使所涉及的操作是微不足道的。例如,我有一个从 Excel 表中提取的 10 个文本值的列表。当我“预览”它时,此列表显示为我的查询步骤之一。然后我想删除单个值,所以下一步 = 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],从另一个查询中引用了它,我的结果立即计算出来。不知道为什么。