Оформление
Уровень детализации (LOD)
Меняют разрез, в котором считается мера, не трогая полки виджета. Пишутся модификатором внутри агрегата, а не отдельным вызовом.
Примеры считаются на демо-датасете «Продажи»: заказы, товары и покупатели. Разрез — категория товара, если не сказано иное.
EXCLUDE
SUM( [ value ] EXCLUDE [ dim ], … )Из измерений виджета убираются перечисленные — так считают долю от целого.
Пример.
SUM([orders.amount] EXCLUDE [products.category])134 683 500 в каждой строке — общая выручка без разреза по категориям. Разделив на неё SUM([orders.amount]), получаем долю категории.
Границы расчётов уровня детализации
Три ограничения текущей версии, о которые спотыкаются чаще всего:
- LOD нельзя положить в измерение. Выражение вроде
MIN([orders.order_date] FIXED [orders.customer_id])на полке категории отвечает «Грейн выражения детальнее виджета — оберните во внешний агрегат». Поэтому поле «месяц первой покупки», а с ним и когортный анализ, сейчас построить нечем. - Вложенные LOD не поддержаны — «Вложенные LOD пока не поддержаны».
- Разные уровни детализации под одним агрегатом тоже не сойдутся: «Под одним внешним агрегатом LOD разных грейнов пока не поддержаны». Разнесите их по отдельным полям.
Здесь и ниже грейн — уровень детализации, с которым считается выражение: перечисленные в скобках измерения и есть его грейн.
FIXED
SUM( [ value ] FIXED [ dim ], … )Агрегат считается со строго заданной группировкой, независимо от измерений виджета.
Пример.
SUM([orders.amount] FIXED)134 683 500 — итог по всей выборке, одинаковый во всех строках. Пустой список группировки и есть «вся выборка».
Со списком измерений группировка задаётся явно:
SUM([orders.amount] FIXED [products.category])Выручка категории — независимо от того, какой разрез стоит у виджета.
INCLUDE
SUM( [ value ] INCLUDE [ dim ], … )К измерениям виджета добавляются перечисленные — агрегат считается детальнее.
Пример.
AVG(SUM([orders.amount] INCLUDE [products.product_name]))Средняя выручка на товар внутри категории: 800 700 у «Аксессуаров». Внешний агрегат обязателен — без него запрос отвечает «Грейн выражения детальнее виджета»: выражение считает подробнее, чем разрез виджета, и лишний уровень некуда деть.
BEFORE FILTER BY
SUM( [ value ] BEFORE FILTER BY [ dim ], … )Агрегат считается так, будто фильтров по перечисленным полям нет. Остальные фильтры и разрез виджета действуют как обычно. В справочнике функций модификатор лежит в разделе Уровень детализации (LOD).
Пример. Разрез — город, фильтр виджета «Категория = Компьютеры».
SUM([orders.amount] BEFORE FILTER BY [products.category])У Екатеринбурга обычная сумма даёт 11 175 000 — выручку по компьютерам, а эта формула — 24 345 000, выручку по всем категориям. Так считают долю выбранного среди всех: числитель отфильтрован, знаменатель — нет. Если поле фильтра само лежит в разрезе виджета, разницы не будет: строка «Компьютеры» и так содержит только компьютеры.
Что дальше
- Все функции списком — каталог с поиском по странице.
- Вычисляемые поля — где и как написать формулу.