Кейс с агрегациями (выбор уровня агрегации по периоду)¶
Настройка предварительно агрегированной аналитической витрины¶
Описание структуры данных¶
Имеется таблица с тремя полями:
- Дата — календарная дата.
- Уровень — уровень агрегации данных:
- 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().