LOD-выражения¶
LOD-выражения (Level of Detail) позволяют управлять уровнем детализации при расчете агрегатов. В виджетах простые агрегатные функции вычисляются с группировкой по полям, которые участвуют в построении виджета (находятся в секции Группы). С помощью LOD-выражений группировку для агрегатной функции можно изменить, не добавляя эту категорию в визуализацию. Управление уровнем детализации позволяет добавлять или исключать измерения из группировки, а также использовать вложенные агрегации.
LOD-выражения используются, когда стандартной агрегации по группировкам виджета недостаточно: например, нужно рассчитать долю строки от общей суммы, сравнить значение с итогом по региону, посчитать показатель на более детальном уровне или исключить часть измерений из расчета.
Синтаксис¶
LOD-выражение указывается внутри агрегатной функции после значения, по которому выполняется расчет. Расширенный синтаксис агрегатной функции с использованием LOD-выражений:
<FUNCTION_NAME> (
value_1,
value_2,
...
value_N
FIXED field_1, ..., field_N | INCLUDE field_1, ..., field_N | EXCLUDE field_1, ..., field_N
BEFORE FILTER BY field_1, ..., field_N
)
Уровень детализации в LOD-выражениях задается с помощью указания ключевых слов:
FIXED- данные группируются по явно перечисленным полям (field_1, ..., field_N), игнорируя поля, используемые для группировки в виджете. Если измерения не заданы, то расчёт выполняется без учёта каких-либо измерений;INCLUDE- перечисленные поля (field_1, ..., field_N) добавляются к группировке в виджете. Если измерения не заданы, то группировка эквивалентна той же группировке, что и в виджете;EXCLUDE- перечисленные поля (field_1, ..., field_N) исключаются из группировки в виджете. Если измерения не заданы, то группировка эквивалентна той же группировке, что и в виджете.
Для расширения возможностей функций доступно управление вычислениями до фильтрации. Секция BEFORE FILTER BY указывает, что функция будет ычисляться до фильтрации по перечисленным полям.
Пример¶
Исходные данные: Доступны данные по сегментам, клиентам, месяцам заказа.
Цель: Для каждого сегмента вычислить максимальное количество клиентов в месяц.
Формула:
Используем вложенную агрегацию: сначала посчитаем количество клиентов за каждый месяц, а потом выберем максимальное значение.
В этом примере поле [month], отсутствующее в виджете, добавляется на вложенном уровне. Таким образом, на верхнем уровне агрегация будет вычисляться с группировкой по полю [segment], которое используется в структуре виджета, а вложенная агрегация - по полям [segment] и [month].
Подробнее
Для сверки полученного результата выведем промежуточный результат вложенной агрегации, т.е. сгруппируем показатель количества клиентов по полям Сегмент ([segment]) и Месяц заказа ([month]). И найдем максимальное значение показателя, например, по группе B2C. Оно равно 250, что совпадает с результатом, полученном выше.
Особенности и ограничения при использовании LOD-выраженийи¶
-
LOD-выражения доступны в формулах промежуточного и итогового значений для всех виджетов кроме виджета Сводная таблица.
-
Параметр
EXCLUDEработает противоположно параметруINCLUDE. Чаще всего используется, когда вINCLUDEнеобходимо добавить много измерений и проще исключить меньшую часть. -
Любую агрегацию с
INCLUDEможно заменить на агрегацию сFIXED. Например, в виджете с группировкой по полямSegmentиMonthагрегатSUM(SUM([Sales] INCLUDE [Region]))будет аналогичен агрегатуSUM(SUM([Sales] FIXED [Segment],[Month],[Region])). -
Любую агрегацию с
EXCLUDEможно заменить на агрегацию сFIXED. Например, в чарте с группировкой по измерениямSegmentиMonthпоказательSUM([Sales] EXCLUDE [Month])будет аналогичен показателюSUM([Sales] FIXED [Segment]). -
В LOD-выражениях можно указывать как используемые, так и не используемые в виджете поля. Однако агрегация верхнего уровня должна содержать только поля, которые используются в виджете, т.е. находятся в секции Группы и отображаются в виджете. Для виджета Таблица агрегатов и виджетов, которые основаны на Таблице агрегатов, это все поля в секции Группы. Для остальных виджетов - только поля на верхнем уровне вложенности.
Таким образом, на верхнем уровне нельзя использовать агрегацию с непустым
INCLUDEили сFIXED, содержащим измерения, которые не используются в чарте.Пример:
В виджете с группировкой по
[year]рассчитаем среднюю прибыль по клиентам:✅ Правильно:
❌ Неправильно:
-
Агрегации, находящиеся на одном уровне вложенности, должны быть согласованы. Хотя бы одна из вложенных агрегаций должна содержать все поля детализации, которые есть в других вложенных агрегациях.
В формуле
COUNTD_IF (ANY(), AVG() > 100)-AVGиANYфункции агрегации одного уровня. Если одна из вложенных функций использует детализацию по[field_1], то вторая функция должна обязательно включать детализацию по этому полю.✅ Правильно:
❌ Неправильно:
-
На одном уровне вложенности нельзя одновременно использовать и функцию агрегации, и неагрегированные поля.
Пример:
Рассчитаем количество заказов, сумма выручки по которым в регионе больше 100 млн.
✅ Правильно:
❌ Неправильно:
-
Для расчета итоговых значений, агрегирующих промежуточные агрегаты (а не первичные данные), необходимо использовать LOD-выражения для того, чтобы явно задать вложенную детализацию, соответствующую структуре виджета. Например, если в промежуточной агрегации используется формула
MAX([profit]), в виджете задана группировка по полю[segment]и необходимо в итоговой агрегации получить сумму по промежуточным агрегатам, то формула для итоговой агрегации примет вид:


