Использование операторов DAX

Завершено

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

Совет

Многие операторы DAX и их приоритеты такие же, как в Excel.

Арифметические операторы

Арифметические операторы приведены в следующей таблице.

Оператор Описание
+ Сложение
- Вычитание
* Умножение
/ Деление
^ Возведение в степень

Помните: если при делении двух выражений знаменатель может возвращать нуль или значение BLANK, эффективнее и безопаснее использовать функцию DAX DIVIDE.

Операторы сравнения

В следующей таблице перечислены операторы сравнения, которые используются для сравнения двух значений. Результатом будет значение TRUE или FALSE.

Оператор Описание
= Равно
== Строго равно
> Больше чем
< Меньше чем
>= Больше или равно
<= Меньше или равно
<> Не равно

Все операторы сравнения, за исключением строго равно (==) считают значение BLANK равным нулю, пустой строке (""), дате "30 декабря 1899 года" или FALSE. Это означает, что выражение [Revenue] = 0 будет иметь значение TRUE, если значение [Revenue] равно нулю или BLANK. Напротив, [Revenue] == 0 имеет значение TRUE, только если значение [Revenue] равно нулю.

Оператор объединения текста

Используйте символ амперсанда (&) для соединения (или объединения) двух текстовых значений с целью создания одного непрерывного текстового значения. Например, рассмотрим следующее определение вычисляемого столбца.

Model Color = 'Product'[Model] & "-" & 'Product'[Color]

Логические операторы

Логические операторы используются для объединения выражений и получения единого результата. Все логические операторы приведены в следующей таблице.

Оператор Описание
&& Создает между двумя выражениями, каждое из которых дает логический результат, условие логического И. Если оба выражения возвращают значение TRUE, то их сочетание также возвращает значение TRUE. В противном случае возвращается значение FALSE.
|| (две прямые черты) Объединяет два выражения условием ИЛИ. Если любое из выражений возвращает значение TRUE, результатом будет TRUE. Результат будет FALSE, только если оба выражения имеют значение FALSE.
IN Создает логическое условие ИЛИ между всеми строками, сравниваемыми с таблицей. Примечание. В синтаксисе конструктора таблиц используются фигурные скобки.
NOT Инвертирует состояние логического выражения (FALSE в TRUE и наоборот).

Примером, в котором используется логический оператор IN, может служить определение меры ANZ Revenue. Эта мера использует функцию DAX CALCULATE для применения определенного фильтра по двум странам: Австралии и Новой Зеландии.

Примечание

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

ANZ Revenue =
CALCULATE(
    [Revenue],
    Customer[Country-Region] IN {
        "Australia",
        "New Zealand"
    }
)

Приоритет операторов

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

Оператор Описание
^ Возведение в степень
- Знак (как в –1)
* и / Умножение и деление
NOT НЕТ
+ и – Сложение и вычитание
& Объединение двух строк текста
=,==,<,>,<=,>=,<> Сравнение

Если операторы имеют одинаковое значение приоритета, они выполняются в порядке слева направо.

Как правило, приоритет операторов аналогичен тому, который используется в Excel. Если необходимо переопределить порядок вычисления, сгруппируйте операции, заключив их в круглые скобки.

Например, рассмотрим следующее определение вычисляемого столбца.

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * 1 - [Unit Price Discount Pct]

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

Extended Amount = Sales[Order Quantity] * Sales[Unit Price] * (1 - [Unit Price Discount Pct])

Совет

Запомнить правила приоритета операторов может быть сложно, особенно для начинающих пользователей DAX. Следовательно, рекомендуется тщательно протестировать формулы. Если формулы не дают правильный результат из-за неправильного порядка вычисления, можно поэкспериментировать, добавляя круглые скобки для корректировки порядка вычислений. Добавляя круглые скобки, можно также улучшить удобочитаемость формул.

Дополнительные сведения об операторах DAX и порядке очередности см. в статье Операторы DAX.

Неявное преобразование

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

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

Значения BLANK обрабатываются по-разному в зависимости от используемого оператора. Она обрабатывается аналогично тому, как Excel обрабатывает пустые значения (BLANK), но не так, как базы данных (SQL) обрабатывают значения NULL. Значение BLANK считается нулевым при использовании его с арифметическими операторами и пустой строкой при объединении в строку.

Совет

Запомнить правила обработки значений BLANK может быть сложно, особенно для начинающих пользователей DAX. Следовательно, рекомендуется тщательно протестировать формулы. Когда значения BLANK создают непредвиденные результаты, рекомендуется использовать функции DAX IF и ISBLANK для проверки на наличие значений BLANK, а затем внести необходимые корректировки.