Errors
Ein Fehler in der Formelsprache Power Query M ist ein Hinweis darauf, dass bei der Auswertung eines Ausdrucks kein Wert erzeugt werden konnte. Fehler werden von Operatoren und Funktionen ausgelöst, die auf error-Bedingungen stoßen, oder durch die Verwendung des Ausdrucks error. Fehler werden mithilfe des try-Ausdrucks behandelt. Bei Auftreten eines Fehlers wird ein Wert angegeben, mit dem auf die Fehlerursache hingewiesen werden kann.
Ein try-Ausdruck wandelt Werte und Fehler in einen Datensatzwert um, der angibt, ob der try-Ausdruck einen Fehler behandelt hat oder nicht. Außerdem wird entweder auf den richtigen Wert oder den Fehlerdatensatz verwiesen, der bei der Fehlerbehandlung extrahiert wurde. Betrachten Sie beispielsweise den folgenden Ausdruck, der einen Fehler auslöst und diesen dann sofort behandelt:
try error "negative unit count"
Dieser Ausdruck wertet den folgenden geschachtelten Datensatzwert aus und erläutert die Suche für die Felder [HasError], [Error]
und [Message]
im vorherigen Stückpreisbeispiel.
[
HasError = true,
Error =
[
Reason = "Expression.Error",
Message = "negative unit count",
Detail = null
]
]
Ein gängiges Vorgehen ist es, Fehler durch Standardwerte zu ersetzen. Der try-Ausdruck kann mit einer optionalen otherwise-Klausel verwendet werden, um genau das in kompakter Form zu erreichen:
try error "negative unit count" otherwise 42
// equals 42
let Sales =
[
ProductName = "Fishing rod",
Revenue = 2000,
Units = 1000,
UnitPrice = if Units = 0 then error "No Units"
else Revenue / Units
],
//Get UnitPrice from Sales record
textUnitPrice = try Number.ToText(Sales[UnitPrice]),
Label = "Unit Price: " &
(if textUnitPrice[HasError] then textUnitPrice[Error][Message]
//Continue expression flow
else textUnitPrice[Value])
in
Label
Im vorherigen Beispiel wird auf das Feld Sales[UnitPrice]
zugegriffen und eine Wertformatierung durchgeführt, sodass folgendes Ergebnis erzeugt wird:
"Unit Price: 2"
Wenn das Feld „Units“ den Wert 0 aufweist, löst das Feld UnitPrice
einen Fehler aus, der durch den try-Ausdruck behandelt wird. Dies führt zum folgenden Ergebniswert:
"No Units"