Ler em inglês

Compartilhar via


Errors

Um erro na linguagem de fórmulas do Power Query M é uma indicação de que o processo de avaliação de uma expressão não pôde produzir um valor. Os erros são gerados por operadores e funções que encontraram condições de erros ou usaram a expressão de erro. Os erros são tratados usando a expressão try. Quando um erro é gerado, é especificado um valor que pode ser usado para indicar por que o erro ocorreu.

Expressão try

Uma expressão try converte valores e erros em um valor de registro que indica se a expressão try tratou um erro ou não, bem como o valor apropriado ou o registro de erro que ela extraiu ao tratar o erro. Por exemplo, considere a seguinte expressão que gera um erro e o trata imediatamente:

try error "negative unit count"

Essa expressão avalia o seguinte valor de registro aninhado, explicando as pesquisas de campo [HasError], [Error] e [Message] no exemplo de preço unitário antes.

Registro de erro

[
    HasError = true,
    Error =
        [  
            Reason = "Expression.Error",
            Message = "negative unit count",
            Detail = null
        ]
]

Um caso comum é substituir erros por valores padrão. A expressão try também pode ser usada com uma cláusula opcional para obter apenas isso em um formato compacto:

try error "negative unit count" otherwise 42
// equals 42

Exemplo de erro

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

O exemplo acima acessa o campo Sales[UnitPrice] e formata o valor, produzindo o seguinte resultado:

"Unit Price: 2"

Se o campo "Unidades" tivesse sido zero, o campo UnitPrice teria gerado um erro que teria sido tratado pela expressão try. O valor resultante teria sido:

"No Units"