在Excel中启用查询以从列中select特定单元格

我在Excel中使用Power Query来引用同一工作簿中的表。 我想select该表中的特定列。 我知道可以通过将表加载到Power Query中然后select我想要使用的列来完成。 结果查询是:

let Source = Excel.CurrentWorkbook(){[Name="Legend_Data_Merged"]}[Content], #"Removed Other Columns" = Table.SelectColumns( Source, { "Observation number", "First Sales Offer - Products", "Middle Sales Offer(s) - Products", "Last Sales Offer - Products" } ) in #"Removed Other Columns"` 

所以,这是我的问题/问题:

我想这种方法首先将整个表格拖到Power Query中,然后从那里剥离下来。 我想要做的是将源表定义为“Legend_Data_Merged”表,但在同一操作中select从该表中提取哪些列。 这样,就不必将整个表加载到Power Query中。 原因是表格本身大约有120列,而我只需要三列,而我也有大约20个类似的查询,并开始记忆。 我的逻辑错了吗? 如果不是,任何人都有一个想法是什么问题?

有没有可能有一种方法来定义源操作的[内容]部分中的列?

谢谢。

这可能是一个非常简单的尝试,但为什么不添加一个工作表“DataTransfer”,你只需要设置你需要的列的引用,然后用power query读这个小表呢?

如果你的列靠近在一起,你也可以设置一个命名的范围,并用powerquery只读这个范围。

但无论如何,当工作簿打开时,你的大表已经在内存中。 当用powerquery读取表格并select三列时,不应该有太多的内存分配。

Excel或Power Query中可能存在一些问题。 你看到多less内存使用的excel.exe和Microsoft.Mashup.Container.NetFX40.exe进程?

直接从[Content]删除列的唯一方法是修改Excel表的实际数据。 你可以尝试一下,看看它是否有所作为,但Power Query通常只会加载所需的列。

如果您的查询使用大量内存,则可能会以更高效的格式保存数据(我会尝试使用CSV)。 在任何情况下,尝试closures“加载到工作表”,而只是加载到数据模型。

你可以参考我的问题和答案在这里 。

你将要做的是使用Table.SelectColumns而不是Remove。

 let db = Sql.Databases("sqlserver.database.url"){[Name="DatabaseName"]}[Data], Sales_vDimCustomer = Table.SelectColumns( db{[Schema="Sales",Item="vDimCustomer"]}[Data], { "Name", "Representative", "Status", "DateLastModified", "UserLastModified", "ExtractionDate" } ) in Sales_vDimCustomer 

当使用Express Profiler查看原始的sql时,它将在一个语句中完成

 SELECT $Table.Name, $Table.Representative, $Table.Status, $Table.DateLastModified, $Table.UserLastModified, $Table.ExtractionDate FROM Sales.vDimCustomer as $Table 

在尝试导入大量列时,PowerBi和Power Query现在也会显示一条错误/警告消息,并带有此build议。