błędy

Błąd w języku formuł Power Query M wskazuje, że proces obliczania wyrażenia nie może wygenerować wartości. Błędy są wywoływane przez operatory i funkcje występujące w warunkach błędu lub przy użyciu wyrażenia błędu. Błędy są obsługiwane przy użyciu wyrażenia try . Po wystąpieniu błędu zostanie określona wartość, która może służyć do wskazania przyczyny wystąpienia błędu.

Wyrażenie try

Wyrażenie try konwertuje wartości i błędy na wartość rekordu, która wskazuje, czy wyrażenie try obsłużyło błąd, czy też nie, oraz odpowiednią wartość lub rekord błędu wyodrębniony podczas obsługi błędu. Rozważmy na przykład następujące wyrażenie, które zgłasza błąd, a następnie obsługuje je od razu:

try error "negative unit count"

To wyrażenie oblicza następującą wartość zagnieżdżonego rekordu, objaśniając [HasError], [Error]wyszukiwania pól i w [Message] przykładzie unit-price wcześniej.

Rekord błędu

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

Typowym przypadkiem jest zastąpienie błędów wartościami domyślnymi. Wyrażenie try można użyć z opcjonalną klauzulą w przeciwnym razie, aby osiągnąć tylko to w formie kompaktowej:

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

Przykład błędu

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

Poprzedni przykład uzyskuje dostęp do Sales[UnitPrice] pola i formatuje wartość generującą wynik:

"Unit Price: 2"

Jeśli pole Units (Jednostki) miało wartość zero, UnitPrice pole spowodowałoby wystąpienie błędu, który zostałby obsłużony przez próbę. Wynikowa wartość byłaby wtedy:

"No Units"