Jaa


Virheet

Virhe Power Query M -kaavakielessä on osoitus siitä, että lausekkeen arviointiprosessi ei voinut tuottaa arvoa. Virheilmoituksia aiheuttavat operaattorit ja funktiot, jotka kohtaavat virhe-ehtoja , tai käyttämällä virhelauseketta . Virheitä käsitellään try-lausekkeen avulla. Kun virhe ilmenee, määritetään arvo, jonka avulla voidaan ilmaista, miksi virhe ilmeni.

Try-lauseke

Try-lauseke muuntaa arvot ja virheet tietuearvoksi, joka ilmaisee, käsittelikö try-lauseke virhettä vai ei, ja joko oikean arvon tai virhetietueen, jonka se poimi virheenkäsittelyn aikana. Otetaan esimerkiksi seuraava lauseke, joka aiheuttaa virheen ja käsittelee sen heti:

try error "negative unit count"

Tämä lauseke antaa tulokseksi seuraavan sisäkkäisen tietuearvon, joka selittää [HasError], [Error]-, - ja [Message] -kenttien haut aiemmassa yksikkö-hinta-esimerkissä.

Virhetietue

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

Yleinen tapa on korvata virheet oletusarvoilla. try-lauseketta voidaan käyttää valinnaisen muuten-lauseen kanssa juuri tämän saavuttamiseksi kompaktissa muodossa:

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

Esimerkki virheestä

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

Edellisessä esimerkissä käytetään - Sales[UnitPrice] kenttää ja muotoillaan tuloksen tuottavaa arvoa:

"Unit Price: 2"

Jos Yksiköt-kentän arvo olisi ollut nolla, - UnitPrice kenttä olisi aiheuttanut virheen, jonka try-kenttää olisi käsitellyt. Tulokseksi saatava arvo olisi silloin ollut seuraava:

"No Units"