Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Power Query Tabellenname

Forumthread: Power Query Tabellenname

Power Query Tabellenname
24.06.2022 07:42:24
Heinz
Guten Morgen liebe Excellenten,
ich versuche mich gerade mit den Möglichkeiten von Power Query vertraut zu machen
und hänge gerade an folgendem Problem.
Ich habe eine Excel-Datei mit 10 identisch aufgebauten Tabellen in jeweils eigenen Tabellenblättern.
Jeweils 14 Spalten
Ich habe die Tabellen mit STRG-T in "intelligente" Tabellen umgewandelt,
die damit Tabelle1, Tabelle2, Tabelle3 usw. heißen.
Dann hab ich die Daten in PQ eingelesen und kann sie anfügen.
Das passt alles. Ich habe eine große Tabelle mit 14 Spalten, die Daten
stehen untereinander.
Ich brauche aber noch eine Spalte mit der Angabe, aus welcher Tabelle
die Daten stammen, also eine Spalte, in der der Quellname stehe
(in meinem Beispiel Tabelle1 bis Tabelle 10).
Wie gehe ich vor?
Ich wünsche allen Excellenten schon mal einen schönen Tag.
Heinz
Anzeige

22
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Power Query Tabellenname
24.06.2022 09:41:13
ChrisL
Hi Heinz
siehe...
https://www.herber.de/bbs/user/153743.xlsx
cu
Chris

let
Quelle = Excel.CurrentWorkbook(),
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name]  "Abfrage1")),
#"Erweiterte Content" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Content", {"Artikel", "Wert"}, {"Content.Artikel", "Content.Wert"})
in
#"Erweiterte Content"

Anzeige
AW: Power Query Tabellenname
24.06.2022 10:31:01
Luschi
Hallo ChrisL,
Deine Idee ist wirklich gut, bei 14 Spalten habe ich das aber ein bisschen dynamisiert.
https://www.herber.de/bbs/user/153744.xlsx
Gruß von Luschi
aus klein-Paris
AW: kleiner Zusatz...
24.06.2022 10:45:45
Luschi
Hallo PQ-Fan's,
so bekommt man den Datenherkunftsnamen in die 1. Spalte:

