Excel 获取和转换 (Power Query) M 代码风格和性能
Excel Get & Transform (Power Query) M Code Style and Performance
我创建了一些相当复杂的 M 查询,并开始 运行 遇到一些严重的性能问题。我想知道是否与我有时组织代码的方式有关。
我遇到的问题是:
1) Power Query 不断使用所有几个 CPU 核心,计算 一些东西,即使我没有在等待结果。
2) 在任务管理器中,我有时可以看到 Power Query 线程 ("Microsoft.mashup.Container.NetFX40.exe") 几乎处于空闲状态,而 Excel.exe 正在使用一个内核的 100% 数十分钟 - 即使我最多只在几个参数 table 中查看值,这些参数不包含超过几十个单元格。
3) 即使涉及的操作微不足道,某些步骤的计算时间也非常长。例如,我有一个从 Excel table 中获取的 10 个文本值的列表。当我 'preview' 它时,此列表显示为我的查询步骤之一。然后我想移除单个值,所以下一步 = 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 版本(或 Excel 2016)是最新的吗?
我创建了一些相当复杂的 M 查询,并开始 运行 遇到一些严重的性能问题。我想知道是否与我有时组织代码的方式有关。
我遇到的问题是:
1) Power Query 不断使用所有几个 CPU 核心,计算 一些东西,即使我没有在等待结果。
2) 在任务管理器中,我有时可以看到 Power Query 线程 ("Microsoft.mashup.Container.NetFX40.exe") 几乎处于空闲状态,而 Excel.exe 正在使用一个内核的 100% 数十分钟 - 即使我最多只在几个参数 table 中查看值,这些参数不包含超过几十个单元格。
3) 即使涉及的操作微不足道,某些步骤的计算时间也非常长。例如,我有一个从 Excel table 中获取的 10 个文本值的列表。当我 'preview' 它时,此列表显示为我的查询步骤之一。然后我想移除单个值,所以下一步 = 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 版本(或 Excel 2016)是最新的吗?