2016-11-30 60 views
1

我创建了一些相当复杂的M查询,并开始遇到一些严重的性能问题。我想知道如果我有时如何组织我的代码。Excel获取和转换(电源查询)M代码风格和性能

我已经遇到的问题是:

1)电源查询经常使用所有几个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],从另一个查询中引用它,我的结果立即计算出来。不知道为什么。

+0

你正在使用什么版本的Power Query?某些CPU问题可能是由于背景分析造成的,您可以在“当前工作簿”下的“选项”对话框中关闭文档数据加载|允许数据预览在后台下载。 –

回答

1
  1. 它计算预览。关闭自动预览生成。
  2. 在公式繁重的表格中,我搞砸了类似的东西。

其余的可能需要代码示例,特别是您的最后一种情况。

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

+1

谢谢,预览是我的大部分问题。另外,这[链接](https://blog.crossjoin.co.uk/2016/11/20/referenced-queries-and-caching-in-power-bi-and-power-query/)需要一些焦点阅读,但帮助我了解如何优化查询。 – alazyworkaholic

+0

@alazyworkaholic谢谢,这是很多有用的信息! – Eugene