Fehlerbehandlung
Ähnlich wie Excel und die DAX-Sprache über eine IFERROR
-Funktion verfügen, hat Power Query eine eigene Syntax zum Testen und Abfangen von Fehlern.
Wie in dem Artikel über den Umgang mit Fehlern in Power Query erwähnt, können Fehler entweder auf Schritt- oder Zellebene auftreten. In diesem Artikel geht es darum, wie Sie Fehler auf der Grundlage Ihrer eigenen Logik abfangen und verwalten können.
Hinweis
Um dieses Konzept zu demonstrieren, wird in diesem Artikel eine Excel-Arbeitsmappe als Datenquelle verwendet. Die hier vorgestellten Konzepte gelten für alle Werte in Power Query und nicht nur für diejenigen, die aus einer Excel-Arbeitsmappe stammen.
Die Beispieldatenquelle für diese Demonstration ist eine Excel-Arbeitsmappe mit der folgenden Tabelle.
Diese Tabelle aus einer Excel-Arbeitsmappe enthält Excel-Fehler wie #NULL!, #REF!, und #DIV/0! in der Spalte Standard Rate. Wenn Sie diese Tabelle in den Power Query-Editor importieren, zeigt das folgende Bild, wie sie aussieht.
Beachten Sie, dass die Fehler aus der Excel-Arbeitsmappe mit dem Wert [Error]
in jeder Zelle angezeigt werden.
In diesem Artikel erfahren Sie, wie Sie einen Fehler durch einen anderen Wert ersetzen können. Außerdem lernen Sie, wie Sie einen Fehler abfangen und für Ihre eigene Logik nutzen können.
In diesem Fall besteht das Ziel darin, eine neue Spalte Endsatz in der Beispieldatenquelle zu erstellen, die die Werte aus der Spalte Standardsatz verwendet. Bei Fehlern wird der Wert aus der entsprechenden Spalte Special Rate verwendet.
Um eine neue benutzerdefinierte Spalte zu erstellen, gehen Sie zum Menü Spalte hinzufügen und wählen Sie Benutzerdefinierte Spalte. Geben Sie im Fenster Benutzerdefinierte Spalte die Formel try [Standard Rate] otherwise [Special Rate]
ein. Benennen Sie diese neue Spalte Endkurs.
Die obige Formel versucht, die Spalte Standardsatz auszuwerten und gibt ihren Wert aus, wenn keine Fehler gefunden werden. Wenn in der Spalte Standardtarif Fehler gefunden werden, wird der nach der Anweisung otherwise
definierte Wert ausgegeben, in diesem Fall also die Spalte Sondertarif.
Nachdem Sie allen Spalten in der Tabelle die richtigen Datentypen hinzugefügt haben, zeigt das folgende Bild, wie die endgültige Tabelle aussieht.
Hinweis
Alternativ können Sie auch die Formel try [Standard Rate] catch ()=> [Special Rate]
eingeben, die der vorherigen Formel entspricht, aber das Schlüsselwort catch mit einer Funktion verwendet, die keine Parameter benötigt.
Das Schlüsselwort catch
wurde im Mai 2022 in Power Query eingeführt.
Unter Verwendung der gleichen Beispieldatenquelle wie im vorigen Abschnitt besteht das neue Ziel darin, eine neue Spalte für den Endsatz zu erstellen. Wenn der Wert aus dem Standardtarif vorhanden ist, wird dieser Wert verwendet. Andernfalls wird der Wert aus der Spalte Special Rate verwendet, außer für die Zeilen mit einem #REF!
Fehler.
Hinweis
Der einzige Zweck des Ausschlusses des #REF!
-Fehlers ist zu Demonstrationszwecken. Mit den in diesem Artikel vorgestellten Konzepten können Sie beliebige Felder des Fehlerdatensatzes anvisieren.
Wenn Sie ein beliebiges Leerzeichen neben dem Fehlerwert auswählen, wird das Detailfenster am unteren Rand des Bildschirms angezeigt. Der Detailbereich enthält sowohl den Fehlergrund DataFormat.Error
als auch die Fehlermeldung Invalid cell value '#REF!'
:
Sie können immer nur eine Zelle auswählen, so dass Sie immer nur die Fehlerkomponenten eines Fehlerwertes sehen können. An dieser Stelle erstellen Sie eine neue benutzerdefinierte Spalte und verwenden den Ausdruck try
.
Um eine neue benutzerdefinierte Spalte zu erstellen, gehen Sie zum Menü Spalte hinzufügen und wählen Sie Benutzerdefinierte Spalte. Geben Sie im Fenster Benutzerdefinierte Spalte die Formel try [Standard Rate]
ein. Benennen Sie diese neue Spalte Alle Fehler.
Der Ausdruck try
wandelt Werte und Fehler in einen Datensatzwert um, der angibt, ob der Ausdruck try
einen Fehler behandelt hat oder nicht, sowie den richtigen Wert oder den Fehlerdatensatz.
Sie können diese neu erstellte Spalte mit Datensatzwerten erweitern und sich die verfügbaren Felder ansehen, indem Sie das Symbol neben der Spaltenüberschrift auswählen.
Durch diesen Vorgang werden drei neue Felder aufgedeckt:
- All Errors.HasError: Zeigt an, ob der Wert aus der Spalte Standard Rate einen Fehler hatte oder nicht.
- All Errors.Value: Wenn der Wert aus der Spalte Standardsatz keinen Fehler enthielt, wird in dieser Spalte der Wert aus der Spalte Standardsatz angezeigt. Für fehlerhafte Werte steht dieses Feld nicht zur Verfügung, und während des Erweiterungsvorgangs enthält diese Spalte
null
Werte. - All Errors.Error: Wenn der Wert aus der Spalte „Standardsatz“einen Fehler enthielt, wird in dieser Spalte der Fehlerdatensatz für den Wert aus der Spalte Standardsatz angezeigt. Bei fehlerfreien Werten steht dieses Feld nicht zur Verfügung, und während des Erweiterungsvorgangs hat diese Spalte
null
Werte.
Für weitere Untersuchungen können Sie die Spalte All Errors.Error erweitern, um die drei Komponenten des Fehlerdatensatzes zu erhalten:
- Fehlerursache
- Fehlermeldung
- Fehler Detail
Nach dem Erweitern zeigt das Feld All Errors.Error.Message die spezifische Fehlermeldung an, die Ihnen genau sagt, welcher Excel-Fehler in der jeweiligen Zelle vorliegt. Die Fehlermeldung wird aus dem Feld Fehlermeldung des Fehlerdatensatzes abgeleitet.
Nun können Sie für jede Fehlermeldung in einer neuen Spalte eine neue bedingte Spalte mit dem Namen Endkurs und den folgenden Klauseln erstellen:
- Wenn der Wert in der Spalte All Errors.Errors.Message gleich
null
ist, wird der Wert aus der Spalte Standardsatz ausgegeben. - Wnn der Wert in der Spalte All Errors.Errors.Message nicht gleich
Invalid cell value '#REF!'.
ist, wird der Wert aus der Spalte Sondersatz ausgegeben. - Andernfalls, null.
Nachdem Sie nur die Spalten Konto, Standardtarif, Sondertarif und Endtarif beibehalten und den richtigen Datentyp für jede Spalte hinzugefügt haben, zeigt das folgende Bild, wie die endgültige Tabelle aussieht.
Alternativ dazu können Sie auch eine neue benutzerdefinierte Spalte mit den Schlüsselwörtern try
und catch
erstellen.
try [Standard Rate] catch (r)=> if r[Message] <> "Invalid cell value '#REF!'." then [Special Rate] else null