Čítať v angličtine

Zdieľať cez


Errors

Chyba v jazyku vzorca Power Query M indikuje, že proces vyhodnocovania výrazu nebol schopný vyprodukovať určitú hodnotu. Chyby sú vyvolávané operátormi a funkciami, ktoré sa stretávajú s podmienkami chyby , alebo pomocou výrazu error . Chyby sa spracováva pomocou výrazu "try ". Pri chybe špecifikovaná hodnota sa dá použiť na označenie jej príčiny.

Výraz "Try"

Výraz "Try" konvertuje hodnoty a chyby na hodnotu záznamu, ktorá označuje, či sa vyhodnotila chyba alebo nie, a či sa pri spracovávaní chyby vyhodnotila správna hodnota alebo záznam chyby. Uvažujme napríklad o nasledujúcom výraze, ktorý vyvolá chybu, a potom ho okamžite spracuje:

try error "negative unit count"

Tento výraz poskytuje nasledujúcu hodnotu vnoreného záznamu, pričom vysvetlí [HasError], [Error]vyhľadávania polí a [Message] v uvedenom príklade jednotkovej ceny.

Záznam chyby

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

Bežným prípadom je nahradenie chýb predvolenými hodnotami. Na dosiahnutie iba želanej formy možno použiť výraz "Try" s voliteľnou klauzulou "otherwise":

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

Príklad chyby

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

Predchádzajúci príklad pristupuje k poľu Sales[UnitPrice] a formátuje hodnotu s výsledkom:

"Unit Price: 2"

Ak by pole Jednotky bolo nulové, UnitPrice pole by vyvolalo chybu, ktorá by sa spracovala pokusom. Výsledná hodnota by potom bola:

"No Units"