let
Quelle = Excel.CurrentWorkbook(),
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name]  "HauptAbfrage")),
Spaltennamen = Table.ColumnNames(#"Gefilterte Zeilen"{0}[Content]),
#"Erweiterte Content" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Content", Spaltennamen),
SpaltenNamen_Add= List.InsertRange(Spaltennamen,0,{"Name"}),
#"Neu angeordnete Spalten" = Table.ReorderColumns(#"Erweiterte Content", SpaltenNamen_Add)
in
#"Neu angeordnete Spalten"
Gruß von Luschi
aus klein-Paris
Anzeige
AW: ... leider so noch nicht asureichend, denn ...
24.06.2022 11:05:15
neopa
Hallo Luschi,
... Deine Lösung setzt voraus, dass alle Tabellen die gleiche Spaltenanzahl hat, wie die der ersten Tabelle. Das sollte doch auch noch lösbar sein, oder?
Gruß Werner
.. , - ...
AW: ... leider so noch nicht asureichend, denn ...
24.06.2022 12:30:14
Heinz
An alle, die hier im Thread waren.
Es funkt: Da die Spaltenanzahl in den Tabellen identisch sind, stellt sich das
zuletzt geäußerte Problem für mich (gerade) nicht.
Funkt Super.
Danke
Heinz
Anzeige
AW: schön für Dich, doch ...
24.06.2022 12:42:04
neopa
Hallo Heinz und Luschi,
... mich interessiert nun aber doch eine Lösung für das von mir zusätzlich aufgezeigte Problem.
Momentan würde ich diese mir so vorstellen. Von jeder Tabelle eine Spaltenüberschriftsliste erstellen, diese zusammenfügen, Duplikate löschen und dessen Ergebnis als eine Dummytabelle ohne Daten als erste Tabelle zur Verfügung stellen und danach die Daten alle anderen Tabellen dieser hinzufügen. Bei dessen Umsetzung hapert allerdings noch und vielleicht kann Luschi oder Chris einen funktionierenden M-Code dafür bereitstellen.
Gruß Werner
.. , - ...
Anzeige
AW: ... leider so noch nicht asureichend, denn ...
24.06.2022 14:44:32
ChrisL
Hi all
Hier ein Vorschlag für die Dynamik:

let
Quelle = Excel.CurrentWorkbook(),
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name]  "Abfrage1")),
TabelleTemporaer = Table.AddColumn(#"Gefilterte Zeilen", "Hilfsspalte", each Table.Schema([Content])[Name]),
ListeSpaltentitel = List.Distinct(Table.ExpandListColumn(TabelleTemporaer, "Hilfsspalte")[Hilfsspalte]),
#"Erweiterte Content" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Content", ListeSpaltentitel)
in
#"Erweiterte Content"
cu
Chris
Anzeige
AW: ... leider so noch nicht asureichend, denn ...
25.06.2022 09:22:27
Heinz
Hallo Liebe Excellenten,
ich habe da noch ein Problem festgestellt.
Mit "speichern und laden" wird das Ergebnis, also die "Abfrage" in Excel übertragen
und automatisch als Tabelle formatiert.
Wenn ich dann PQ noch einmal aufrufe, wird auch
die Abfrage geladen und an meine Tabellen angefügt.
Wie kann ich ausschließen, das die Ergebnisse der Abfragen
wieder in meine Tabelle einfließen?
Heinz
Anzeige
AW: mir noch unklar ...
25.06.2022 09:41:07
neopa
Hallo Heinz,
... was Du genau meinst..
Gruß Werner
.. , - ...
AW: eine prima Lösung ...
25.06.2022 09:42:43
neopa
Hallo Chris,
... vielen Dank Dir dafür. Deine Lösung entspricht genau dem, was ich angestrebt hatte aber nicht umsetzen konnte.
Frage: Wo hätte ich nachlesen können/müssen damit ich vielleicht auch zu diesem gekommen wäre?
Aber ich wünsche Dir jetzt erst einmal ein schönes WE
Gruß Werner
.. , - ...
Anzeige
Tabelle ausschließen
25.06.2022 15:43:38
Heinz
Hallo Liebe Excellenten,
ich habe inzwischen noch eine Tabelle in den Quelldaten mit dem Namen "Regionen".
Wie kann ich ausschließen, dass diese Datei mit in die Abfrage einbezogen wird?
Mein Weg funkt nicht:
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name] "Abfrage1" "Regionen")),
Heinz
Anzeige
AW: dazu musst Du nicht nicht den M-Code ändern ..
25.06.2022 16:00:53
neopa
Hallo Heinz,
... sondern aktiviere einfach im PQ-Editor den Schritt "Gefilterte Zeilen" (unmittelbar nach Schritt "Quelle") und ändere dort interaktiv die Filterung. Anbieten würde sich dazu als Filterung "enthält" und als Text "Tabelle" auszuwählen. Der M-Code bildet sich dafür automatisch zu: = Table.SelectRows(Quelle, each Text.Contains([Name], "Tabelle")) und filtert dadurch nur die Tabellen die im Namen "Tabelle" zu stehen haben.
Gruß Werner
.. , - ...
Anzeige
AW: eine prima Lösung ...
27.06.2022 08:25:31
ChrisL
Hi
@ Heinz
Wie Werner schon beschrieben hat, muss das Abfrageresultat ausgefiltert werden. Vielleicht hilft z.B.: https://www.youtube.com/watch?v=z3PXGn19nfI
@ Werner
Man kann die Aufgabe fast mit Standardmitteln lösen. Gedanklich bin ich danach vorgegangen, habe die Liste aber über Variablen in die Hauptabfrage eingebaut (immer mal was neues).
https://www.herber.de/bbs/user/153775.xlsx
Ein Tutorial habe ich nicht. Ich stöbere einfach durch die PQ-Standardfunktionen und so bin ich bereits früher mal zufällig auf Table.Schema gestossen.
https://docs.microsoft.com/de-de/powerquery-m/power-query-m-function-reference
Und zum Thema Transformationstabellen. Letztlich alles eine Frage der Anforderung. Spätestens wenn man die Spalten ordnen möchte oder eine Typenkonvertierung durchführt, müsste man wissen, welche Datenfelder bezogen werden und eine Transformationstabelle wäre m.E. sinnvoll. Schlussendlich dient eine Abfrage der Auswertung/Reporting und da sollte man ja schon im Voraus wissen, was man auswerten will. Insofern ist meine dynamische Lösung konstruiert/fiktiv, aber es könnte dennoch mal die Anforderung dafür entstehen.
cu
Chris
Quelle:

