Синтаксис DAX

В этой статье описаны синтаксис и требования к языку выражений формул DAX.

Требования к синтаксису

Формула DAX всегда начинается с знака равенства (=). После знака равенства можно указать любое выражение, которое вычисляется скалярным или выражение, которое можно преобразовать в скаляр. следующие основные параметры.

  • Скалярная константа или выражение, использующее скалярный оператор (+,-,*,/,>=,...,>, ...)

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

  • Операторы, константы и значения, предоставляемые в рамках выражения.

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

    Большинство функций DAX требуют одного или нескольких аргументов, которые могут включать таблицы, столбцы, выражения и значения. Однако некоторые функции, такие как PI, не требуют каких-либо аргументов, но всегда требуют круглые скобки для указания аргумента NULL. Например, необходимо всегда вводить pi(), а не PI. Вы также можете вложить функции в другие функции.

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

Например, ниже приведены все допустимые формулы.

Формула Результат
= 3 3
= "Продажи" Продажи
= "Продажи"[Сумма] Если вы используете эту формулу в таблице Sales, вы получите значение столбца "Сумма" в таблице Sales для текущей строки.
= (0.03 *[Сумма])

=0.03 * [Сумма]
Три процента значения в столбце "Сумма" текущей таблицы.

Хотя эту формулу можно использовать для вычисления процента, результат не отображается в процентах, если в таблице не применяется форматирование.
= PI() Значение константы pi.

Формулы могут вести себя по-разному в зависимости от того, как они используются. Необходимо всегда учитывать контекст и то, как данные, используемые в формуле, связаны с другими данными, которые могут использоваться в вычислении.

Требования к именам

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

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

При использовании таблицы или столбца в качестве входных данных для функции обычно необходимо указать имя столбца. Полное имя столбца — это имя таблицы, за которым следует имя столбца в квадратных скобках: например, "Продажи США"[Продукты]. Полное имя всегда требуется при ссылке на столбец в следующих контекстах:

  • В качестве аргумента функции ЗНАЧЕНИЯ

  • В качестве аргумента функций ALL или ALLEXCEPT

  • В аргументе фильтра для функций, CALCULATE или CALCULATETABLE

  • В качестве аргумента функции, RELATEDTABLE

  • В качестве аргумента для любой функции аналитики времени

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

Если имя таблицы содержит пробелы, зарезервированные ключевое слово или запрещенные символы, необходимо заключить имя таблицы в одинарные кавычки. Кроме того, необходимо заключить имена таблиц в кавычки, если имя содержит любые символы за пределами буквенно-цифрового диапазона ANSI, независимо от того, поддерживает ли языковой стандарт набор символов. Например, если открыть книгу, содержащую имена таблиц, написанные в кириллических символах, например "Таблица", имя таблицы должно быть заключено в кавычки, даже если оно не содержит пробелов.

Примечание.

Чтобы упростить ввод полных имен столбцов, используйте функцию автозаполнения в редакторе формул.

Таблицы

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

  • Имена таблиц должны быть заключены в одинарные кавычки, если они содержат пробелы, другие специальные символы или любые буквенно-цифровые символы, отличные от английского.

Показатели

  • Имена мер всегда должны находиться в квадратных скобках.

  • Имена мер могут содержать пробелы.

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

Столбцы

Имена столбцов должны быть уникальными в контексте таблицы; однако несколько таблиц могут иметь столбцы с одинаковыми именами (диамбигуация поставляется с именем таблицы).

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

Зарезервированные ключевые слова

Если имя, используемое для таблицы, совпадает с зарезервированным ключевое слово служб Analysis Services, возникает ошибка и необходимо переименовать таблицу. Однако можно использовать ключевое слово в именах объектов, если имя объекта заключено в скобки (для столбцов) или кавычки (для таблиц).

Примечание.

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

Специальные символы

