DeclutterData Datenoptimierung und Controlling DeclutterData Datenoptimierung und Controlling

Startseite / Wissen / Excel

5 Methoden, um Queries unzerstörbar zu machen

Excel · aktualisiert am · 9 Min. Lesezeit · von Phillip Seefeld

5 Methoden, um Queries unzerstörbar zu machen

Hallo Daten-Freunde! Hand aufs Herz: Wer von euch hat nicht schon mal eine Power Query Abfrage gebaut, die perfekt lief… bis zum nächsten Daten-Refresh? Plötzlich schreit der Power BI Report vor Fehlern, dein Chef braucht die Auswertung und du bist am Verzweifeln.🫨

Die Ursache? Oft sind es kleine, unscheinbare Änderungen in den Quelldaten, die deine Abfrage ins Straucheln bringen. Richtig gehört, du bist für das Dilemma oftmals gar nicht verantwortlich.😉

Das ist natürlich ärgerlich. Wir investieren viel Zeit in den Aufbau unserer Datenmodelle, nur um dann von Kleinigkeiten ausgebremst zu werden.😐 Aber ich habe gute Nachrichten: Wir können uns vor den gängigsten Fehlerquellen absichern, bevor sie uns überhaupt in die Quere kommen.

Heute tauchen wir ein in 5 geniale Tricks, die deine Power Query Abfragen stabiler, dynamischer und deutlich weniger fehleranfällig machen. Wenn du also genug hast von Refresh-Fehlern und frustrierender Fehlersuche, bleib dran! Ich mache deine Datenabfragen sicher vor Fehlern.🙂

Das Wichtigste in Kürze 📝

Power Query Abfragen können durch kleine Änderungen in den Quelldaten Fehler erzeugen. Um deine Abfragen robuster und dynamischer zu gestalten, beherzige diese fünf effektiven Tricks:

  • Groß-/Kleinschreibung ignorieren: Nutze die Fuzzyübereinstimmung in Joins oder den Parameter Comparer.OrdinalIgnoreCase bei Gruppierung & Filterung, um Fehler durch variierende Groß- und Kleinschreibung bei Werten zu vermeiden.
  • Spalten dynamisch erweitern: Verwende Funktionen wie Record.FieldNames oder Table.ColumnNames(Table.Combine()), um die Namen der zu erweiternden Spalten dynamisch zu ermitteln.
  • Fehlende Spalten ignorieren: Nutze MissingField.Ignore in Funktionen wie Table.RenameColumns. Dieser weist Power Query an, Spalten zu ignorieren (statt einen Fehler zu werfen), wenn sie im aktuellen Datensatz nicht gefunden werden.
  • Fehler gezielt abfangen: Setze try … otherwise ein, um potenziell fehlerhafte Konvertierungen oder Operationen abzusichern. Deine Abfrage läuft weiter und du kannst einen Ersatzwert (z.B. null) für die fehlerhaften Zellen definieren.
  • Fehlerdetails protokollieren: Nutze try ohne otherwise, um das Ergebnis einer Operation als Record zu speichern. Anschließend kannst du mit List.Contains(Record.FieldNames()) prüfen, ob ein Fehler vorliegt und die genaue Fehlermeldung mit [Ergebnisspalte][Error][Message] extrahieren.

Trick 1: Groß- und Kleinschreibung ignorieren

Stell dir vor, du konsolidierst Daten aus verschiedenen Quellen und hast Benutzereingaben, wo der Wert “Produkt A” mal als “Produkt A”, mal als “produkt A” oder sogar als “PRODUKT A” erfasst wird. Für uns Menschen ist das klar, aber Power Query ist da… nun ja, sehr exakt.

Wenn du dann Tabellen basierend auf diesen Werten zusammenführen möchtest (mittels Table.NestedJoin / Table.Join) oder nach ihnen gruppierst, führt dies zu Problemen: “Produkt A” und “produkt A” werden als separate Entitäten behandelt, obwohl sie inhaltlich dasselbe meinen. Je nach Funktion gibt es einen anderen Weg, um Vergleiche unabhängig von ihrer Schreibweise durchzuführen.

