Ранжирование данных?

Как максимально быстро и удобно проранжировать данные по признаку? Сделать ТОП-5/10/15 по продуктам/типам продукции/видам и т.д.
Помню, что в конструкторе есть сценарий вывода ТОПа на лету (даже с формированием группы “Остальные”).
Но есть кейсы, где это нужно определить именно заранее до отрисовки фронта.
Есть формулы в констукторе sdk / dremio? Если нет, какие ворэраунды?

Если у вас 2 поля значение (например, items_sold) и признак (item_id) в таблице (например, sales_details), то чтобы вывести топ 5 (или 10, 20 по аналогии) можно написать следующую формулу

SELECT TOP 5 item_id , items_sold
FROM sales_details ORDER BY items_sold DESC

Если у вас есть пример датасета, приложите его пожалуйста сюда в переписку и смогу подсказать поточнее с формулой определения топов и ранжирования

@Pavel_K спасибо за комментарий!
Это формула для dimension,верно? Где его можно сделать с такой формулой: в expression sdk?

Эту формулу можно применить на уровне Dremio, поможет создать небольшой датасет сразу из TOP-ов. И его уже использовать для визуализации.

Но есть более сложные кейсы, например.
Представьте у Вас есть датасет, состоящий из Роли Проект, Компетенции и Количества людей, которые обладают в рамках роли той или иной компетентностью:

И стоит задача определить ТОП-5 компетенции (то есть это те компетенции, которыми владеют больше всего людей)

Для решения, пройдем следующие шаги:

  1. Отсортируем наш датасет по полям project_role, numbers_employee_id
    order by project_role, numbers_employee_id desc

  2. Добавим новое поле (num_range) с номером строки в рамках project_role
    row_number() over (PARTITION BY project_role order by numbers_employee_id desc)

Получим следующий датасет:

Далее

  1. Оставим только наш ТОП-5 Компетенции в рамках роли, отфильтровав поле num_range
    where num_range <= 5

Не претендую, что это один и единственный способ реализации, могут быть и другие.