Правильное использование функций ошибок

В качестве моделиатора данных при написании выражения DAX, которое может вызвать ошибку во время оценки, можно рассмотреть возможность использования двух полезных функций DAX.

  • Функция ISERROR , которая принимает одно выражение и возвращает значение TRUE, если это выражение приводит к ошибке.
  • Функция IFERROR , которая принимает два выражения. Если первое выражение приведет к ошибке, возвращается значение второго выражения. На самом деле это более оптимизированная реализация вложения функции ISERROR внутри функции IF .

Однако, хотя эти функции могут быть полезными и могут способствовать написанию простых выражений, они также могут значительно снизить производительность вычислений. Это может произойти, так как эти функции увеличивают количество необходимых проверок подсистемы хранилища.

Большинство ошибок во время оценки вызваны непредвиденными значениями BLANKs или нулевыми значениями или недопустимым преобразованием типов данных.

Рекомендации

Лучше избежать использования функций ISERROR и IFERROR. Вместо этого при разработке модели и написании выражений применяются оборонительные стратегии. Стратегии могут включать:

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

    Качество данных также можно контролировать, задав для столбца модели значение Nullable property Off, что приведет к сбою обновления данных, если будут обнаружены BLANK. В случае сбоя данные, загруженные в результате успешного обновления, останутся в таблицах.

  • Использование функции IF: выражение логического теста функции IF может определить, произойдет ли результат ошибки. Обратите внимание, что, как и функции ISERROR и IFERROR, эта функция может привести к дополнительным сканированиям подсистемы хранилища, но, скорее всего, будет работать лучше, чем они, так как не требуется вызывать ошибку.

  • Использование нелерантных функций: некоторые функции DAX проверяют и компенсируют условия ошибки. Эти функции позволяют ввести альтернативный результат, возвращаемый вместо этого. Функция DIVIDE является одним из таких примеров. Дополнительные рекомендации по этой функции см. в статье DAX: ФУНКЦИЯ DIVIDE и оператор деления (/).

Пример

Следующее выражение мер проверяет, будет ли возникать ошибка. Он возвращает BLANK в этом экземпляре (то есть, если функция IF не предоставляется с выражением value-if-false).

Profit Margin
= IF(ISERROR([Profit] / [Sales]))

Эта следующая версия выражения меры была улучшена с помощью функции IFERROR вместо функций IF и ISERROR.

Profit Margin
= IFERROR([Profit] / [Sales], BLANK())

Однако эта окончательная версия выражения меры достигает того же результата, но более эффективно и элегантно.

Profit Margin
= DIVIDE([Profit], [Sales])