Hier einige Anwendungsbeispiele

  • Tabellen zusammenführen (Fuzzyübereinstimmungen)
    Wenn du zwei Tabellen anhand einer Schlüsselspalte zusammenführst und die Groß-/Kleinschreibung der Werte variieren kann, jedoch inhaltlich dasselbe bedeuten.
    Anstatt:
    Table.NestedJoin(Tabelle1,{"Artikelbez"},Tabelle2,{"Artikelbez"},"NeueSpalte",JoinKind.Inner)
Power Query Table.NestedJoin
Normaler Join (fehlende Werte wegen Schreibweise)

Nutzt du:
Table.FuzzyNestedJoin(Tabelle1,{"Artikelbez"},Tabelle2,{"Artikelbez"},"NeueSpalte",JoinKind.Inner,[IgnoreCase=true,Threshold=1])

Power Query Table.NestedJoin
Join-Einstellungen per Benutzeroberfläche

Schon werden “ArtikelA”, “artikelA” und “Artikela” beim Join als identisch behandelt!

Power Query Table.NestedJoin
Join mit Fuzzy-Übereinstimmung
  • Gruppieren von Daten (Comparer.OrdinalIgnoreCase)
    Wenn du Daten nach einer Spalte gruppieren möchtest und dabei die Groß-/Kleinschreibung der Werte ignorierst, um inkonsistente Einträge zu einer Gruppe zusammenzufassen.
Power Query Table.Group
Gruppierung ohne Comparer
Power Query Table.Group
Gruppierung mit Comparer

Hier würden “Apfel” und “apfel” als eine Gruppe behandelt werden, wenn du nach “Produktname” gruppierst.

  • Filtern (Comparer.OrdinalIgnoreCase)
    Wenn du zeilenweise nach Textinhalten filterst, wo die Groß- / Kleinschreibung nicht strikt eingehalten wird, z.B. bei der Suche nach “Bericht” vs. “bericht”. Das kann dir auch das Suchen nach beiden Schreibweisen ersparen und den Code verkürzen.
    Anstatt:
Power Query Table.SelectRows
Filter ohne Comparer

Nutzt du:

Power Query Table.SelectRows
Filter mit Comparer

Dadurch werden sowohl Zeilen mit Inhalt “Bericht” als auch “bericht” oder auch andere Varianten wie “BeRiCHt” ausgegeben.

Trick 2: Spalten dynamisch erweitern

Dieser Fehler ist ein Klassiker: Du hast eine Liste von Records / Tabellen in einer Spalte, die du erweitern möchtest. Das Problem? Wenn sich die zugrundeliegenden Spalten (Felder) in diesen Records oder Tabellen ändern – zum Beispiel, weil in einer Zeile ein Feld fehlt oder ein neues Feld auftaucht – bricht deine Abfrage zusammen. Power Query erwartet, dass benannte Spalten existieren.

Der Trick hier ist, die Namen der Spalten, die du erweitern möchtest, dynamisch zu identifizieren, anstatt sie hart zu kodieren.

Record.FieldNames

Record.FieldNames(Quelle[Spalte]{Zeilennummer})
Funktioniert, wenn alle deine Records die gleichen Felder (Spaltennamen) haben. Ich nutze diesen Trick gerne, wenn ich mehrere Spalten in einem Step hinzufüge.

Power Query Table.ExpandRecordColumn
Erweiterung der Spalten durch feste Werte
Power Query Table.ExpandRecordColumn
Erweiterung der Spalten durch Record.FieldNames

Table.ColumnNames

Table.ColumnNames(Table.Combine(Quelle[Spaltenname]))
Diese Funktions-Kombi ist super, wenn du eine Liste von Tabellen mit verschiedenen Spaltennamen hast. Beispiel: Monatliche Budget-Dateien mit gleichen Spalten am Anfang (z. B. AbteilungsID, AbteilungsName) aber unterschiedlichen Namen für die Werte-Spalte (Januar, Februar, …).

