Excel中的Power Query以从列中选择特定单元格

时间:2015-09-01 07:02:05

标签: excel powerquery m

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

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" table,但选择在同一操作中从该表中提取哪些列。这样,它就不必将整个表加载到Power Query中。原因是表本身大约有120列,我只需要三列,我有大约20个类似的查询,它开始占用内存。我的逻辑在这里错了吗?如果没有,任何人都知道查询会是什么?

是否可能有一种方法来定义源操作的[content]部分中的列?

感谢。

3 个答案:

答案 0 :(得分:1)

这可能是一个非常简单的尝试,但为什么不添加一个工作表“DataTransfer”,您只需要设置对所需列的引用,并使用幂查询读取这个小表?

如果您的列靠得很近,您还可以设置命名范围,并使用powerquery只读取此范围。

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

答案 1 :(得分:0)

Excel或Power Query可能存在一些问题。您看到excel.exe和Microsoft.Mashup.Container.NetFX40.exe进程使用了​​多少内存?

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

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

答案 2 :(得分:0)

您可以参考我的问题并回答here

您要做的是使用Table.SelectColumns方法而不是删除。

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现在还会在尝试导入大量列时显示带有此建议的错误/警告消息。