2016-07-20 32 views
0

Ich habe ein MS SQL unter Power Query laufen, um einige Daten in Excel zu bekommen.Power-Abfrage-Schleife von SQL dynamische Tabellenname

haben wir mehrere Projekte und Codes für sie, die aus einer anderen Abfrage kommt wie folgt:

let 
    Source = Projects[Code] 
in 
    Source 

Beispieldaten:

+------+ 
| code | 
+------+ 
| 2 | 
| 3 | 
| 6 | 
| 76 | 
| 77 | 
| 78 | 
| 79 | 
| 80 | 
| 81 | 
| 82 | 
| 83 | 
| 84 | 
| 85 | 
| 86 | 
| 87 | 
| 88 | 
| 89 | 
| 90 | 
| 91 | 
| 92 | 
| 93 | 
| 94 | 
| 95 | 
| 96 | 
| 97 | 
| 99 | 
| 100 | 
| 101 | 
| 102 | 
| 103 | 
+------+ 

, was ich tun möchte, ist, die folgenden Haupt Abfrage auszuführen für jeden Projektcode.

let 
    Source = Sql.Database("server", "logo", [Query="select '92' as [santiye] , stockref, DATE_ , AMOUNT, PRICE, total from LG_092_01_STLINE where cancelled = 0 and TRCODE =1"]), 
    #"Merged Queries" = Table.NestedJoin(Source,{"stockref"},Query2,{"stockref"},"NewColumn",JoinKind.LeftOuter), 
    #"Expanded NewColumn" = Table.ExpandTableColumn(#"Merged Queries", "NewColumn", {"CODE", "NAME"}, {"NewColumn.CODE", "NewColumn.NAME"}), 
    #"Removed Columns" = Table.RemoveColumns(#"Expanded NewColumn",{"stockref"}), 
    #"Reordered Columns" = Table.ReorderColumns(#"Removed Columns",{"NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"}), 
    #"Changed Type" = Table.TransformColumnTypes(#"Reordered Columns",{{"santiye", Int64.Type}}), 
    #"Merged Queries1" = Table.NestedJoin(#"Changed Type",{"santiye"},Projects,{"Code"},"NewColumn",JoinKind.LeftOuter), 
    #"Expanded NewColumn1" = Table.ExpandTableColumn(#"Merged Queries1", "NewColumn", {"Project Name"}, {"NewColumn.Project Name"}), 
    #"Renamed Columns" = Table.RenameColumns(#"Expanded NewColumn1",{{"NewColumn.Project Name", "Project Name"}}), 
    #"Reordered Columns1" = Table.ReorderColumns(#"Renamed Columns",{"santiye", "Project Name", "NewColumn.CODE", "NewColumn.NAME", "DATE_", "AMOUNT", "PRICE", "total"}) 
in 
    #"Reordered Columns1" 

Der Name der Tabelle in SQL soll dynamisch geändert werden und von der anderen Abfrage als eine Schleife übernommen werden und alle Daten auf einmal zusammenführen.

LG_092_01_STLINE = LG_ {code} _01_STLINE

[query = "select '92' as = [query =" select {code} als

i ähnliche Schleife in SQL-Abfrage gemacht, aber "exec()" funktioniert nicht bei Stromausfall.

while @cnt <= @maxrow 

begin 

select @firma = nr from (SELECT ROW_NUMBER() over (order by logicalref asc) as NUM, NR FROM L_CAPIFIRM ) nn where NUM = @cnt 
select @santiye = name from L_CAPIFIRM where NR = @firma 

set @firma = RIGHT('000'+CAST(@firma AS VARCHAR(3)),3) 
set @items = 'LG_' + convert(nvarchar(3),@firma) + '_ITEMS' 
set @stline = 'LG_' + convert(nvarchar(3),@firma) + '_01_STLINE' 

Antwort

0

Ich denke, es ist ganz einfach, dies zu tun, ohne eine Reihe von M-Code zu schreiben, da es der Liste der Spalten scheint in jeder Tabelle konsistent ist.

Zuerst würde ich eine Verbindung zu einer SQL-Datenbank auf diesem Server und wählen Sie eine beliebige Tabelle und Bearbeiten Sie die generierte Abfrage. Navigieren Sie dann zurück zum Schritt Quelle und klicken Sie auf die Zeile für Ihre Datenbank in der Spalte Daten. Dadurch erhalten Sie eine Liste der Tabellen in dieser Datenbank.

Filtern Sie die Liste auf die gewünschten Tabellen. Sie können dies mit jeder Art von Filter tun, oder für Ihr Szenario können Sie dies durch eine Zusammenführung mit dem Join Kind: Inner Join erreichen.

Klicken Sie nun auf die Schaltfläche Erweitern in der Spaltenüberschrift für die Spalte Daten. Sie haben jetzt jede Zeile aus den ausgewählten Tabellen zusammengefügt. Sie können diese Abfragen in Ihre Downstream-Transformationen einfügen.

Fertig in 4 Klicks ohne eine Codezeile. Power Query ist ein erstaunlich leistungsstarkes Datenintegrationswerkzeug.

Power Query hat eine erstaunliche Toleranz für Variationen im Schema der Tabellen - so etwas habe ich noch nie gesehen. Es geht im Allgemeinen mit Common-Sense-Ergebnissen wie das Zurückgeben von NULL für Tabellen mit fehlenden Spalten, übereinstimmenden Spalten nach Name (nicht Spaltenposition wie in einer SQL-UNION) und versuchen, Spalten mit widersprüchlichen Datentypen zu konvertieren. Es scheint, die Spaltenliste aus der ersten Tabelle zu generieren. Wie immer, vorsichtig testen.

+0

danke für Ihre Antwort, aber die Tabellen in der Datenbank hängt von der ersten Codeliste ab. Diese Liste kann Zeit zu Zeit ändern, so dass die Tabellen, die Union sollte auch ... Beispiel Tabellennamen in der Datenbank in Abhängigkeit von der Liste des Projektcodes ändert: 'LG_002_01_STLINE' ' LG_003_01_STLINE' 'LG_006_01_STLINE' ' LG_076_01_STLINE' etc ... und auch ich alle diese Tabellen in einer Tabelle in Power-Abfrage Union –

+0

Union dieses Szenario ist bereits in meiner Antwort oben, ref der Filter Schritt in der 3. Para. –

+0

Ich denke, mein Wissen Grenzen zu verstehen, Ihre Antwort ... ich werde sehr froh sein, wenn Sie einfach die Beispieldatei bearbeiten würde ich angehängt ... [Beispieldatei] (https://drive.google .com/open? id = 0BxC6zZIYn1SzMjltbEhDRUFvMG8) –