Попробовать

Особенности применения DAX

📂 В этой статье вы узнаете об особенностях применения 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


Советуем также почитать: 
Параметры и показатели
Пользовательские параметры и показатели

🔢 Содержание статьи:

🖥️ Интерфейс пользователя и сценарии использования

1. Как найти в меню.

Авторизуйтесь в аккаунте Smart Data Hub и перейдите в раздел меню «Параметры и показатели» (1) и далее «Добавить параметр/показатель по DAX» (2):

Если на вашем тарифе подключено Суперпредставление (СП), обратите внимание, что реализация Dax-показателей доступна в каждом отдельном представлении, которые потом можно собрать в отчете в СП, но создавать непосредственно в СП — нельзя.

2. Рабочая область.

Откроется раздел меню «Создание параметров и показателей». 
Если вам по какой-то причине необходимо вернуться назад в меню — нажмите «Назад» или на логотип Smart Data Hub в левом-верхнем углу.

Рабочая область раздела поделена на две части: 
1) Слева — область выбора полей из доступных в Хранилище Smart Data Hub: поля с данными из интеграций или столбцы из загруженных таблиц (например «Excel»);
2) Справа — область создания и редактирования параметров и показателей.

3. Элементы интерфейса.

1) Поле поиска кодов полей по названию (на латинице) из доступных в Хранилище Smart Data Hub.

2) Раздел Хранилища «Поля», со списком доступных полей на латинице.
Чтобы добавить выбранное поле — дважды кликните по нему, либо, удерживая курсор на выбранном поле, перенесите в рабочую область справа.

3) Название выбранного поля выделяется серым цветом.

4) Поле для создания и редактирования названия формируемого параметра/показателя. 

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

5) Поле для формирования и редактирования выражения (создание формулы).

6) Поле списка с выбором типа: параметр (dim) или показатель (metric).

4. Варианты добавления поля.

Для формирования выражения добавить поле можно пятью способами (см. на скриншоте ниже):
1, 2, 3 — Поле добавляется двойным кликомкликом на значок  или удержанием курсора на выбранное поле (слева) и переносом в область редактирования (справа). После одного из этих действий название поля слева в Хранилище выделится серым цветом — объект перестанет быть доступным. 

Обратите внимание, если потом удалить добавленный код поля из поля для выражения, то снова его добавить не получится пока вы не удалите всю область для выражения, нажав на . Это связано с тем, что в вариантах добавления 1, 2 и 3 вы переносите объект целиком, ниже рассмотрены способы добавления в выражение только заголовка.

4 — Также можно добавить поле переносом — нажмите на кнопку Создать параметр или показатель, а затем, удерживая курсор, просто перенесите в поле;
5 — Или просто скопируйте название поля — для этого кликните на кнопку Создать параметр или показатель, затем, скопируйте название кликом на значок  и вставьте в поле для выражения. Все необходимые символы (например, скобки) вводятся отдельно.

5. Формирование выражений.

Если вы когда-то использовали «Excel», то будет проще освоиться — выражения формируются подобным образом и буквально несколькими кликами мыши.

Для создания показателя необходимо написать формулу с использованием синтаксиса, который включает в себя использование операторов (представлены в данной статье) и верных кодов полей (находятся в Хранилище данных: слева при непосредственном создании показателей). 

Цифрами на скриншоте обозначены: 
1 — Находим поле по названию и добавляем любым способом (см. п. 4 данной инструкции);
2, 3 — Также поле можно добавить копированием…
4, 5 — Выберите тип: параметр (dim) или показатель (metric) и задайте название параметра/показателя;
6 — По завершению нажимаем «Готово».

Чтобы удалить создаваемый параметр/показатель нажмите значок справа от поля с выбором типа параметра/показателя.

Для возврата на предыдущую страницу нажмите «Назад».

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

6. Валидация формул

Если при создании параметра (или показателя) в выражении не получится выполнить расчет, то в ответ Smart Data Hub выведет модальное окно с ошибкой. И такой параметр или показатель не будет сохранен в системе:

7Требования к описанию выражений.

⚙️ Функции DAX, применяемые в Smart Data Hub

8Примеры функций для параметров и показателей.

Ниже приведены примеры некоторых агрегатных и логических функций, используемых в 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

9Реализованные функции в Smart Data Hub.

Ниже приведен перечень агрегатных, логических, математических и текстовых функций поддерживаемых в Smart Data Hub в сравнении с таковыми в «Microsoft». Для удобства список функций сведен в таблицы.

9.1. Агрегатные функции.

Название функции в 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]) Сумма столбца «цена розничная», фильтр по городу Санкт-Петербур

