Поделиться через


ошибки

Ошибка языка формул Power Query M — это указание на то, что процесс оценки выражения не мог создать значение. Ошибки возникают операторами и функциями, которые сталкиваются с условиями ошибки или с помощью выражения ошибки . Ошибки обрабатываются с помощью выражения try . При возникновении ошибки указывается значение, которое можно использовать для указания причины возникновения ошибки.

Пробное выражение

Выражение try преобразует значения и ошибки в значение записи, указывающее, обрабатывает ли выражение пробы ошибку или нет, а также правильное значение или запись ошибки, извлекаемой при обработке ошибки. Например, рассмотрим следующее выражение, которое вызывает ошибку, а затем обрабатывает его сразу:

try error "negative unit count"

Это выражение вычисляет следующее вложенное значение записи, объясняя [HasError], [Error]подстановки полей [Message] в примере с единицей.

Запись об ошибке

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

Распространенным случаем является замена ошибок значениями по умолчанию. Выражение try можно использовать с необязательным предложением в противном случае, чтобы достичь этого в компактной форме:

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

Пример ошибки

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

Приведенный выше пример обращается к полю Sales[UnitPrice] и форматирует значение, выдавая следующий результат:

"Unit Price: 2"

Если поле "Единицы" было равно нулю, то UnitPrice поле вызвало бы ошибку, которая была бы обработана попыткой. После этого результирующее значение было бы следующим:

"No Units"