Angenommen, du hast eine Tabelle Transaktionen mit einer Spalte Details, die pro Zeile eine Tabelle enthält. Im Normalfall erhältst du per Benutzeroberfläche (Spalte erweitern) diesen Code:

Power Query Table.ExpandTableColumn
Erweiterung der Tabellen in der Spalte Details durch hart codierte Werte
(Artikelbez & Artikelnr)

Statt die Spalten als statische Liste anzugeben, kannst du mit der Kombi alle Spaltennamen aller Tabellen dynamisch ziehen.

Power Query Table.ExpandTableColumn
Dynamische Liste der Spaltennamen

Neue Spalten werden automatisch erkannt und hinzugefügt, fehlende Spalten verursachen keinen Fehler.

Power Query Table.ExpandTableColumn
Erweiterung der Spalte Details durch dynamische Liste (Spaltennamen)

Trick 3: Fehlende Spalten ignorieren

Oft arbeitest du mit Datenquellen, die nicht immer die gleichen Spaltennamen liefern. Du hast vielleicht eine Spalte KundenID, die aber manchmal als BestellerID auftaucht, oder bei älteren Daten ganz fehlt. Wenn du versuchst, eine Spalte umzubenennen, die nicht existiert, bricht deine Abfrage ab.

Der Trick ist, bevor die Umbenennung stattfindet, zu prüfen, ob die Spalte überhaupt existiert. Wenn ja, wird sie umbenannt. Wenn nicht, wird sie ignoriert.

Hierfür kommt der Parameter MissingField.Ignore zum Einsatz.
Wenn jetzt die Spalte KundenID im Tabellenobjekt Quelle nicht gefunden wird, wirft Table.RenameColumns keinen Fehler. Stattdessen wird die Umbenennung für diese spezifische Spalte einfach übergangen. Die Abfrage läuft ohne Unterbrechung weiter. Genial!

Beispiel
Uns liegt eine Power Query Abfrage mit den Spalten Produktname & Anzahl vor. Die Spalte Produktname soll in der Abfrage in Produktbez umbenannt werden. Jedoch wurde diese Spalte entfernt. Dadurch wird ein Fehler erzeugt, der Query funktioniert nicht mehr.

Power Query Gruppierung Produktname & Anzahl
Anstatt:
Table.RenameColumns(Tabelle1, {"KundenID", "Kundennummer"})
Nutzt du:
Table.RenameColumns(Tabelle1, {"KundenID", "Kundennummer"}, MissingField.Ignore)
Power Query Table.RenameColumns mit MissingField.Ignore
Hinzufügen des 3. Parameters – MissingField.Ignore

Dadurch läuft deine Abfrage stabil weiter, auch wenn die Spalte gar nicht existiert.

Trick 4: Fehler gezielt abfangen

Power Query verfügt über eine verlässliche Fehlerbehandlung mit try … otherwise. Diese zwei Zauberwörter sind das Pendant zur Excel-Funktion WENNFEHLER(). Die Kombi erlaubt dir, Code-Blöcke zu umwickeln, die potenziell Fehler werfen könnten, und darauf zu reagieren. Anstatt dass deine gesamte Abfrage abstürzt, kannst du den Fehler abfangen und eine alternative Aktion ausführen.

Beispiel
Du hast eine Spalte PreisText, die Zahlen als Text enthält, aber auch “N/A” oder ähnliches. Du möchtest die Zahlen als Zahl typisieren.

Power Query Table.AddColumn try Number.From otherwise null
Zahlen in Textform sollen, wenn möglich, in eine Zahlenform gewandelt werden

try Number.From([PreisText]): Versucht, den Wert in eine Zahl zu konvertieren.
otherwise [PreisText]: Wenn ein Fehler auftritt, wird stattdessen der Originaltext beibehalten. Du kannst ebenso otherwise null oder eine andere Aktion anwenden.

Trick 5: Fehler auslesen & Details protokollieren

Manchmal reicht es nicht, einen Fehler nur abzufangen und einen null Wert einzusetzen. Du möchtest wissen, was genau schiefgelaufen ist.

