Перейти к содержанию

Кейс с агрегациями (выбор уровня агрегации по периоду)

Настройка предварительно агрегированной аналитической витрины

Описание структуры данных

Имеется таблица с тремя полями:

  • Дата — календарная дата.
  • Уровень — уровень агрегации данных:
    • D — дневной уровень,
    • W — недельный уровень,
    • M — месячный уровень.
  • Продажи — сумма продаж на соответствующем уровне агрегации.

Пример содержимого таблицы

Дата Уровень Продажи
2025-02-01 M 11000000
2025-02-01 D 420000
2025-02-08 W 2900000
2025-02-08 D 420000

Задача

Разработать логику выбора корректного уровня агрегации в зависимости от запроса пользователя. Для этого используется следующая таблица соответствий:

Фильтр по Детализация по Уровень агрегации
Месяцу M
Неделе W
Дню D
Месяцу M
Неделе W
Дню D
Месяцу Неделе W
Месяцу Дню D
Неделе Дню D
Дню Неделе W
Дню Месяцу M

Правила обработки запроса

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

Условие Текст Пояснение
hasDateFilterFactWithFormat(month) and not hasDateDetailFact() Уровень агрегации M Присутствие фильтра по месяцу и отсутствие какой-либо детализации → уровень агрегации M
hasDateFilterFactWithFormat(week) and not hasDateDetailFact() Уровень агрегации W Присутствие фильтра по неделе и отсутствие какой-либо детализации → уровень агрегации W
hasDateFilterFactWithFormat(date) and not hasDateDetailFact() Уровень агрегации D Присутствие фильтра по дню и отсутствие какой-либо детализации → уровень агрегации D
hasDateDetailFactWithFormat(month) Уровень агрегации M, по месяцам Присутствие детализации по месяцам → уровень агрегации M и детализация по месяцам
hasDateDetailFactWithFormat(week) Уровень агрегации W, по неделям Присутствие детализации по неделям → уровень агрегации W и детализация по неделям
hasDateDetailFactWithFormat(date) Уровень агрегации D, по дням Присутствие детализации по дням → уровень агрегации D и детализация по дням

Вывод

Предложенная логика полностью покрывает все возможные сценарии, представленные в таблице соответствий. Система корректно определяет нужный уровень агрегации, используя дополнительные факты hasDateFilterFactWithFormat() и hasDateDetailFactWithFormat().