我创建了一些相当复杂的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有时会变得无响应数分钟。仍然可以右键单击左侧的查询以进入高级编辑器,并单击右上角的红色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],从其他查询引用它,我的结果立即计算出来。不知道为什么。