2016-03-16 31 views
0

基本上我想使用Power Query檢索符合我的子句條件的數據行。構建SQL Where子句在Power Query中抽取數據

我的電子表格中有400行查詢值。 每一行代表例如1個查找代碼,代碼AAA1,AAB2等

所以可以說我有一個SELECT語句,我想通過上面的代碼,所以我最終的SQL語句會像

構建where子句
select * from MyTable where Conditions in ('AA1', 'AAB2') 

所以到目前爲止,我有這個

let 
Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content], 
#"Changed Type" = Table.TransformColumnTypes(Source,{{"Form ID",  
Int64.Type}}), 
test = Sql.Database("myserver", "myDB", [Query="SELECT * FROM myTable where" & #"Changed Type" & "])" 

在 測試

顯然,這d無論如何,這就是我的pseduo場景。

請你能建議做什麼? 謝謝 Peddie

+0

那麼發生了什麼事?它運行但沒有數據?錯誤了嗎? – dfundako

+0

實際上,而不是「應該在哪裏」,但即使如此,它也會引發錯誤。 – PeddiePooh

+0

而錯誤是? – dfundako

回答

2

我會創建一個基於Excel表的「查詢」Power Query。我將「加載到」屬性設置爲「僅創建連接」。

然後,我將通過使用導航器連接到SQL服務器來選擇「MyTable」來啓動主查詢。然後,我會向主查詢添加合併步驟,以加入「查找」查詢,將「條件」列與「查找」代碼相匹配。我會將連接類型設置爲「內部」。合併屬性窗口將以可視方式顯示您選擇的2列實際上是否包含匹配數據。

這種方法不需要任何編碼,並且更容易構建,擴展和維護。

1

Mike Honey的連接最適合您的問題,但如果您在where子句中發現自己需要其他邏輯,則可以使用更一般的解決方案。


通常電源查詢只在一個平等的表達產生排過濾器,但你可以把你的Table.SelectRows過濾器所需的任何代碼,就像each List.Contains({"AA1", "AAB2"}, [Conditions])

因此,對於你的表,您的查詢看起來是這樣的:

let 
    Source = Excel.CurrentWorkbook(){[Name="Table5"]}[Content], 
    #"Changed Type" = Table.TransformColumnTypes(Source,{{"Form ID", Int64.Type}}), 
    test = Sql.Database("myserver", "myDB"), 
    yourTable = test{[Name="myTable"]}[Data], 
    filtered = Table.SelectRows(yourTable, each List.Contains(#"Changed Type"[Form ID], [Conditions])) 
in 
    filtered 

主要缺點使用庫函數是Table.SelectRows只知道如何生成SQL WHERE子句爲特定的表達模式,所以該行可能過濾器運行下載整個表後,在您的機器上,而不是讓Sql Server運行過濾器。