let
Quelle = Excel.CurrentWorkbook(),
#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name]  "Abfrage1"))
in
#"Gefilterte Zeilen"
ListeSpaltennamen:

let
Quelle = Quelle,
#"Hinzugefügte benutzerdefinierte Spalte" = Table.AddColumn(Quelle, "Hilfsspalte", each Table.Schema([Content])[Name]),
#"Erweiterte Hilfsspalte" = Table.ExpandListColumn(#"Hinzugefügte benutzerdefinierte Spalte", "Hilfsspalte"),
#"Andere entfernte Spalten" = Table.SelectColumns(#"Erweiterte Hilfsspalte",{"Hilfsspalte"}),
#"Entfernte Duplikate" = Table.Distinct(#"Andere entfernte Spalten"),
Hilfsspalte = #"Entfernte Duplikate"[Hilfsspalte]
in
Hilfsspalte
Abfrage1:

let
Quelle = Quelle,
#"Erweiterte Content" = Table.ExpandTableColumn(Quelle, "Content", ListeSpaltennamen, ListeSpaltennamen)
in
#"Erweiterte Content"

Anzeige
AW: "fast" und "stöbern" trifft es gut ...
27.06.2022 10:50:51
neopa
Hallo Chris,
... vielen Dank für Deine zusätzlichen Ausführungen.
Ich hab schon auch ab und zu mal in https://docs.microsoft.com/de-de/powerquery-m/power-query-m-function-reference "gestöbert". Aber man braucht mE wohl schon etwas mehr als Grundkenntnisse in und mit PQ um dort das zutreffende zu finden, für das was man anstrebt. Ansonsten ist es teilweise so wie die Suche von etwas "unbekannten" in einem großen Haufen von Verschiedenen.
Die Verwendungsmöglichkeit der Funktion "In Liste konvertieren" im PQ-Editor hab ich jetzt aber dank Dir nachvollziehe können - also zumindest für dieses von mir erweiterte Beispiel.
Gruß Werner
.. , - ...
Anzeige
gerne...
27.06.2022 11:35:10
ChrisL
Hi Werner
Was würde man wollen, wenn man wüsste was man bräuchte...
Verstehe schon, dass die Suche nach dem "Unbekannten" nicht ganz einfach ist. Andererseits ist es wie mit den Tabellen-Funktionen. Man fängt irgendwo mal an und erweitert dann laufend sein Vokabular. Selbst nach Jahren findet man noch Neues (unbekannte Funktionen oder neue Verwendungszwecke), was die Sache interessant macht. :)
cu
Chris
Anzeige
AW: so gesehen, hast Du auch wieder Recht owT
27.06.2022 14:28:04
neopa
Gruß Werner
.. , - ...
AW: ... leider so noch nicht asureichend, denn ...
25.06.2022 11:35:54
Luschi
Hallo Chris und Werner,
hier mal meine Lösung, wo 3 intelligente Tabellen unterschiedliche Spaltenüberschriften haben, selbst unterschiedlichen Spaltenpositionen sind damit realisierbar.
https://www.herber.de/bbs/user/153756.xlsx
Gruß von Luschi
aus klein-Paris
Anzeige
AW: so aber nicht wirklich dynamisch, denn ...
25.06.2022 15:00:21
neopa
Hallo Luschi,
... Deine Lösung arbeitet offensichtlich mit mit einer zusätzlichen "Übersetzungstabelle". Eine solche ist mit der Lösung von Chris nicht notwendig.
Gruß Werner
.. , - ...
AW: so aber nicht wirklich dynamisch, denn ...
25.06.2022 19:16:58
Luschi
Hallo Werner,
bei der Lösung von ChrisL stehen die Daten der 3 intelligenten Tabellen nebeneinander - bei mir untereinander.
https://www.herber.de/bbs/user/153761.xlsx
Gruß von Luschi
aus klein-Paris
PS: und eine absolute Dynamik der Datenübernahme wird es nie geben, ohne das der Anwender noch ein bißchen Hand anlegen muß.
Anzeige
AW: allerdings ...
26.06.2022 09:09:10
neopa
Hallo Luschi,
... Deine Lösung ist so aber nicht wirklich als dynamisch bezeichnen. Es besteht so mE auch die Gefahr, dass vorhandenen Daten in der Lösung nicht mehr vorhanden sein können bzw. ungewollt zugeordnet sind.
Chris geht berechtigt davon aus, dass nur die Daten (untereinander) zusammengefügt werden, die auch gleiche Spaltenbezeichnung in den Quelldaten haben. Wenn das in den Quelldatentabellen nicht gegeben ist, dann werden verschieden bezeichnete Spaltenwerte auch jeweils in getrennte Datenspalten (nebeneinander) in der Ergebnistabelle gelistet. Dadurch gehen auch keine Daten verloren, wenn zusätzliche Spalten in den Quelldaten hinzukommen oder in den Quelltabellen Spaltennamen anders bezeichnet wurden. Für Deine Lösung muss dafür zuvor zwingend eine statisch exakte Zuordnung definiert werden.
Mit der Lösung von Chris kann man (bei Bedarf) basierend auf dessen Ergebnislisting entweder mit anschließender PQ- Funktionalität oder in nachträglicher Änderung der Spaltenbezeichnung(en) der Quelltabellen eine schrittweise "Nachjustierung" bis zum angestrebten Endergebnis vornehmen.
Deine Lösung will vorgenanntes vermeiden. Aber so wie bisher realisiert, kann man damit aber schnell den Überblick verlieren mit dann ungewollten Ergebnis. Vielleicht solltest Du die Spaltendaten in Konfiguration!A:C zunächst durch PQ erstellen lasen und dann die zugehörigen "Übersetzungs-"Daten in Konfiguration!D:D erfassen wo notwendig ,Danach PQ aktualisieren. So könnte man auch interaktiv Deine PQ-Lösung an die angestrebte Lösung anpassen,
Gruß Werner
.. , - ...
Anzeige
AW: allerdings ...
26.06.2022 13:23:42
Luschi
Hallo Werner,
mit spätestens E_365-PQ mußt Du Deinen Widerstand gegen die sogenannten Übersetzungstabellen (dort heißen sie Transformationstabellen) aufgeben. Da gehören sie zur Standard-Auswahlmöglichkeit beim Verbinden von Tabellen und das nennt sich dann 'Fuzzyübereinstimmungen zum Zusammenführen verwenden' und als Sonderbonus kann man dann 1 Transformationstabelle angeben, die z.B. sowas matcht: de statt Deutschland oder neopa C statt Werner.
Aber auch da wird man gezwungen sein, vorher die Transformationstabelle manuell zu Erstellen, denn es gibt kein 'plug&play'-Mechanismus.
Gruß von Luschi
aus klein-Paris
Anzeige
AW: hab nichts gegen Transformationstabellen, ...
26.06.2022 16:19:21
neopa
Hallo Luschi,
... da wo sie angebracht oder gar notwendig sind. Und wenn diese zumindest teilweise automatisch erzeugt werden (können) dann halte solche durchaus für angebracht und hilfreich. So jedoch wie hier die Aufgabenstellung war, ist die Lösung die Chris aufgezeigt hat für mich optimal.Würde bloß gern wissen, wie er zu dieser Lösung gekommen ist.
Gruß Werner
.. , - ...
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Power Query: Tabellenname dynamisch verwalten