Gute Nachrichten! Jeder Fehler in Power Query hat eine detaillierte Fehlermeldung, die du extrahieren kannst. Das ist Gold wert, um Datenqualitätsprobleme zu identifizieren oder die Ursache eines Fehlers zu debuggen.

Dieser Trick baut direkt auf dem try…otherwise-Konzept auf. Anstatt einen festen Wert zurückzugeben, wenn ein Fehler auftritt, fängt try das Ergebnis als Record ab. Dieser Record enthält entweder den ursprünglichen Wert (wenn erfolgreich) oder einen Error-Record (wenn ein Fehler auftrat). Du kannst dann prüfen, ob es sich um einen Fehler handelt, und die Fehlermeldung auslesen.

Beispiel
Du möchtest zusätzlich zur numerischen Konvertierung (aus Trick 4) für null-Werte die spezifische Fehlermeldung. So erfährst du, warum es nicht geklappt hat.

Zuerst wendest du nur try ohne otherwise an. Das Ergebnis wird für jede Zeile in einer neuen Spalte (PreisNumerisch) als Record mit den Feldern HasError (WAHR / FALSCH) und Error oder Value gespeichert. Error / Value je nachdem, ob es zu einem Fehler kam (Error) oder die Funktion erfolgreich war (Value).

Power Query Table.AddColumn try Number.From
try Number.From versucht [PreisText] in eine Zahl umzuwandeln.
Das Ergebnis wird als Record gespeichert.

Erweiterst du die Records, erhältst du drei Spalten.

  • HasError: Funktion fehlgeschlagen = TRUE, ansonsten FALSE
  • Value: Funktion erfolgreich = Wert, ansonsten null
  • Error: Funktion fehlgeschlagen = Fehler als Record, ansonsten null
Power Query Table.AddColumn try Number.From und Table.ExpandRecordColumn
Inhalt der Records

Klickst du in einen Record der Error-Spalte, kannst du dir die Details des Fehlers anschauen. Bspw. den Grund oder die Beschreibung.

Power Query Error Inhalt
Inhalt eines Error-Records

HasError kann man gut in if-Formeln nutzen, ist aber für uns erstmal uninteressant. Wir möchten Value & Error gerne in einer Spalte vereinen und für Fehler die dazugehörige Beschreibung (Message) ausgeben. Und das alles in einer simplen Formel.🙂 Dafür nutzt du folgende if-Formel:

Power Query Table.AddColumn if List.Contains Error then Error else Value
Value & Error Spalte in einer Spalte kombiniert

List.Contains(Record.FieldNames()) nimmt die Feldnamen des Records in PreisNumerisch und prüft, ob es ein Feld mit der Bezeichnung Error gibt. Ist das der Fall, erhalten wir den Fehler-Record, ansonsten den richtigen Wert aus dem Value-Feld.

Nun ist Record nicht wirklich aussagekräftig. Daher fügen wir der then-Klausel das Anhängsel [Message] an. Power Query zieht sich damit aus dem Error-Record die Beschreibung, welche im Message-Feld enthalten ist.

Power Query Table.AddColumn if List.Contains Error then Error Message else Value
Durch [Message] wird die Fehlerbeschreibung extrahiert

Fazit

Daten sind dynamisch, und damit auch die Herausforderungen in der Datenaufbereitung. Wenn du aber die hier vorgestellten Power Query Hacks intelligent einsetzt, wirst du feststellen, dass deine Abfragen nicht nur stabiler werden, sondern auch deutlich einfacher zu warten sind. Du verbringst weniger Zeit mit dem Beheben von Fehlern und mehr Zeit mit dem, was wirklich zählt: der Analyse deiner Daten (und Fehlern 😄).

Beispieldatei zum Herunterladen

Lass uns den Datendschungel lichten 🪓

Ich freue mich auf dein Projekt!

Nimm gleich Kontakt mit mir auf und lass uns herausfinden, wie ich dir helfen kann! Ein Erstgespräch ist immer kostenlos. 🙂

Erstgespräch buchen