В ходе реализации проектов неоднократно возникала необходимость исключать отдельные значения из списка доступных значений фильтров, в частности пустые значения (NULL).
Проблема особенно актуальна для моделей данных, объединяющих несколько групп показателей с различной детализацией и разным набором применимых полей-справочников.
В таких моделях отсутствие значений отдельных измерений является корректным с точки зрения структуры данных, однако приводит к появлению пустых значений в пользовательских фильтрах.
При этом исключать соответствующие записи из модели нельзя, поскольку они участвуют в расчёте показателей.
Пример 1. Управление строительством
Модель объединяет две группы показателей:
- Физические объёмы, расчётные трудозатраты и стоимость работ - с детализацией по объектам строительства, маркам, чертежам, конструктивным элементам и подрядчикам.
- Количество персонала и техники на строительной площадке - с детализацией только по объектам строительства и подрядчикам.
Для второй группы показателей значения измерений «Марка», «Чертёж» и «Конструктивный элемент» отсутствуют, поскольку такая детализация к ним неприменима.
В результате в фильтрах по указанным измерениям появляется пустое значение, которое заказчик хочет исключить из списка выбора без удаления соответствующих данных из модели.
Пример 2. HR-аналитика и бюджетирование
Модель объединяет три группы показателей:
- Начисления и удержания - с детализацией по сотрудникам, позициям штатного расписания, бюджетным категориям и категориям начислений.
- Численность персонала - с детализацией по позициям штатного расписания.
- HR-бюджет — с детализацией только по бюджетным категориям.
Для второй и третьей групп часть измерений неприменима, что приводит к появлению пустых значений в соответствующих фильтрах.
Заказчику необходимо скрыть эти значения, сохранив корректный расчёт всех групп показателей.
Предлагаемое улучшение
Добавить возможность настройки состава доступных значений фильтра независимо от состава данных модели.
В частности, предусмотреть:
- Возможность исключения пустых значений (
NULL) из списка доступных значений фильтра. - Возможность исключения произвольных значений из списка доступных значений фильтра.
- Сохранение исключённых значений в исходных данных и их участия в расчётах показателей.
- Применение настроек на уровне конкретного фильтра без изменения данных модели и других фильтров, использующих то же измерение.
Ожидаемое поведение
При отсутствии активных пользовательских фильтров:
- Все виджеты рассчитывают показатели по полному набору данных модели с учётом RLS и других действующих ограничений.
- Исключение значений из списка доступных значений фильтра не влияет на расчёт показателей.
- Показатели, для которых отдельные измерения неприменимы, продолжают отображаться в полном объёме.
При применении пользовательского фильтра:
- Фильтр ограничивает контекст расчёта показателей в соответствии с выбранными значениями.
- Если для определённой группы показателей отсутствуют записи, соответствующие выбранному значению измерения, результат расчёта по этой группе становится пустым (либо нулевым в зависимости от логики показателя).
- Скрытые из списка выбора значения не должны автоматически исключаться из расчётов других показателей.
Принципиальное требование: настройка видимости значений в фильтре должна влиять только на доступные пользователю варианты выбора, но не должна автоматически ограничивать набор данных, используемых для расчёта показателей.