【问题标题】:Excel Get & Transform (Power Query) M Code Style and PerformanceExcel Get & Transform (Power Query) M 代码样式和性能
【发布时间】:2016-11-30 10:08:41
【问题描述】:

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

【问题讨论】:

  • 您使用的是哪个版本的 Power Query?一些 CPU 问题可能是由于背景分析,您可以在当前工作簿 | 下的选项对话框中为文档关闭它。数据加载 |允许在后台下载数据预览。

标签: excel performance powerquery m


【解决方案1】:
  1. 它计算预览。关闭自动预览生成。
  2. 在公式繁重的表格中,我搞砸了类似的事情。

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

顺便说一句,您的电源查询(或 Excel 2016)版本是最新的吗?

【讨论】:

  • 谢谢,预览是我最关心的问题。此外,这个link 需要重点阅读,但有助于我了解如何优化查询。
  • @alazyworkaholic 谢谢,这是很多有用的信息!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-13
相关资源
最近更新 更多