Erreurs
Une erreur dans le langage de formule Power Query M indique que le processus d’évaluation d’une expression n’a pas pu produire de valeur. Les erreurs sont générées par les opérateurs et les fonctions qui rencontrent des conditions d’erreur, ou à l’aide de l’expression error. Les erreurs sont gérées à l’aide de l’expression try. Quand une erreur est générée, une valeur est spécifiée pour indiquer la raison de l’erreur.
Expression Try
Une expression try convertit les valeurs et les erreurs en une valeur d’enregistrement qui indique si l’expression try a géré une erreur ou non. Cette expression indique également soit la valeur appropriée, soit l’enregistrement d’erreur extrait au moment de la gestion de l’erreur. Par exemple, considérons l’expression suivante qui génère une erreur, puis la gère immédiatement :
try error "negative unit count"
Cette expression a la valeur de l’enregistrement imbriqué suivant, ce qui explique les recherches de champs [HasError], [Error]
et [Message]
dans l’exemple relatif au prix unitaire.
Enregistrement d’erreur
[
HasError = true,
Error =
[
Reason = "Expression.Error",
Message = "negative unit count",
Detail = null
]
]
Il est courant de remplacer les erreurs par des valeurs par défaut. Dans ce cas, vous pouvez utiliser l’expression try avec une clause otherwise facultative pour obtenir une présentation compacte :
try error "negative unit count" otherwise 42
// equals 42
Exemple d’erreur
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
L’exemple précédent accède au champ Sales[UnitPrice]
et met en forme la valeur qui produit le résultat :
"Unit Price: 2"
Si le champ Units avait eu la valeur zéro, le champ UnitPrice
aurait généré une erreur gérée par l’expression try. La valeur résultante aurait été :
"No Units"