2016-01-22 24 views
1

從數據庫表(如SQL Server)導入數據時的默認行爲是引入所有列,然後選擇要刪除的列。電源查詢 - 從表中選擇列而不是以後刪除

有沒有辦法做相反的事情?即從表中選擇你想要的列?最好不使用Native SQL解決方案。

L:

let 
    db = Sql.Databases("sqlserver.database.url"){[Name="DatabaseName"]}[Data], 
    Sales_vDimCustomer = db{[Schema="Sales",Item="vDimCustomer"]}[Data], 
    remove_columns = Table.RemoveColumns(Sales_vDimCustomer,{"Key", "Code","Column1","Column2","Column3","Column4","Column5","Column6","Column7","Column8","Column9","Column10"}) 
in 
    remove_columns 

的片段上方示出的連接,並隨後去除。

相比原生SQL的方式方法:

= Sql.Database("sqlserver.database.url", "DatabaseName", [Query=" 
    SELECT Name, 
      Representative, 
      Status, 
      DateLastModified, 
      UserLastModified, 
      ExtractionDate 
    FROM Sales.vDimCustomer 
"]) 

我不能看到的步驟,希望也許}[Data],值多少文件,我可以劫持該字段指定從數據字段。

任何想法都會很棒! :)

我的第一個擔心是,當它被編譯爲SQL時,它會作爲兩個查詢發送(如在ExpressProfiler中觀察)。

第一個查詢刪除選定的列,第二個查詢選擇所有列。

我的第二個問題是,如果一個列被添加到數據庫或從數據庫中刪除,那麼它可能會導致我的報告崩潰(Excel表中的其他列會將您的結構化表語言公式跳轉到錯誤的列)。這不是使用Native SQL的問題,因爲它不會選擇新列,並且如果刪除了列,這實際上會導致崩潰,這是我想知道的。

回答

2

哎喲,這實際上很容易,我有另一種想法和看看docs

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。

+1

'Table.SelectColumns'是正確的解決方案!如果你使用預覽編輯器來多選你想要的列並右鍵單擊,Remove Other Columns操作將生成對'Table.SelectColumns'的調用:) –

+0

呃謝謝你的提示@CarlWalsh! –

相關問題