Добавить возможность редактировать состав доступных значений фильтров

В ходе реализации проектов неоднократно возникала необходимость исключать отдельные значения из списка доступных значений фильтров, в частности пустые значения (NULL).

Проблема особенно актуальна для моделей данных, объединяющих несколько групп показателей с различной детализацией и разным набором применимых полей-справочников.

В таких моделях отсутствие значений отдельных измерений является корректным с точки зрения структуры данных, однако приводит к появлению пустых значений в пользовательских фильтрах.

При этом исключать соответствующие записи из модели нельзя, поскольку они участвуют в расчёте показателей.

Пример 1. Управление строительством

Модель объединяет две группы показателей:

  1. Физические объёмы, расчётные трудозатраты и стоимость работ - с детализацией по объектам строительства, маркам, чертежам, конструктивным элементам и подрядчикам.
  2. Количество персонала и техники на строительной площадке - с детализацией только по объектам строительства и подрядчикам.

Для второй группы показателей значения измерений «Марка», «Чертёж» и «Конструктивный элемент» отсутствуют, поскольку такая детализация к ним неприменима.

В результате в фильтрах по указанным измерениям появляется пустое значение, которое заказчик хочет исключить из списка выбора без удаления соответствующих данных из модели.

Пример 2. HR-аналитика и бюджетирование

Модель объединяет три группы показателей:

  1. Начисления и удержания - с детализацией по сотрудникам, позициям штатного расписания, бюджетным категориям и категориям начислений.
  2. Численность персонала - с детализацией по позициям штатного расписания.
  3. HR-бюджет — с детализацией только по бюджетным категориям.

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

Заказчику необходимо скрыть эти значения, сохранив корректный расчёт всех групп показателей.

Предлагаемое улучшение

Добавить возможность настройки состава доступных значений фильтра независимо от состава данных модели.

В частности, предусмотреть:

  1. Возможность исключения пустых значений (NULL ) из списка доступных значений фильтра.
  2. Возможность исключения произвольных значений из списка доступных значений фильтра.
  3. Сохранение исключённых значений в исходных данных и их участия в расчётах показателей.
  4. Применение настроек на уровне конкретного фильтра без изменения данных модели и других фильтров, использующих то же измерение.

Ожидаемое поведение

При отсутствии активных пользовательских фильтров:

  • Все виджеты рассчитывают показатели по полному набору данных модели с учётом RLS и других действующих ограничений.
  • Исключение значений из списка доступных значений фильтра не влияет на расчёт показателей.
  • Показатели, для которых отдельные измерения неприменимы, продолжают отображаться в полном объёме.

При применении пользовательского фильтра:

  • Фильтр ограничивает контекст расчёта показателей в соответствии с выбранными значениями.
  • Если для определённой группы показателей отсутствуют записи, соответствующие выбранному значению измерения, результат расчёта по этой группе становится пустым (либо нулевым в зависимости от логики показателя).
  • Скрытые из списка выбора значения не должны автоматически исключаться из расчётов других показателей.

Принципиальное требование: настройка видимости значений в фильтре должна влиять только на доступные пользователю варианты выбора, но не должна автоматически ограничивать набор данных, используемых для расчёта показателей.