Стандартный оператор фильтрации «Топ» в блоке «Агрегаты» AW BI намеренно спроектирован как пороговый фильтр: он находит значение показателя на N-й позиции и оставляет все строки с этим значением или выше — это осознанное поведение системы, а не техническое ограничение, и у него есть своя логичная область применения. Но если на границе оказывается несколько строк с одинаковым показателем, в отчёт попадут они все — и «топ-8» на практике превращается в 10 строк.
В этой статье разберём, как штатными средствами платформы — расчётным агрегатом с оконной функцией RANK — задать детерминированный топ строго из N строк для тех задач, где нужна именно фиксированная граница, а не пороговое отсечение.
1. Задача: топ-8 производственных линий по числу дефектов
Отдел контроля качества завода ведёт посменный журнал дефектов: на каждой смене на каждой производственной линии фиксируется количество обнаруженных дефектов. Нужен виджет «Топ-8 производственных линий по числу дефектов за месяц» — чтобы направить внимание технологов именно на самые проблемные линии и не распылять ресурсы на разбор всех пятнадцати сразу.
Решение. На первый взгляд задача решается стандартным оператором фильтрации «Топ» в блоке «Агрегаты» за пару кликов, но именно на таких данных с повторными значениями и мы и рассмотрим нюансы применения
2. Как устроен фильтр «Топ» и когда нужна другая логика отсечения
Оператор «Топ» в блоке «Агрегаты» вычисляет значение показателя на N-й позиции сортировки и оставляет в выборке все строки, значение которых равно этому порогу или превышает его.
Такая пороговая логика — осмысленное проектное решение: она отвечает на вопрос «какие строки не хуже, чем N-я по счёту» и честно показывает всех претендентов на границе, не отбрасывая произвольно часть из них при полном равенстве показателя. Для многих задач это ровно то, что нужно: например, при отборе «всех, кто прошёл порог отсечения» — намеренно не хочется терять строку только потому, что она оказалась технически 11-й, хотя её значение идентично значению 10-й строки.

На наших данных по дефектам после агрегации по линиям получается следующая картина (сумма дефектов за месяц по каждой линии, отсортировано по убыванию):
Три линии — «Линия сварки №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. Добавить агрегат в структуру виджета и скрыть его отображение
Добавьте созданный расчётный агрегат в раздел Агрегаты → Столбцы рядом с суммой дефектов. Поскольку сам ранг нужен только для фильтрации и сортировки, а не для отображения зрителю, скройте его отображение соответствующей настройкой в структуре виджета.

4.3. Шаг 3. Настроить фильтр по скрытому полю и отсортировать по нему
Откройте настройки поля и на вкладке «Фильтрация» в блоке «Агрегаты» выберите «Расширенная фильтрация», добавьте условие:
Затем на вкладке «Сортировка» укажите сортировку «По убыванию» по тому же полю созданному — это гарантирует, что в таблице линии будут расположены строго по местам рейтинга: от самой проблемной к менее проблемной.
5. Результат
После применения фильтра в таблице останется ровно 8 строк — граница отсечения работает по уникальному рассчитанному рангу, а не по «плавающему» пороговому значению с дублями. Линия, попавшая на 8-е место, определяется детерминированно: сначала по количеству дефектов, а при полном равенстве показателя — по алфавитному порядку названия линии.
Обратите внимание: «Линия сварки №2» и «Линия розлива №2» с тем же значением 18 в топ-8 больше не попадают — рейтинг однозначно распределил их на 9-е и 10-е места. Технологи получают ровно тот набор линий, который умещается на восьми строках таблицы






