Оформление
Рецепты аналитика
Готовые разборы задач, которые обычно спрашивают первыми: доля, накопление, ранг, средний чек. У каждого — формула, проверенная на демо-витрине, и числа, которые она вернула. В конце — честный список того, что в текущей версии не собирается.
Формулы пишутся в вычисляемом поле — в датасете, если результат нужен нескольким виджетам, или в самом виджете, если он нужен один раз.
Данные в примерах. Везде используется одна и та же демо-витрина интернет-магазина: таблица заказов 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-C | 36,7 % |
| Аксессуары | Наушники TWS | 33,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) — это расчёт уровня детализации, подзапрос, а не окно |
| Отчёт по сменам | Часовой разрез строится, только если в поле есть время: у поля типа «дата» без времени час взять неоткуда — Типы данных |
Перечисленное относится к текущей версии платформы.
Что дальше
- Справочник функций — все 133 функции с примерами.
- Вычисляемые поля — где писать формулу и как её проверить.
- Поля, фильтры и сортировка — отбор внутри виджета.