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📝
- 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 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)
Normaler Join (fehlende Werte wegen Schreibweise)
- Nutzt du:
Table.NestedJoin(Tabelle1,{"Artikelbez"},Tabelle2,{"Artikelbez"},"NeueSpalte",JoinKind.Inner, [IgnoreCase=true,Threshold=1])Join-Einstellungen per Benutzeroberfläche
- Schon werden “ArtikelA”, “artikelA” und “Artikela” beim Join als identisch behandelt!
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.
Gruppierung ohne Comparer
Gruppierung mit Comparer
- Hier würde “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:
Filter ohne Comparer
- Nutzt du:
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.
Erweiterung der Spalten durch feste Werte
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:
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.
Dynamische Liste der Spaltennamen
Neue Spalten werden automatisch erkannt und hinzugefügt, fehlende Spalten verursachen keinen Fehler.
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.
Anstatt:Table.RenameColumns(Tabelle1, {"KundenID", "Kundennummer"})
Nutzt du:Table.RenameColumns(Tabelle1, {"KundenID", "Kundennummer"}, 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.
Zahlen in Textform sollen, wenn möglich, in eine Zahlenform gewandelt werden
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).
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 erfolgreich = TRUE, ansonsten FALSE
- Value: Funktion erfolgreich = Wert, ansonsten null
- Error: Funktion fehlgeschlagen = Fehler als Record, ansonsten null
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.
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:
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.
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 😄).

























Bitte weitersagen 🙂
Beitrag teilen und Wissen verbreiten. Danke 💚