Excel Get&转换(电源查询)M代码样式和性能

时间:2016-11-30 10:08:41

标签: excel performance powerquery m

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

1 个答案:

答案 0 :(得分:2)

  1. 计算预览。关闭自动预览生成。
  2. 在公式重表的情况下,我搞砸了类似的东西。
  3. 其余可能需要代码示例,尤其是您的最后一个案例。

    BTW,您的版本的电源查询(或Excel 2016)是最新的吗?