Partilhar via


Errors

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

Experimente a expressão

Uma expressão try converte valores e erros num valor de registo que indica se a expressão try tratou um erro ou não, e o valor correto ou o registo de erro que extraiu ao tratar o erro. Por exemplo, considere a seguinte expressão que gera um erro e, em seguida, manipula-o imediatamente:

try error "negative unit count"

Esta expressão avalia para o seguinte valor de registo aninhado, explicando as [HasError], [Error], e [Message] as pesquisas de campo no exemplo do preço unitário anterior.

Registo 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 pode ser usada com uma cláusula opcional caso contrário para conseguir exatamente isso de forma compacta:

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 anterior acede ao Sales[UnitPrice] campo e formata o valor que produz o resultado:

"Unit Price: 2"

Se o campo de Unidades tivesse sido zero, então o UnitPrice campo teria gerado um erro que teria sido resolvido pelo try. O valor resultante teria então sido:

"No Units"