Skip to content

Уровень детализации (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, выручку по всем категориям. Так считают долю выбранного среди всех: числитель отфильтрован, знаменатель — нет. Если поле фильтра само лежит в разрезе виджета, разницы не будет: строка «Компьютеры» и так содержит только компьютеры.

Что дальше ​