В именах таблиц, столбцов или мер недопустимы следующие символы и типы символов:

  • Начальные или конечные пробелы; Если пробелы не заключены в разделители имен, скобки или отдельные апострофы.

  • Управляющие символы

  • Следующие символы, недопустимые в именах объектов:

    .,;':/\*|? &%$!+=()[]{}<>

Примеры имен объектов

В следующей таблице показаны примеры некоторых имен объектов:

Типы объектов Примеры Комментарий
Имя таблицы Продажи Если имя таблицы не содержит пробелы или другие специальные символы, имя не должно быть заключено в кавычки.
Имя таблицы "Продажи Канады" Если имя содержит пробелы, вкладки или другие специальные символы, заключите имя в одинарные кавычки.
Полное имя столбца Продажи[сумма] Имя таблицы предшествует имени столбца, а имя столбца заключено в квадратные скобки.
Полное имя меры Продажи[прибыль] Имя таблицы предшествует имени меры, а имя меры заключено в квадратные скобки. В определенных контекстах всегда требуется полное имя.
Неквалифицированное имя столбца [Сумма] Неквалифицированное имя — это только имя столбца в квадратных скобках. Контексты, в которых можно использовать некавалифицированное имя, включают формулы в вычисляемый столбец в той же таблице или в функцию агрегирования, которая сканирует ту же таблицу.
Полный столбец в таблице с пробелами "Канада Продажи"[Qty] Имя таблицы содержит пробелы, поэтому он должен быть окружен одними кавычками.

Прочие ограничения

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

  • Формулы и выражения DAX не могут изменять или вставлять отдельные значения в таблицы.

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

  • При определении вычисляемых столбцов можно вложить функции на любой уровень.

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

Операторы и константы DAX

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

Тип оператора Символ и использование
Оператор круглых скобок () порядок приоритета и группирование аргументов
Арифметические операторы + (добавление)

- (вычитание/

знак)

* (умножение)

/ (деление)

^ (экспонентация)
Операторы сравнения = (равно)

> (больше чем);

< (меньше чем);

>= (больше или равно);

<= (меньше или равно).

<> (не равно)
Оператор объединения текста & (объединение)
Операторы логики && (и)

|| (или)

Типы данных

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

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

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

Важно!

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

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

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

Дата и время

DAX сохраняет значения даты и времени с помощью типа данных datetime, используемого Microsoft SQL Server. Формат datetime использует число с плавающей запятой, где значения даты соответствуют целочисленной части, представляющей количество дней с 30 декабря 1899 года. Значения времени соответствуют десятичной части значения даты, в которой часы, минуты и секунды представлены десятичными дробями дня. Функции даты и времени DAX неявно преобразуют аргументы в тип данных datetime.

Примечание.

Точное максимальное значение DateTime, поддерживаемое DAX, — 31 декабря 9999 г., 00:00:00.

Литерал даты и времени

Начиная с версии Power BI Desktop за август 2021 г., значения даты и даты и времени DAX можно указать в виде литерала в формате dt"YYYY-MM-DD"или dt"YYYY-MM-DD hh:mm:ss"dt"YYYY-MM-DDThh:mm:ss". При указании в качестве литерала использование функций DATE, TIME, DATEVALUE, TIMEVALUE в выражении не требуется.

Например, следующее выражение использует функции DATE и TIME для фильтрации по OrderDate:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > (DATE(2015,1,9) + TIME(2,30,0)) &&[OrderDate] < (DATE(2015,12,31) + TIME(11,59,59))
)

То же выражение фильтра можно указать в виде литерала:

EVALUATE
FILTER (
        FactInternetSales,
        [OrderDate] > dt"2015-1-9T02:30:00" && [OrderDate] < dt"2015-12-31T11:59:59"
)

Примечание.

Формат литерала daX и даты и времени не поддерживается во всех версиях Power BI Desktop, Analysis Services и Power Pivot в Excel. Новые и обновленные функции DAX обычно представлены в Power BI Desktop, а затем включены в службы Analysis Services и Power Pivot в Excel.