Топ-N значений вместо порогового фильтра

Стандартный оператор фильтрации «Топ» в блоке «Агрегаты» AW BI намеренно спроектирован как пороговый фильтр: он находит значение показателя на N-й позиции и оставляет все строки с этим значением или выше — это осознанное поведение системы, а не техническое ограничение, и у него есть своя логичная область применения. Но если на границе оказывается несколько строк с одинаковым показателем, в отчёт попадут они все — и «топ-8» на практике превращается в 10 строк.

В этой статье разберём, как штатными средствами платформы — расчётным агрегатом с оконной функцией RANK — задать детерминированный топ строго из N строк для тех задач, где нужна именно фиксированная граница, а не пороговое отсечение.

1. Задача: топ-8 производственных линий по числу дефектов

Отдел контроля качества завода ведёт посменный журнал дефектов: на каждой смене на каждой производственной линии фиксируется количество обнаруженных дефектов. Нужен виджет «Топ-8 производственных линий по числу дефектов за месяц» — чтобы направить внимание технологов именно на самые проблемные линии и не распылять ресурсы на разбор всех пятнадцати сразу.

Решение. На первый взгляд задача решается стандартным оператором фильтрации «Топ» в блоке «Агрегаты» за пару кликов, но именно на таких данных с повторными значениями и мы и рассмотрим нюансы применения

2. Как устроен фильтр «Топ» и когда нужна другая логика отсечения

Оператор «Топ» в блоке «Агрегаты» вычисляет значение показателя на N-й позиции сортировки и оставляет в выборке все строки, значение которых равно этому порогу или превышает его.

Такая пороговая логика — осмысленное проектное решение: она отвечает на вопрос «какие строки не хуже, чем N-я по счёту» и честно показывает всех претендентов на границе, не отбрасывая произвольно часть из них при полном равенстве показателя. Для многих задач это ровно то, что нужно: например, при отборе «всех, кто прошёл порог отсечения» — намеренно не хочется терять строку только потому, что она оказалась технически 11-й, хотя её значение идентично значению 10-й строки.

Pasted image 20260717001110

На наших данных по дефектам после агрегации по линиям получается следующая картина (сумма дефектов за месяц по каждой линии, отсортировано по убыванию):

Три линии — «Линия сварки №2», «Линия розлива №1» и «Линия розлива №2» — набрали одинаковое количество дефектов (18) и все честно претендуют на 8-ю позицию. Пороговый фильтр «Топ» с условием ≤ 8 отработает по своей логике: найдёт значение на 8-й позиции (18) и включит в выборку все строки со значением ≥ 18. В результате вместо 8 строк на виджете окажется 10 — и это ожидаемое, а не ошибочное поведение фильтра.

Но у бизнес-задачи может быть другое требование — строго топ-8 строк вне зависимости от совпадений. Для такой задачи в AW BI есть отдельный, тоже штатный, инструмент — расчётный агрегат с оконной функцией RANK, который задаёт фиксированную границу вместо порогового отсечения.

3. Датасет для повторения примера

Для статьи подготовлен файловый источник с посменным журналом дефектов по 15 производственным линиям за июнь 2026 года.

Поле Тип Описание
date Дата Дата смены
line Строка Название производственной линии
shift Строка Смена: «Утренняя», «Дневная», «Ночная»
defects_count Число (целое) Количество дефектов, обнаруженных за смену на линии
defect_type Строка Тип дефекта (пусто, если дефектов не было)

Датасет содержит 1350 строк (15 линий × 30 дней × 3 смены) и специально построен так, чтобы на границе топ-8 естественным образом возник кластер линий с одинаковой суммой дефектов — как часто случается в реальных производственных данных с целочисленными показателями.

4. Пошаговое решение через RANK

Штатный тумблер «топ N без дублей» (как, например, в некоторых других BI-инструментах) в блоке «Агрегаты» отсутствует, но задача полностью решается доступными функциями платформы — через оконную функцию RANK. Подробное описание синтаксиса функций доступно в справочнике функций AW BI.

4.1. Шаг 1. Создать расчётный агрегат с рангом

На вкладке «Данные» в блоке «Расчетные агрегаты» создайте новый агрегат с формулой:

RANK (SUM([defects_count]), TOTAL, ORDER BY SUM([defects_count]) DESC, [line] ASC)

Разбор формулы по частям:

  • SUM([defects_count]) — суммарное число дефектов по линии, это и есть показатель, по которому строим рейтинг;
  • TOTAL — ранг считается по всей выборке целиком, без разбивки на дополнительные группы;
  • ORDER BY SUM([defects_count]) DESC — сортировка по убыванию показателя: линия с наибольшим числом дефектов получает ранг 1;
  • [line] ASC — второе поле сортировки, по алфавиту названия линии. Оно вступает в игру только при равенстве показателя и гарантирует, что ранг всегда уникален — даже если у трёх линий одинаковая сумма дефектов, они получат три разных последовательных ранга (например, 8, 9, 10), а не один общий на троих.

В настройках агрегата укажите тип «Число (целое)».

4.2. Шаг 2. Добавить агрегат в структуру виджета и скрыть его отображение

Добавьте созданный расчётный агрегат в раздел Агрегаты → Столбцы рядом с суммой дефектов. Поскольку сам ранг нужен только для фильтрации и сортировки, а не для отображения зрителю, скройте его отображение соответствующей настройкой в структуре виджета.

Pasted image 20260717001605

4.3. Шаг 3. Настроить фильтр по скрытому полю и отсортировать по нему

Откройте настройки поля и на вкладке «Фильтрация» в блоке «Агрегаты» выберите «Расширенная фильтрация», добавьте условие:

Затем на вкладке «Сортировка» укажите сортировку «По убыванию» по тому же полю созданному — это гарантирует, что в таблице линии будут расположены строго по местам рейтинга: от самой проблемной к менее проблемной.

5. Результат

После применения фильтра в таблице останется ровно 8 строк — граница отсечения работает по уникальному рассчитанному рангу, а не по «плавающему» пороговому значению с дублями. Линия, попавшая на 8-е место, определяется детерминированно: сначала по количеству дефектов, а при полном равенстве показателя — по алфавитному порядку названия линии.

Обратите внимание: «Линия сварки №2» и «Линия розлива №2» с тем же значением 18 в топ-8 больше не попадают — рейтинг однозначно распределил их на 9-е и 10-е места. Технологи получают ровно тот набор линий, который умещается на восьми строках таблицы