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


синтаксис DAX

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Заметка

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

Таблицы

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

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

Меры

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

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

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

Столбцы

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

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

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

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

Заметка

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

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

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

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

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

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

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

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

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

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

Другие ограничения

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

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

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

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

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

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

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

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

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

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

/ (деление)

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

> (больше)

< (меньше)

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

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

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

|| (или)

Типы данных

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

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

Однако существуют некоторые ограничения на значения, которые можно успешно преобразовать. Если значение или столбец имеет тип данных, несовместимый с текущей операцией, 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-DDThh:mm:ss"или dt"YYYY-MM-DD hh: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.