2015-09-01 39 views
2

我在Excel中使用Power Query來引用同一工作簿中的表。我想選擇該表格中的特定列。我知道可以通過將表加載到Power Query中然後選擇我想要使用的列來完成。結果查詢是:Excel中的電源查詢以從列中選擇特定單元格

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"` 

所以,這裏是我的問題/問題:

我覺得這種方式是首先拉動整個表到電源的查詢,然後從那裏剝離下來。我想要做的是將源表定義爲「Legend_Data_Merged」表,但在同一操作中選擇從該表中提取哪些列。這樣,它永遠不需要將整個表加載到Power Query中。原因是表格本身大約有120列,而我只需要三列,並且我有大約20個這樣的相似查詢,它開始佔用內存。我的邏輯錯了嗎?如果不是,任何人都有一個想法是什麼問題?

是否可能有方法來定義源操作的[content]部分中的列?

謝謝。

回答

0

這可能是Excel或Power Query中的問題。你看到多少內存使用的excel.exe和Microsoft.Mashup.Container.NetFX40.exe進程?

直接從[Content]中刪除列的唯一方法是修改Excel表的實際數據。你可以嘗試一下,看看它是否有所作爲,但Power Query通常只會加載它所需的列。

如果您的查詢使用了大量的內存,您可能會獲得性能,以更高效的格式保存數據(我會嘗試使用CSV)。無論如何,請嘗試關閉「加載到工作表」,然後加載到數據模型。

1

這可能是一個非常簡單的嘗試,但爲什麼不添加工作表「DataTransfer」,在其中只設置對所需列的引用並使用電源查詢讀取此小表?

如果您的列靠得很近,您還可以設置一個命名範圍,並使用powerquery只讀該範圍。

但無論如何,當工作簿打開時,您的大表已經在內存中。使用powerquery讀取表格並選擇三列時,不應該有太多內存分配。

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 

當查看使用快速探查原始SQL它會在一條語句來完成,其中

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

PowerBi和電源查詢也將嘗試導入時,這一建議現在出現一個錯誤/警告消息大量的專欄。

相關問題