9.2 Логические функции.

Название функции в 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.

9.3 Математические функции.

Название функции в 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 Усекает число до целого путем удаления десятичной или дробной части.

9.4 Текстовые функции.

Название функции в 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 Преобразует текстовую строку, представляющую число, в числовой формат.

_____________________________________

*Для клиентов на коммерческих тарифах.

10. Работа с фильтрами.

Сервис поддерживает создание выражений с фильтрацией данных.
Фильтры указываются исключительно внутри выражений (формул). Для фильтрации данных в выражении используется функция «FILTER». Названия функций с фильтрами в Smart Data Hub (обычно) заканчиваются на «Х». Общий вид функции с фильтром выглядит так:

название_функции(FILTER([код_поля_для_фильтрации] = 'условие_фильтрации'),[код_поля, по которому выполняется функция])

10.1 Примеры функций с использованием фильтрации:

SUMX(FILTER([gorod] = 'Москва'),[tsena_roznichnaia])

*// Здесь, сумма столбца "цена розничная", фильтрация строк по городу Москва
MINX(FILTER([gorod] = 'Омск'),[tsena_roznichnaia])

*// Здесь, минимальное значение столбца "цена розничная", фильтрация строк по городу Омск
MAXX(FILTER([gorod] = 'Череповец'),[tsena_roznichnaia])

*// Здесь, максимальное значение столбца "цена розничная", фильтрация по городу Череповец
COUNTX(FILTER([gorod] = 'Краснодар'),[tsena_roznichnaia])

*// Здесь, число строк столбца "цена розничная", содержащего непустые значения, фильтрация по городу Краснодар

11. Работа с товарами.

В DAX реализована поддержка товаров. 
При создании показателя в DAX Smart Data Hub в выражении указываем crm_product_price_str, то есть добавлять «_str» в конце формулы обязательно — эта приставка сообщает сервису что создается показатель товара.

Также важно, чтобы код показателя содержал в названии «product», так как логика показателей по товарам отличается от логики обработки остальных показателей.

11.1 Пример функции с использованием фильтрации по товарному показателю:

SUMX(FILTER([crm_product_category_str] = 'Bioderma'),[crm_product_quantity_str])

Здесь «сумма» в столбце «Количество товара»фильтрация по «Категория товара» — «Bioderma». 

Сервис также поддерживает использование кастомных CRM-полей массивов.

11.2 Пример выражения с кастомным полем:

DISTINCTCOUNTX(FILTER([data_zapuska_v_proizvodstvo] != 'none'),[idHit])

Здесь уникальные Хиты (idHit), фильтруются по Дате запуска в производство не равной пустому значению (‘none‘), после чего подсчитывается их итоговое количественное значение.

Код (название) кастомного поля указывается именно такой, какой указан в custom_fields без каких-либо приставок.

12. Разбор наиболее применимых кейсов создания показателей.

Рассмотрим несколько примеров из практики создания показателей.

Кейс №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). При реализации данной вычисляемой метрики следует использовать названия показателей, а осуществить сверку по кодам можно в административном ресурсе.

13. Перечень допускаемых ошибок и меры по их устранению.

Согласно статистике, чаще всего при создании показателей встречаются следующие ошибки:

  1. Количество открываемых скобок не равно количеству закрываемых скобок (если формула сложная, лучше лишний раз пересчитать скобки).
  2. Количество скобок верное, но закрыли одну не в том месте, в котором предполагает выполнение оператора (если формула сложная и есть сомнения в расположении скобок, правильным решением будет разбить ее в блокноте на составные части и проверить не допущена ли ошибка).
  3. В строковом значении формулы в одинарных кавычках содержатся иные символы пунктуации (в таких случаях правильнее будет использовать не само строковое значение, а его id, как в упомянутом выше кейсе с id цели).
  4. При копировании и вставлении формулы не было замечено наличие знаков табуляции (для проверки необходимо скопировать формулу и вставить в MS Word, включив отображение знаков табуляции).
  5. При составлении формулы использовался код параметра/показателя, а не код поля (во избежание такой ошибки следует брать название кода поля исключительно из Хранилища, которое находится в левой части рабочей области при создании Dax-метрик).
  6. Созданная product/purchase метрика не добавляется в отчет (логика обработки продуктовых метрик требует наличия в коде такого показателя слова product или purchase, для этого при создании необходимо дописать в название метрики нужное слово — product или purchase, которое при желании можно будет в дальнейшем убрать).

14. Взаимодействие DAX-метрик с функциями вычисляемых показателей.

При создании вычисляемого показателя по уже созданным 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.