📂 В этой статье вы узнаете об особенностях применения DAX в Smart Data Hub, какие функции и операторы поддерживаются, отличия в синтаксисе.
«DAX» (Data Analysis eXpressions) — буквально, выражения (для) анализа данных.
DAX представляет собой функциональный язык запросов, разрабатываемый и поддерживаемый компанией Microsoft, но при этом не является языком программирования. С точки зрения семантики выражения описываются формулами. Используется в «Power BI Desktop», «SQL Server Management Studio», «Power Pivot» (надстройка в «Excel»), «Visual Studio» и некоторых других средах.
В совокупности, «DAX» — это набор функций, операторов и констант, которые можно использовать в формуле или выражении, чтобы подсчитывать и возвращать одно или несколько значений. Говоря проще, «DAX» помогает создавать новую информацию из данных, обращаясь к уже имеющейся модели, при этом «DAX» позволяет обращаться к отфильтрованным данными и производить с ними вычисления. Отличие, от того же «Excel» в том, что «DAX» оперирует столбцами данных или выбранным диапазоном столбца в табличной модели.
В данной статье при упоминании языка программирования DAX имеется в виду DAX-подобный язык, который был реализован для создания параметров и показателей в едином интерфейсе Smart Data Hub.
Ниже мы подробнее опишем возможности и особенности реализации DAX в Smart Data Hub.
🔗 Справочник по выражениям анализа данных (DAX)
🔗 Справочник по DAX в PDF
Советуем также почитать:
Параметры и показатели
Пользовательские параметры и показатели
Авторизуйтесь в аккаунте Smart Data Hub и перейдите в раздел меню «Параметры и показатели» (1) и далее «Добавить параметр/показатель по DAX» (2):
Если на вашем тарифе подключено Суперпредставление (СП), обратите внимание, что реализация Dax-показателей доступна в каждом отдельном представлении, которые потом можно собрать в отчете в СП, но создавать непосредственно в СП — нельзя.
Откроется раздел меню «Создание параметров и показателей».
Если вам по какой-то причине необходимо вернуться назад в меню — нажмите «Назад» или на логотип Smart Data Hub в левом-верхнем углу.
Рабочая область раздела поделена на две части:
1) Слева — область выбора полей из доступных в Хранилище Smart Data Hub: поля с данными из интеграций или столбцы из загруженных таблиц (например «Excel»);
2) Справа — область создания и редактирования параметров и показателей.
1) Поле поиска кодов полей по названию (на латинице) из доступных в Хранилище Smart Data Hub.
2) Раздел Хранилища «Поля», со списком доступных полей на латинице.
Чтобы добавить выбранное поле — дважды кликните по нему, либо, удерживая курсор на выбранном поле, перенесите в рабочую область справа.
3) Название выбранного поля выделяется серым цветом.
4) Поле для создания и редактирования названия формируемого параметра/показателя.
При необходимости название можно отредактировать. В названии поддерживаются русские и английские буквы, допускаются пробелы и различные символы, а также нет чувствительности к регистру.
5) Поле для формирования и редактирования выражения (создание формулы).
6) Поле списка с выбором типа: параметр (dim) или показатель (metric).
Для формирования выражения добавить поле можно пятью способами (см. на скриншоте ниже):
1, 2, 3 — Поле добавляется двойным кликом, кликом на значок или удержанием курсора на выбранное поле (слева) и переносом в область редактирования (справа). После одного из этих действий название поля слева в Хранилище выделится серым цветом — объект перестанет быть доступным.
Обратите внимание, если потом удалить добавленный код поля из поля для выражения, то снова его добавить не получится пока вы не удалите всю область для выражения, нажав на . Это связано с тем, что в вариантах добавления 1, 2 и 3 вы переносите объект целиком, ниже рассмотрены способы добавления в выражение только заголовка.
4 — Также можно добавить поле переносом — нажмите на кнопку Создать параметр или показатель, а затем, удерживая курсор, просто перенесите в поле;
5 — Или просто скопируйте название поля — для этого кликните на кнопку Создать параметр или показатель, затем, скопируйте название кликом на значок и вставьте в поле для выражения. Все необходимые символы (например, скобки) вводятся отдельно.
Если вы когда-то использовали «Excel», то будет проще освоиться — выражения формируются подобным образом и буквально несколькими кликами мыши.
Для создания показателя необходимо написать формулу с использованием синтаксиса, который включает в себя использование операторов (представлены в данной статье) и верных кодов полей (находятся в Хранилище данных: слева при непосредственном создании показателей).
Цифрами на скриншоте обозначены:
1 — Находим поле по названию и добавляем любым способом (см. п. 4 данной инструкции);
2, 3 — Также поле можно добавить копированием…
4, 5 — Выберите тип: параметр (dim) или показатель (metric) и задайте название параметра/показателя;
6 — По завершению нажимаем «Готово».
Чтобы удалить создаваемый параметр/показатель нажмите значок справа от поля с выбором типа параметра/показателя.
Для возврата на предыдущую страницу нажмите «Назад».
Если при создании параметра (или показателя) в выражении не получится выполнить расчет, то в ответ Smart Data Hub выведет модальное окно с ошибкой. И такой параметр или показатель не будет сохранен в системе:
Ниже приведены примеры некоторых агрегатных и логических функций, используемых в Smart Data Hub для формирования выражений анализа данных:
Название функции | Как функция работает |
---|---|
АГРЕГАТНЫЕ ФУНКЦИИ | |
SUM | Складывает все числа в столбце |
SUM([tsena_roznichnaia]) | |
SUM([kolichestvo]) | |
MAX | Возвращает самое высокое числовое значение в столбце |
MAX([tsena_roznichnaia]) | |
MIN | Возвращает наименьшее числовое значение в столбце |
MIN([tsena_roznichnaia]) | |
AVERAGE | Возвращает десятичное число, представляющее среднее арифметическое чисел в столбце |
AVERAGE([tsena_roznichnaia]) | |
COUNT | Подсчитывает количество строк в указанном столбце, содержащем непустые значения |
COUNT([tsena_roznichnaia]) | |
SUMX | |
SUMX(FILTER([gorod] = ‘Москва’),[tsena_roznichnaia]) | Сумма столбца «цена розничная», фильтр — по городу Москва |
MINX | |
MAXX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | Макс.значение столбца «цена розничная», фильтр — по городу Омск |
COUNTX | Подсчитывает количество строк в указанном столбце, содержащем непустые значения |
COUNTX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | Фильтр — по городу Омск, число строк столбца «цена розничная», содержащего непустые значения |
APPROXIMATEDISTINCTCOUNT | Приблизительное количество различных значений в столбце |
APPROXIMATEDISTINCTCOUNT([gorod]) | |
DISTINCTCOUNT | Количество уникальных значений в столбце |
DISTINCTCOUNT([tsena_roznichnaia]) | |
COUNT | Подсчитывает количество строк в указанном столбце, содержащих непустые значения |
COUNT([gorod]) | |
COUNT([tsena_roznichnaia]) | |
AVERAGEX | Возвращает десятичное число, представляющее среднее арифметическое чисел в столбце |
AVERAGEX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | |
ЛОГИЧЕСКИЕ ФУНКЦИИ | |
NOT | |
SUMX(FILTER(NOT([gorod] = ‘Москва’)),[tsena_roznichnaia]) | Сумма по показателю «Цена розничная», без учета города Москва |
OR | |
SUMX(FILTER(OR(([gorod] = ‘Омск’),([gorod] = ‘Саратов’))),[tsena_roznichnaia]) | Сумма по показателю «Цена розничная» для городов Омск или Саратов |
AND | |
SUMX(FILTER(AND([gorod] = ‘Омск’,[kol_vo] = ‘1’)),[tsena_roznichnaia]) | Сумма по показателю «Цена розничная» по двум условиям: город=Омск и кол-во=1 |
Ниже приведен перечень агрегатных, логических, математических и текстовых функций поддерживаемых в Smart Data Hub в сравнении с таковыми в «Microsoft». Для удобства список функций сведен в таблицы.
Название функции в Smart Data Hub | Название функции в Microsoft | Как функция работает |
---|---|---|
APPROXIMATEDISTINCTCOUNT | APPROXIMATEDISTINCTCOUNT | Приблизительное количество уникальных значений в столбце. |
APPROXIMATEDISTINCTCOUNT([gorod]) | ||
APPROXIMATEDISTINCTCOUNT([region]) | ||
APPROXIMATEDISTINCTCOUNTX | Не реализовано | Приблизительное количество уникальных значений в столбце, с фильтром. |
APPROXIMATEDISTINCTCOUNTX([gorod]) | ||
APPROXIMATEDISTINCTCOUNTX([region]) | ||
AVERAGE | AVERAGE | Возвращает десятичное число, представляющее среднее арифметическое чисел в столбце. |
AVERAGE([tsena_roznichnaia]) | ||
AVERAGE([tsena_optovaia]) | ||
Реализация по запросу* | AVERAGEA | Возвращает среднее арифметическое всех значений в столбце. Обрабатывает текстовые и нечисловые значения. |
AVERAGEX | Одноименная функция реализована иначе, см. ниже «AVERAGEX» | Возвращает десятичное число, представляющее среднее арифметическое чисел в столбце, с фильтром. |
AVERAGEX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | ||
AVERAGEX(FILTER([gorod] = ‘Москва’),[tsena_roznichnaia]) | ||
Реализовано иначе, см. выше «AVERAGE» | AVERAGEX | Возвращает среднее арифметическое набора выражений, вычисленных для таблицы (больше одного столбца). |
COUNT | COUNT | Подсчитывает количество строк в указанном столбце, содержащих непустые значения, притом как для численных значений, так и для строковых. |
COUNT([gorod]) | ||
COUNT([tsena_roznichnaia]) | ||
Реализация по запросу* | COUNTA | Подсчитывает количество строк в указанном столбце, содержащем непустые значения. |
Реализация по запросу* | COUNTAX | Подсчитывает непустые результаты при вычислении результата выражения для таблицы. |
Реализация по запросу* | COUNTBLANK | Подсчитывает количество пустых ячеек в столбце. |
Реализация по запросу* | COUNTROWS | Подсчитывает количество строк в указанной таблице или в таблице, определенной выражением. |
COUNTX | Одноименная функция реализована иначе, см. ниже «COUNTX» | Подсчитывает количество строк в указанном столбце, содержащем непустые значения, с фильтром. |
COUNTX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | Фильтр по городу Омск, число строк столбца «цена розничная», содержащего непустые значения. | |
COUNTX(FILTER([gorod] = ‘Череповец’),[tsena_roznichnaia]) | Фильтр по городу Череповец, число строк столбца «цена розничная», содержащего непустые значения. | |
Реализовано иначе, см. выше «COUNTX» | COUNTX | Подсчитывает количество строк, содержащих число, или выражение, результатом вычисления которого является число, при вычислении выражения для таблицы. |
DISTINCTCOUNT | DISTINCTCOUNT | Подсчитывает количество уникальных значений в столбце. |
DISTINCTCOUNT([tsena_roznichnaia]) | ||
DISTINCTCOUNT([tsena_optovaia]) | ||
Реализация по запросу* | DISTINCTCOUNTNOBLANK | Подсчитывает количество уникальных значений в столбце. |
DISTINCTCOUNTX | Не реализовано | Подсчитывает количество уникальных значений в столбце с фильтром. |
DISTINCTCOUNTX([tsena_roznichnaia]) | ||
DISTINCTCOUNTX([tsena_optovaia]) | ||
MAX | MAXA | Возвращает самое высокое числовое значение в столбце. |
MAX([tsena_roznichnaia]) | ||
MAX([tsena_optovaia]) | ||
Реализовано иначе, см. выше «MAX» | MAX | Возвращает максимальное значение из столбца или из двух скалярных выражений. |
MAXX | MAXX | Вычисляет выражение для каждой строки таблицы и возвращает максимальное числовое значение. |
MAXX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | Макс.значение столбца «цена розничная», фильтр по городу Омск. | |
MAXX(FILTER([gorod] = ‘Омск’),[tsena_optovaia]) | Макс.значение столбца «цена оптовая», фильтр по городу Омск. | |
MIN | MIN | Возвращает наименьшее числовое значение в столбце. |
MIN([tsena_roznichnaia]) | ||
MIN([tsena_optovaia]) | ||
Реализация по запросу* | MINA | Возвращает наименьшее значение в столбце, включая все логические значения и числа, представленные в виде текста. |
MINX | MINX | Возвращает наименьшее числовое значение, полученное в результате вычисления выражения для каждой строки строки. |
MINX(FILTER([gorod] = ‘Омск’),[tsena_roznichnaia]) | Мин.значение столбца «цена розничная», фильтр по городу Омск. | |
MINX(FILTER([gorod] = ‘Череповец’),[tsena_roznichnaia]) | Мин.значение столбца «цена розничная», фильтр по городу Череповец. | |
Реализация по запросу* | PRODUCT | Возвращает произведение чисел в столбце. |
Реализация по запросу* | PRODUCTX | Возвращает произведение значений выражения, вычисляемого для каждой строки в столбце. |
SUM | SUM | Складывает все числа в столбце. |
SUM([kolichestvo]) | ||
SUM([tsena_roznichnaia]) | ||
SUMX | SUMX | Складывает все числа в столбце, с фильтром. |
SUMX(FILTER([gorod] = ‘Москва’),[tsena_roznichnaia]) | Сумма столбца «цена розничная», фильтр по городу Москва. | |
SUMX(FILTER([gorod] = ‘Санкт-Петербург’),[tsena_roznichnaia]) | Сумма столбца «цена розничная», фильтр по городу Санкт-Петербур |
Название функции в Smart Data Hub | Название функции в Microsoft | Как функция работает |
---|---|---|
AND | AND | Проверяет, имеют ли оба аргумента значение TRUE, и возвращает значение TRUE, если оба аргумента имеют значение TRUE. |
Реализация по запросу* | BITAND | Возвращает побитовое «И» двух чисел. |
Реализация по запросу* | BITLSHIFT | Возвращает число, сдвинутое влево на указанное число бит. |
Реализация по запросу* | BITOR | Возвращает побитовое «ИЛИ» двух чисел. |
Реализация по запросу* | BITRSHIFT | Возвращает число, сдвинутое вправо на указанное число бит. |
Реализация по запросу* | BITXOR | Возвращает побитовое «ИСКЛИЛИ» двух чисел. |
Реализация по запросу* | COALESCE | Возвращает первое выражение, которое не дает значение BLANK. |
Реализация по запросу* | FALSE | Возвращает логическое значение FALSE. |
IF | IF | Проверяет условие и возвращает одно значение, если оно выполняется (TRUE), и другое значение, если нет. |
Реализация по запросу* | IF.EAGER | Проверяет условие и возвращает одно значение, если оно выполняется (TRUE), и другое значение, если нет. Используется безотложный (eager) план выполнения, при котором выражения ветвей всегда выполняются вне зависимости от выражения условия. |
Реализация по запросу* | IFERROR | Вычисляет выражение и возвращает указанное значение, если выражение возвращает ошибку |
NOT | NOT | Изменяет FALSE на TRUE или TRUE на FALSE. |
OR | OR | Проверяет, имеет ли один из аргументов значение TRUE, чтобы возвратить значение TRUE. |
Реализация по запросу* | SWITCH | Вычисляет выражение по списку значений и возвращает одно из нескольких возможных результирующих выражений. |
Реализация по запросу* | TRUE | Возвращает логическое значение TRUE. |
XOR | Не реализовано | Возвращает значение тогда, когда одно из условий — TRUE, а другое — FALSE. |
Название функции в Smart Data Hub | Название функции в Microsoft | Как функция работает |
---|---|---|
ABS | ABS | Возвращает абсолютное значение числа. |
ACOS | ACOS | Возвращает арккосинус или обратный косинус числа. |
ACOSH | ACOSH | Возвращает обратный гиперболический косинус числа. |
Реализация по запросу* | ACOT | Возвращает арккотангенс (обратный котангенс) угла. |
Реализация по запросу* | ACOTH | Возвращает обратный гиперболический котангенс угла. |
ASIN | ASIN | Возвращает арксинус или обратный синус числа. |
ASINH | ASINH | Возвращает обратный гиперболический синус числа. |
ATAN | ATAN | Возвращает арктангенс или обратный тангенс числа. |
ATANH | ATANH | Возвращает обратный гиперболический тангенс числа. |
CEILING | CEILING | Округляет число до ближайшего большего целого или ближайшего большего числа, кратного заданной значимости. |
TOSTRING | CONVERT | Преобразует выражение одного типа данных в другой. |
COS | COS | Возвращает косинус заданного угла. |
COSH | COSH | Возвращает гиперболический косинус числа. |
Реализация по запросу* | COT | Возвращает котангенс угла, указанного в радианах. |
Реализация по запросу* | COTH | Возвращает гиперболический котангенс гиперболического угла. |
Реализация по запросу* | CURRENCY | Вычисляет аргумент и возвращает результат в виде денежного типа данных. |
Реализация по запросу* | DEGREES | Преобразует радианы в градусы. |
DIVIDE | DIVIDE | Выполняет деление и возвращает альтернативный результат или выражение BLANK() при делении на 0. |
EVEN | EVEN | Возвращает число, округленное до ближайшего четного целого. |
EXP | EXP | Возвращает число e, возведенное в заданную степень. |
Реализация по запросу* | FACT | Возвращает факториал числа (произведение последовательности 1*2*3*…*, завершающейся заданным числом). |
Реализация по запросу* | FLOOR | Округляет число к нулю до ближайшего числа, кратного заданной значимости. |
Реализация по запросу* | GCD | Возвращает наибольший общий делитель для двух или более целых чисел. |
INT | INT | Округляет число в меньшую сторону до ближайшего целого. |
Реализация по запросу* | ISO.SEILING | Округляет число до ближайшего большего целого или ближайшего большего числа, кратного заданной значимости. |
Реализация по запросу* | LCM | Возвращает наименьшее общее кратное целых чисел. |
Реализация по запросу* | LN | Возвращает натуральный логарифм числа. |
LOG | LOG | Возвращает логарифм числа по заданному основанию. |
LOG10 | LOG10 | Возвращает десятичный логарифм числа. |
Реализация по запросу* | MOD | Возвращает остаток от деления числа на делитель. Результат всегда имеет тот же знак, что и делитель. |
Реализация по запросу* | MROUND | Возвращает число, округленное до нужного кратного. |
Реализация по запросу* | ODD | Возвращает число, округленное до ближайшего нечетного целого. |
PI | PI | Возвращает число Пи (3,14159265358979) с точностью до 15 знаков. |
Реализация по запросу* | POWER | Возвращает результат возведения числа в степень. |
Реализация по запросу* | QUOTIENT | Выполняет деление и возвращает только целую часть результата деления. |
Реализация по запросу* | RADIANS | Преобразует градусы в радианы. |
Реализация по запросу* | RAND | Возвращает случайное число не меньше 0 и меньше 1 с равномерным распределением. |
Реализация по запросу* | RANDBETWEEN | Возвращает случайное число в диапазоне между двумя указанными числами. |
ROUND | ROUND | Округляет число до указанного количества десятичных разрядов. |
Реализация по запросу* | ROUNDDOWN | Округляет число в меньшую сторону, к нулю. |
Реализация по запросу* | ROUNDUP | Округляет число в большую сторону, от нуля. |
SIGN | SIGN | Определяет знак числа, результат вычисления или значение в столбце. |
SIN | SIN | Возвращает синус заданного угла. |
SINH | SINH | Возвращает гиперболический синус числа. |
SQRT | SQRT | Возвращает квадратный корень числа. |
Реализация по запросу* | SQRTPI | Возвращает квадратный корень (число * Пи). |
TAN | TAN | Возвращает тангенс заданного угла. |
TANH | TANH | Возвращает гиперболический тангенс числа. |
Реализация по запросу* | TRUNC | Усекает число до целого путем удаления десятичной или дробной части. |
Название функции в Smart Data Hub | Название функции в Microsoft | Как функция работает |
---|---|---|
Реализация по запросу* | COMBINEVALUES | Объединяет две текстовые строки в одну. |
Реализовано иначе, см. ниже «CONCATENATE» | CONCATENATE | Объединяет две текстовые строки в одну. Объединяемые элементы могут быть текстовыми, численными или логическими значениями, представленными в виде текста, или сочетанием этих элементов. |
CONCATENATE | Одноименная функция реализована иначе, см. выше «CONCATENATE» | Отличие от DAX Microsoft в том, что можно объединять любое количество строк (не только две). А аргументы обязательно должны быть строками. В противном случае нужно произвести приведение типа к строковому с помощью функции TOSTRING. |
Реализация по запросу* | CONCATENATEX | Объединяет результат выражения, вычисляемого для каждой строки в таблице. |
Реализация по запросу* | EXACT | Сравнивает две текстовые строки и возвращает значение TRUE, если они идентичны, и FALSE в противном случае. |
Реализация по запросу* | FIND | Возвращает начальную позицию одной текстовой строки в другой текстовой строке. |
Реализация по запросу* | FIXED | Округляет число до указанного десятичного разряда и возвращает результат в виде текста. |
Реализация по запросу* | FORMAT | Преобразует значение в текст в соответствии с указанным форматом. |
Реализация по запросу* | LEFT | Возвращает указанное количество символов с начала текстовой строки. |
LEN | LEN | Возвращает число символов в текстовой строке. |
LOWER | LOWER | Преобразует все буквы в текстовой строке в нижний регистр. |
MATCH | Не реализовано | Функция похожа на FIND и SEARCH, в Microsoft не реализована. Функция фильтрует по фрагменту числового или буквенного значения. |
Реализация по запросу* | MID | Возвращает строку символов из середины текстовой строки по заданной начальной позиции и длине. |
REPLACE | REPLACE | Функция REPLACE заменяет часть текстовой строки на основе указанного числа символов другой текстовой строкой. |
REPT | REPT | Повторяет текст заданное число раз. |
Реализация по запросу* | RIGHT | Возвращает последний символ или символы в текстовой строке на основе указанного количества символов. |
Реализация по запросу* | SEARCH | Возвращает номер символа, на котором были в первый раз найдены определенный символ или текстовая строка; читается слева направо. |
Реализация по запросу* | SUBSTITUTE | Заменяет существующий текст новым текстом в текстовой строке. |
SUBSTRING | Не реализовано | Возвращает подстроку, начиная с байта по индексу offset, длины length байт. Индексация символов — начиная с единицы. Аргументы offset и length должны быть константами. |
TRIM | TRIM | Удаляет все пробелы из текста, за исключением одиночных пробелов между словами. |
Реализация по запросу* | UNICHAR | Возвращает символ Юникода, на который ссылается числовое значение. |
Реализация по запросу* | UNICODE | Возвращает число (код), соответствующее первому знаку в текстовой строке. |
UPPER | UPPER | Преобразует все буквы в текстовой строке в верхний регистр (прописные). |
Реализация по запросу* | VALUE | Преобразует текстовую строку, представляющую число, в числовой формат. |
_____________________________________
*Для клиентов на коммерческих тарифах.
Сервис поддерживает создание выражений с фильтрацией данных.
Фильтры указываются исключительно внутри выражений (формул). Для фильтрации данных в выражении используется функция «FILTER». Названия функций с фильтрами в Smart Data Hub (обычно) заканчиваются на «Х». Общий вид функции с фильтром выглядит так:
название_функции(FILTER([код_поля_для_фильтрации] = 'условие_фильтрации'),[код_поля, по которому выполняется функция])
SUMX(FILTER([gorod] = 'Москва'),[tsena_roznichnaia])
*// Здесь, сумма столбца "цена розничная", фильтрация строк по городу Москва
MINX(FILTER([gorod] = 'Омск'),[tsena_roznichnaia])
*// Здесь, минимальное значение столбца "цена розничная", фильтрация строк по городу Омск
MAXX(FILTER([gorod] = 'Череповец'),[tsena_roznichnaia])
*// Здесь, максимальное значение столбца "цена розничная", фильтрация по городу Череповец
COUNTX(FILTER([gorod] = 'Краснодар'),[tsena_roznichnaia])
*// Здесь, число строк столбца "цена розничная", содержащего непустые значения, фильтрация по городу Краснодар
В DAX реализована поддержка товаров.
При создании показателя в DAX Smart Data Hub в выражении указываем crm_product_price_str, то есть добавлять «_str» в конце формулы обязательно — эта приставка сообщает сервису что создается показатель товара.
Также важно, чтобы код показателя содержал в названии «product», так как логика показателей по товарам отличается от логики обработки остальных показателей.
SUMX(FILTER([crm_product_category_str] = 'Bioderma'),[crm_product_quantity_str])
Здесь «сумма» в столбце «Количество товара», фильтрация по «Категория товара» — «Bioderma».
Сервис также поддерживает использование кастомных CRM-полей массивов.
DISTINCTCOUNTX(FILTER([data_zapuska_v_proizvodstvo] != 'none'),[idHit])
Здесь уникальные Хиты (idHit), фильтруются по Дате запуска в производство не равной пустому значению (‘none‘), после чего подсчитывается их итоговое количественное значение.
Код (название) кастомного поля указывается именно такой, какой указан в custom_fields без каких-либо приставок.
Рассмотрим несколько примеров из практики создания показателей.
Кейс №1. Показатель по полю-массиву.
Предположим, что нам потребовалось посчитать количество звонков, совершенных с тегом «Продажа». Нам известно, что поле с тегами звонков incoming_lead_tags хранит в себе массивы, значит для формулы будем использовать оператор HAS, а подсчет количества звонков будем вести по уникальному id посетителя visitorId. Тогда получаем, что фильтрация будет осуществляться путем условия HAS([incoming_lead_tags], ‘Продажа’, а общая формула примет следующий вид:
DISTINCTCOUNTX(FILTER(HAS([incoming_lead_tags], 'Продажа')), [visitorId])
Обратите внимание, что поле incoming_lead_tags хранит в себе массивы, поэтому при фильтрации используется оператор HAS, а не знак равенства.
Кейс №2. Показатель по достижению цели с использованием id цели.
Допустим, что нам нужно создать показатель «Количество пользователей, достигших цели Х». Посмотрев в административных ресурсах id цели, сможем с легкостью написать фильтрацию по полю hit_goalIds, в котором в массивах лежат id целей, а считать пользователей будем по их уникальному идентификатору visitorId. Тогда получаем условие фильтрации HAS([hit_goalIds], 55133, где 55133 — это идентификатор искомой цели, а формула будет выглядеть следующим образом:
DISTINCTCOUNTX(FILTER(HAS([hit_goalIds], 55133)), [visitorId])
В примере вместо указания в формуле значения цели «Х» использовали ее id (55133).
Упомянутый кейс может быть полезен в случаях, когда в названии цели присутствуют знаки пунктуации, которые при обработке формулы могут выдавать ошибку синтаксиса.
Кейс №2а. Показатель по достижению любой из перечисленных целей.
Данный пример берет свое начало из описания кейса №2, отличие лишь в том, что добавляется перечисление ряда целей и условие оператора OR, согласно которому совпадение с хотя бы одной любой целью из выбранных является выполнением условия фильтрации. В формуле ниже отражены 4 цели в перечислении. В случае, если вам необходимо составить показатель для иного количества целей, фрагмент формулы «(HAS([hit_goalIds], xxx2)),» может быть как убран, так и подставлен на позицию, отличную от первой и последней, тогда количество открывающих и закрывающих скобок останется неизменным.
DISTINCTCOUNTX(FILTER(OR((HAS([hit_goalIds], xxx1)),(HAS([hit_goalIds], xxx2)),(HAS([hit_goalIds], xxx3)),(HAS([hit_goalIds], xxx4)))),[visitorId])
При работе с подобными формулами главное следить за количеством скобок и правильным местом их расположения.
Кейс №3. Показатель, отображающий процент от общего числа.
Рассмотрим ситуацию, в которой вы хотите создать показатель «Процент количества пользователей, достигших цели Х». В таком случае начальная часть формулы полностью дублирует этапы создания из кейса №2, отличительной особенностью станет добавление в конец формулы фрагмента «/ DISTINCTCOUNT([visitorId]) * 100«, который нужен для деления получившегося числа пользователей, удовлетворяющих условию по достижению конкретной цели, на общее число уникальных пользователей и умножения на 100 для придачи процентного вида.
DISTINCTCOUNTX(FILTER(HAS([hit_goalIds], 55133)),[visitorId]) / DISTINCTCOUNT([visitorId]) * 100
Данный кейс демонстрирует создание показателя с арифметическими операциями, а именно доли от целого посредством деления (символ «/») и умножения.
Кейс №4. Показатель «Количество сделок «Встреча назначена».
В случае необходимости создания показателя, сочетающего в себе множество условий и разных операторов, как например «Количество сделок «Встреча назначена», потребуется пристальное слежение за расположением скобок. Показатель сочетает в себе такие условия, как статус сделки (crm_entity_status) — «ДКС» или (OR) «Встреча назначена» и название воронки сделки (crm_pipeline_name) — «отдел оп». При этом условие с оператором OR прописывается внутри первых скобок — OR(([crm_entity_status] = ‘ДКС’),([crm_entity_status] = ‘Встреча назначена’)), а условие с оператором AND внутри вторых — AND(OR(([crm_entity_status] = ‘ДКС’),([crm_entity_status] = ‘Встреча назначена’)),([crm_pipeline_name] = ‘отдел оп’)), далее осуществляется подсчет по уникальным id сделок (crm_entity_id). Полная формула будет выглядеть следующим образом:
DISTINCTCOUNTX(FILTER(AND(OR(([crm_entity_status] = 'ДКС'),([crm_entity_status] = 'Встреча назначена')),([crm_pipeline_name] = 'отдел оп'))),[crm_entity_id])
На данном примере можно заметить использование знака равенства со строковыми значениями. Это возможно, поскольку в поле лежат строки, а не массивы.
Кейс №5. Показатель ROAS.
Вычисление показателя рентабельности вложений в рекламу (Return on Ad Spend) можно осуществить несколькими способами с использованием функционала создания вычисляемого показателя.
1) При наличии ненулевых значений себестоимости, формула примет вид:
ROAS = (Объем продаж CRM — Себестоимость CRM) / Расход * 100
2) В случае отсутствия значений себестоимости можно использовать следующие вариации формулы:
ROAS = (Объем продаж CRM — Расход) / Расход * 100
ROAS = Объем продаж CRM / Расход * 100
Формулы в данном кейсе отличаются от примеров выше, поскольку для их создания нужно воспользоваться разделом создания вычисляемых показателей, а не Dax-метрик.
Соответственно расчеты проводятся по уже существующим метрикам Объем продаж CRM (crm_deals_cost), Себестоимость CRM (crm_net_cost), Расход (cost) — коды указаны в скобках для проверки, использовать их не нужно.
Кейс №6. Показатель CAC.
Вычисление стоимости привлечения клиента (Customer Acquisition Cost) можно осуществить с использованием функционала создания вычисляемого показателя следующим способом:
CAC = Расход / Покупатели CRM
Для расчетов используются два показателя Расход (cost) и Покупатели CRM (crm_customers). В процессе создания данной метрики нужно использовать названия показателей в разделе добавления вычисляемого показателя.
Кейс №7. Показатель CPL.
Вычисление стоимости лида (Cost per Lead) можно осуществить путем использования функционала создания вычисляемого показателя:
CPL = Расход / Все лиды CRM
В формуле участвуют два показателя — Расход (cost) и Все лиды CRM (crm_all_leads). При реализации данной вычисляемой метрики следует использовать названия показателей, а осуществить сверку по кодам можно в административном ресурсе.
Согласно статистике, чаще всего при создании показателей встречаются следующие ошибки:
При создании вычисляемого показателя по уже созданным DAX-метрикам пользователю доступен широкий ряд функций.
Группа period_N. Функции period_1 и period_2.
Для сравнения значений DAX-показателя по двум периодам и вывода результирующего значения отлично подойдет использование следующей формулы:
period_1(название_dax_показателя) - period_2(название_dax_показателя)
Результатом работы данной формулы будет создание вычисляемого показателя, который отображает разницу значений исходного показателя за первый и второй период.
Причем при написании формулы важно учитывать, что за период 1 принимается самый новый период, а за период 2 самый старый или самый давний.
Например, для выявление изменения значения показателя «А» за две недели 01.01.2024-07.01.2024 и 08.01.2024-14.01.2024 (периоды сравнения должны быть выбраны в отчете двумя отдельными time-кейсами), при условии, что нужно узнать насколько старый период (01-07.01.2024) преобладал над новым (08-14.01.2024), формула примет следующий вид:
period_2(А) - period_1(А)
В результате новый показатель выведет число, которое получается при вычитании из значения показателя «А» за неделю 01-07.01.2024 значение показателя «А» за неделю 08-14.01.2024.
Примечание. При одном периоде в отчете результат метрики обнуляется, а при 2+ периодах логика сохраняется, выбирается самое новое значение и следующее за ним старое.
Группа rewrite. Функции PreRewrite и Rewrite.
Для вывода последнего значения записи, лежащей в Базе Данных, потребуется функция Rewrite и следующая формула:
Rewrite(название_dax_показателя)
В результате получим значение метрики в последней статусной строке.
Для вывода последнего значения записи с условием (фильтром), потребуется функция PreRewrite и следующая формула:
PreRewrite(название_dax_показателя)
В результате получим значение метрики в последней строке, удовлетворяющей фильтру. Например, на DAX был создан показатель «Б» с суммой значения кастомного поля с кодом CRM_CUSTOM_tekh_marzha_sdelki при условии фильтрации по успешным строкам сделки (условие [crm_markers]=’success_lead’):
SUMX(FILTER([crm_markers]='success_lead'),[CRM_CUSTOM_tekh_marzha_sdelki])
Тогда Rewrite(Б) покажет последнее значение поля CRM_CUSTOM_tekh_marzha_sdelki в Базе Данных, а PreRewrite(Б) покажет то последнее значение поля CRM_CUSTOM_tekh_marzha_sdelki, где в строке сделки стоит статус success_lead.