Leggere in inglese

Condividi tramite


Errori

Un errore nel linguaggio delle formule M di Power Query indica che il processo di valutazione di un'espressione non è stato in grado di produrre un valore. Gli errori vengono generati dagli operatori e dalle funzioni che riscontrano condizioni di errore o tramite l'espressione error. Gli errori vengono gestiti con l'espressione try. Quando viene generato un errore, viene specificato un valore che può essere usato per indicare il motivo per cui si è verificato l'errore.

Espressione try

Un'espressione try converte i valori e gli errori in un valore di record che indica se l'espressione try ha gestito o meno un errore, nonché il valore appropriato o il record di errore estratto durante la gestione dell'errore. Si consideri, ad esempio, l'espressione seguente che genera un errore e quindi lo gestisce immediatamente:

try error "negative unit count"

Questa espressione restituisce il valore di record annidato seguente, che spiega le ricerche nei campi [HasError], [Error] e [Message] nell'esempio di prezzo unitario precedente.

Record di errore

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

Un caso comune prevede la sostituzione degli errori con i valori predefiniti. L'espressione try può essere usata con una clausola otherwise facoltativa per ottenere questo risultato in un formato compatto:

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

Esempio di errore

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'esempio precedente accede al campo Sales[UnitPrice] e formatta il valore producendo il risultato:

"Unit Price: 2"

Se il campo Units fosse stato zero, il campo UnitPrice avrebbe generato un errore che sarebbe stato gestito da try. Il valore risultante sarebbe stato quindi:

"No Units"