Skip to content

Рецепты аналитика ​

Готовые разборы задач, которые обычно спрашивают первыми: доля, накопление, ранг, средний чек. У каждого — формула, проверенная на демо-витрине, и числа, которые она вернула. В конце — честный список того, что в текущей версии не собирается.

Формулы пишутся в вычисляемом поле — в датасете, если результат нужен нескольким виджетам, или в самом виджете, если он нужен один раз.

Данные в примерах. Везде используется одна и та же демо-витрина интернет-магазина: таблица заказов orders (order_id, order_date, customer_id, product_id, quantity, amount, status), товаров products (product_id, product_name, category, price) и клиентов customers (customer_id, customer_name, city, region, segment). Общая выручка витрины — 134 683 500. Те же таблицы разбираются в Начале работы.

Доля в общей выручке ​

Задача. «Сколько процентов даёт каждая категория».

100.0 * SUM([orders.amount]) / SUM(SUM([orders.amount]) TOTAL)

TOTAL — модификатор области окна: он расширяет окно до всей выборки, поэтому знаменатель получается общим итогом независимо от разреза виджета. Все модификаторы разобраны в разделе Область окна.

КатегорияДоля
Компьютеры61,4 %
Мобильные устройства22,2 %
Периферия13,4 %
Аксессуары3,0 %

Умножение на 100.0, а не на 100

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

Доля внутри своей группы ​

Задача. «Какую часть своей категории занимает товар».

100.0 * SUM([orders.amount]) / SUM(SUM([orders.amount]) WITHIN [products.category])
КатегорияТоварДоля в категории
АксессуарыДок-станция USB-C36,7 %
АксессуарыНаушники TWS33,3 %
АксессуарыСумка для ноутбука9,0 %

Поле из WITHIN должно лежать на полке виджета

Иначе запрос отвечает «Измерение '[products.category]' отсутствует в группировках виджета». Окно строится по разрезу виджета, а не по датасету.

Ранг ​

Задача. «Место товара по выручке».

RANK(SUM([orders.amount]), 'desc')

Второй аргумент — направление: 'desc' даёт первое место самому большому значению. Ранг считается по всей выборке виджета; ограничить его группой можно теми же WITHIN и AMONG — Область окна.

Средний чек ​

Задача. «Сколько в среднем приносит один заказ».

SUM([orders.amount]) / COUNTD([orders.order_id])

Именно COUNTD, а не COUNT: в таблице заказов одна строка на позицию заказа, и COUNT посчитал бы позиции. На демо-витрине средний чек по товару «Док-станция USB-C» — 29 400.

Нарастающий итог по месяцам ​

Задача. «Выручка накопленным итогом с начала наблюдений».

RSUM(SUM([orders.amount]))

На полке категории — месяц (поле даты с преобразованием «Месяц»). Результат: каждая точка показывает сумму с начала и до этого месяца включительно, последняя равна общей сумме.

Порядок накопления задаёт измерение, а не сортировка

Оконная функция накапливает значения в порядке самого измерения: по возрастанию даты или по алфавиту. Полка Сортировка переставляет строки уже после расчёта. Для месяцев эти два порядка совпадают, поэтому накопление по времени достоверно.

Для накопления «по убыванию суммы» — а это основа ABC-анализа — результат в текущей версии неверен: см. оконные функции и список ниже.

Отбор по показателю, а не по значению ​

Задача. «Только товары, которые принесли больше миллиона».

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

Для «первых N по выручке» есть отдельная настройка — ограничение измерения по значимости (Top N): она оставляет заданное число значений, отобранных по указанной мере.

Чего в текущей версии не получится ​

Честный список — чтобы не тратить время на обход, которого нет.

ЗадачаЧто мешает
ABC-классификация (товары, дающие 80 % выручки)Нарастающий итог считается не в порядке сортировки, поэтому классы A/B/C получаются неверными. Доля от общего и топ-N при этом работают
Когортный анализ (разрез по месяцу первой покупки)Расчёт уровня детализации нельзя положить в измерение: MIN([orders.order_date] FIXED [orders.customer_id]) отвечает «Грейн выражения детальнее виджета». Значит поле «месяц первой покупки» построить нечем
Вложенные расчёты уровня детализации«Вложенные LOD пока не поддержаны»
Окно внутри окнаRSUM(… TOTAL) отвечает ошибкой источника. Обход: общий итог считать через SUM([orders.amount] FIXED) — это расчёт уровня детализации, подзапрос, а не окно
Отчёт по сменамЧасовой разрез строится, только если в поле есть время: у поля типа «дата» без времени час взять неоткуда — Типы данных

Перечисленное относится к текущей версии платформы.

Что дальше ​