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


Соответствующее использование функций ошибок

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

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

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

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

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

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

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

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

  • Использование функции 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])