Dela via


Fel

Ett fel i Power Query M-formelspråket är en indikation på att processen för att utvärdera ett uttryck inte kunde generera ett värde. Fel utlöses av operatorer och funktioner som påträffar feltillstånd eller med hjälp av feluttrycket . Fel hanteras med hjälp av try-uttrycket. När ett fel utlöses anges ett värde som kan användas för att ange varför felet inträffade.

Prova uttryck

Ett try-uttryck konverterar värden och fel till ett postvärde som anger om try-uttrycket hanterade ett fel eller inte, och antingen rätt värde eller felposten som extraherades när felet hanterades. Tänk till exempel på följande uttryck som genererar ett fel och sedan hanterar det direkt:

try error "negative unit count"

Det här uttrycket utvärderas till följande kapslade postvärde och förklarar [HasError], [Error]fältsökningarna och [Message] i exemplet med enhetspris tidigare.

Felpost

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

Ett vanligt fall är att ersätta fel med standardvärden. Try-uttrycket kan användas med en valfri annan sats för att uppnå just det i ett kompakt format:

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

Felexempel

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

I föregående exempel kommer du åt fältet Sales[UnitPrice] och formaterar värdet som ger resultatet:

"Unit Price: 2"

Om fältet Enheter hade varit noll skulle fältet UnitPrice ha genererat ett fel som skulle ha hanterats av försöket. Det resulterande värdet skulle då ha varit:

"No Units"