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

3

我创建了一些相当复杂的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],从其他查询引用它,我的结果立即计算出来。不知道为什么。


你使用的Power Query版本是什么?一些CPU问题可能是由于后台分析造成的,您可以在“选项”对话框中为文档关闭此功能,在“当前工作簿|数据加载|允许在后台下载数据预览”下进行设置。 - Alejandro Lopez-Lago - MSFT
1个回答

3
  1. 它计算预览。关闭自动预览生成。
  2. 在公式较多的表格中,我曾经尝试过类似的事情。

其他问题可能需要代码示例,特别是最后一个案例。

顺便问一下,你的Power Query版本(或Excel 2016)是否是最新的?


1
谢谢,预览是我遇到的大部分问题。此外,这个链接需要一些专注去阅读,但帮助我理解如何优化查询。 - alazyworkaholic
1
@alazyworkaholic 谢谢,这是很有用的信息! - Eugene

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接