Данные сохраняются в таблице фактов в наиболее детализированной форме, чтобы их могли использовать соответствующие отчеты. С другой стороны (как было сказано ранее), типичный запрос к таблице фактов считывает тысячи или даже миллионы строк за один раз, и единственной полезной операцией для такого огромного количества строк является агрегатная функция (сумма, максимум, минимум или среднее значение). Такое различное использование данных может снизить производительность для запросов, если они выполняются над данными низкого уровня (атомарными данными), потому что вычисления, затрагивающие время и ресурсы, будут необходимы для выполнения каждой агрегатной функции.
По этой причине данные низкого уровня в таблице фактов должны заранее суммироваться и сохраняться в промежуточных таблицах. По причине их «агрегатной» информации такие таблицы называются агрегатными таблицами, а весь процесс - агрегацией.
В примере будет показано, как может быть выполнена агрегация данных низкого уровня. Конечный пользователь может захотеть запустить на выполнение незапланированный запрос, который отображает общие продажи организации за последний месяц. Это может привести к тому, что сервер будет суммировать все продажи для каждого дня последнего месяца. Если в среднем существует 500 транзакций по продажам в день в каждом из 500 магазинов организации и данные хранятся на уровне транзакций, то такому запросу может потребоваться чтение 7 500 000 строк (500x500x30 дней) и создание соответствующей суммы для получения результата. Теперь рассмотрим, что произойдет, если данные агрегируются в таблице, которая создается с использованием ежемесячных продаж в магазине. В этом случае таблица будет иметь только 500 строк (итог за месяц для каждого из 500 магазинов), а производительность резко возрастет.