Schritt-für-Schritt-Anleitung

  1. Tabellen in Excel erstellen: Erstelle deine Daten in Excel und wandeln sie in "intelligente" Tabellen um. Nutze dazu STRG + T, wodurch deine Tabellen automatisch als Tabelle1, Tabelle2 usw. benannt werden.

  2. Power Query öffnen: Gehe zu Daten > Abfragen und Verbindungen und öffne den Power Query Editor.

  3. Datenquelle festlegen: Verwende den Befehl

    = Excel.CurrentWorkbook()

    um alle Tabellen in der aktuellen Arbeitsmappe zu laden.

  4. Tabellen filtern: Filtere die geladenen Tabellen, um nur die gewünschten anzuzeigen. Beispiel:

    #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name] <> "Regionen"))
  5. Tabelleninhalt erweitern: Benutze die Funktion Table.ExpandTableColumn, um die Spalten aus den gefilterten Tabellen zu erweitern. Dies kannst du wie folgt umsetzen:

    #"Erweiterte Content" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Content", Spaltennamen)
  6. Hinzufügen einer Quellspalte: Füge eine Spalte hinzu, die den Namen der Ursprungstabelle enthält:

    TabelleTemporaer = Table.AddColumn(#"Gefilterte Zeilen", "Quellname", each [Name])
  7. Lade die Abfrage: Klicke auf Schließen & Laden, um die Resultate in Excel zu speichern.


Häufige Fehler und Lösungen

  • Fehler: Tabellen werden nicht gefunden: Stelle sicher, dass die Tabellen korrekt benannt sind und die Filterbedingungen stimmen. Überprüfe die Namen in der Excel.CurrentWorkbook()-Abfrage.

  • Fehler: Zu wenig Spalten in der Zielabfrage: Achte darauf, dass alle Tabellen die gleiche Anzahl an Spalten haben. Wenn nicht, kann dies zu Problemen führen. Nutze die dynamische Spaltennamen-Liste, um diese Herausforderungen zu bewältigen.


Alternative Methoden

  • Fuzzy Übereinstimmungen: Nutze die Funktion FuzzyÜbereinstimmungen, um verschiedene Spaltennamen in den Tabellen zu matchen. Dies ist besonders nützlich, wenn die Spaltenüberschriften variieren.

  • Dynamischer Filter: Implementiere einen dynamischen Filter in Power Query, um nur relevante Daten zu laden, z.B. durch:

    #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each Text.Contains([Name], "Tabelle"))

Praktische Beispiele

  1. Daten aus mehreren Tabellen zusammenführen:

    let
    Quelle = Excel.CurrentWorkbook(),
    #"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name] <> "Regionen")),
    #"Erweiterte Content" = Table.ExpandTableColumn(#"Gefilterte Zeilen", "Content", Spaltennamen)
    in
    #"Erweiterte Content"
  2. Dynamisches Hinzufügen von Spaltennamen:

    Spaltennamen = Table.ColumnNames(#"Gefilterte Zeilen"{0}[Content]),
    SpaltenNamen_Add = List.InsertRange(Spaltennamen, 0, {"Name"})

Tipps für Profis

  • Verwende den Power Query M Code: Durch das Verständnis des Power Query M Code kannst du deine Abfragen optimieren und anpassen. Experimentiere mit Funktionen wie Table.Combine.

  • Dokumentation nutzen: Die offizielle Power Query M Dokumentation ist ein wertvolles Werkzeug, um die Funktionen besser zu verstehen.


FAQ: Häufige Fragen

1. Wie filtere ich bestimmte Tabellen aus meiner Abfrage?
Verwende Table.SelectRows mit Bedingungen, um nur die gewünschten Tabellen zu laden. Beispiel:

#"Gefilterte Zeilen" = Table.SelectRows(Quelle, each ([Name] <> "Regionen"))

2. Kann ich die Spaltennamen dynamisch anpassen?
Ja, du kannst die Spaltennamen dynamisch abrufen, indem du Table.ColumnNames und List.InsertRange verwendest, um neue Spalten korrekt hinzuzufügen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige