DAX — это язык формул, состоящий из функций, операторов и значений, которые можно использовать в формуле или выражении для вычисления и возврата одного или нескольких значений.
Вы можете использовать операторы DAX для сравнения значений, выполнения арифметических вычислений и объединения строк. В этой главе вы узнаете об операторах DAX и о том, как их использовать.
Типы операторов DAX
DAX поддерживает следующие типы операторов —
- Арифметические операторы DAX
- Операторы сравнения DAX
- Оператор объединения текстов DAX
- DAX логические операторы
Порядок приоритета оператора DAX
Вы можете иметь формулу DAX со многими операторами DAX, объединяющими несколько значений или выражений. В таком случае конечный результат будет зависеть от порядка выполнения операций. DAX предоставляет вам порядок приоритета оператора по умолчанию, а также способы переопределения порядка приоритета по умолчанию.
Приоритет оператора DAX по умолчанию приведен в следующей таблице.
Порядок приоритета | Оператор (ы) | операция |
---|---|---|
1 | ^ | Возведение |
2 | — | Знак |
3 | * а также / | Умножение и деление |
4 | ! | НЕ |
5 | + и — | Сложение и вычитание |
6 | & | конкатенация |
7 | =, <,>, <=,> = и <> | Равно, меньше, больше, меньше или равно, больше или равно и не равно |
Синтаксис выражения DAX
Сначала необходимо понять синтаксис выражения DAX и то, как выполняется оценка выражения с операндами и операторами.
-
Все выражения всегда начинаются со знака равенства (=). Знак равенства означает, что последующие символы составляют выражение.
-
Справа от знака равенства у вас будут операнды, связанные операторами DAX. Например, = 5 + 4> 5.
= 5 * 6 — 3.
-
Выражения всегда читаются слева направо, и вычисления выполняются в этой последовательности на основе приоритета оператора DAX, приведенного в предыдущем разделе.
-
Если операторы DAX имеют одинаковое значение приоритета, они оцениваются слева направо. Например, = 5 * 6/10. И * и / имеют одинаковый порядок прецедента. Следовательно, выражение оценивается как 30/10 = 3.
-
Если операторы DAX в выражении имеют разные значения приоритета, то они оцениваются в порядке приоритета слева направо.
-
= 5 + 4> 7. Приоритет по умолчанию + первый и> следующий. Следовательно, выражение вычисляется слева направо. — Сначала вычисляется 5 + 4, в результате получается 9, а затем 9> 5, что дает ИСТИНА.
-
= 5 * 6 — 3. Приоритет по умолчанию * первый и — следующий. Следовательно, выражение вычисляется слева направо. — сначала вычисляется 5 * 6, в результате получается 30, а затем вычисляется 30 — 3, что приводит к 27.
-
= 2 * 5 — 6 * 3. Приоритет по умолчанию — * сначала, * затем, а затем -. Следовательно, выражение оценивается как 10 — 18, а затем как -8. Обратите внимание, что это не 10 — 6, в результате 4, а затем 4 * 3, что 12.
-
Все выражения всегда начинаются со знака равенства (=). Знак равенства означает, что последующие символы составляют выражение.
Справа от знака равенства у вас будут операнды, связанные операторами DAX. Например, = 5 + 4> 5.
= 5 * 6 — 3.
Выражения всегда читаются слева направо, и вычисления выполняются в этой последовательности на основе приоритета оператора DAX, приведенного в предыдущем разделе.
Если операторы DAX имеют одинаковое значение приоритета, они оцениваются слева направо. Например, = 5 * 6/10. И * и / имеют одинаковый порядок прецедента. Следовательно, выражение оценивается как 30/10 = 3.
Если операторы DAX в выражении имеют разные значения приоритета, то они оцениваются в порядке приоритета слева направо.
= 5 + 4> 7. Приоритет по умолчанию + первый и> следующий. Следовательно, выражение вычисляется слева направо. — Сначала вычисляется 5 + 4, в результате получается 9, а затем 9> 5, что дает ИСТИНА.
= 5 * 6 — 3. Приоритет по умолчанию * первый и — следующий. Следовательно, выражение вычисляется слева направо. — сначала вычисляется 5 * 6, в результате получается 30, а затем вычисляется 30 — 3, что приводит к 27.
= 2 * 5 — 6 * 3. Приоритет по умолчанию — * сначала, * затем, а затем -. Следовательно, выражение оценивается как 10 — 18, а затем как -8. Обратите внимание, что это не 10 — 6, в результате 4, а затем 4 * 3, что 12.
Использование скобок для управления порядком расчета DAX
Вы можете изменить порядок приоритетов операторов DAX по умолчанию, используя круглые скобки, группируя операнды и операторы для управления последовательностью вычислений.
Например, = 5 * 6 — 3 оценивается как 27 с порядком приоритета оператора DAX по умолчанию. Если вы используете круглые скобки для группировки операндов и операторов как = 5 * (6 — 3), то сначала вычисляется 6 — 3, в результате получается 3, а затем 5 * 3, что приводит к 15.
= 2 * 5 — 6 * 3 — до -8 с порядком приоритета оператора DAX по умолчанию. Если вы используете круглые скобки для группировки операндов и операторов как = 2 * (5-6) * 3, то сначала вычисляется 5-6, что приводит к -1, а затем вычисляется 2 * (-1) * 3, что приводит к -6 ,
Как вы можете видеть, при одинаковых операндах и операторах возможны разные результаты при их группировании. Следовательно, когда вы используете операторы DAX в формулах DAX, вы должны обратить внимание на то, какой должна быть последовательность вычислений.
Различия между Excel и DAX
Хотя DAX имеет сходство с формулами Excel, между ними есть определенные существенные различия.
-
DAX является более мощным, чем Excel, из-за его основного механизма вычисления резидентной памяти.
-
DAX поддерживает больше типов данных, чем Excel.
-
DAX предоставляет дополнительные расширенные функции реляционной базы данных, модели данных, включая расширенную поддержку типов даты и времени.
DAX является более мощным, чем Excel, из-за его основного механизма вычисления резидентной памяти.
DAX поддерживает больше типов данных, чем Excel.
DAX предоставляет дополнительные расширенные функции реляционной базы данных, модели данных, включая расширенную поддержку типов даты и времени.
В некоторых случаях результаты вычислений или поведение функций в DAX могут отличаться от результатов в Excel. Это связано с различиями в следующем —
- Тип данных приведение
- Типы данных
Разница в приведении типов данных
В DAX, когда у вас есть оператор value2 value1, value2, два операнда value1 и value2 должны быть одного типа данных. Если типы данных отличаются, DAX сначала неявно преобразует их в общий тип данных. Подробнее см. Главу «Синтаксис DAX».
Например, вам нужно сравнить два операнда разных типов данных, скажем, число, полученное из формулы, например = [Amount] * 0,08 и целое число. Первое число может быть десятичным числом со многими десятичными разрядами, тогда как второе число является целым числом. Затем DAX обрабатывает это следующим образом:
-
Во-первых, DAX преобразует оба операнда в действительные числа, используя самый большой числовой формат, который может хранить оба вида чисел.
-
Далее DAX сравнит два действительных числа.
Во-первых, DAX преобразует оба операнда в действительные числа, используя самый большой числовой формат, который может хранить оба вида чисел.
Далее DAX сравнит два действительных числа.
В отличие от этого, Excel пытается сравнивать значения разных типов данных без предварительного приведения их к общему типу данных. По этой причине вы можете найти разные результаты в DAX и в Excel для одного и того же выражения сравнения.
Разница в типах данных
Порядок приоритетов операторов в DAX и Excel одинаков. Однако процент оператора (%) и диапазоны данных, которые поддерживает Excel, не поддерживаются DAX. Более того, DAX поддерживает таблицу как тип данных, что не имеет место в Excel.
Кроме того, в формулах Excel вы можете ссылаться на одну ячейку, массив или диапазон ячеек. В формулах DAX вы не можете ссылаться ни на одно из них. Ссылки формулы DAX на данные должны быть в виде таблиц, столбцов, вычисляемых полей и вычисляемых столбцов.
Если вы копируете формулы из Excel и вставляете их в DAX, убедитесь в правильности формулы DAX, поскольку синтаксис DAX отличается от синтаксиса формул Excel. Кроме того, даже если функция имеет одинаковое имя в DAX и Excel, ее параметры могут отличаться, и результат функции также может быть другим.
Вы узнаете больше обо всем этом в следующих главах.