SQLLab
Справочник/Методы аналитики/SCD (Slowly Changing Dimensions)
Методы аналитикиПродвинутый

SCD (Slowly Changing Dimensions)

Техники хранения истории изменений атрибутов в измерениях DWH — что делать с фактами, когда, например, город клиента меняется со временем.

Формула расчёта
SCD Type 2: (dimension_key, natural_id, ..., valid_from, valid_to, is_current)

Объяснение

Slowly Changing Dimensions — стандартные подходы к вопросу «пользователь переехал из Москвы в Питер — что делать со старыми фактами (заказами), где он числился жителем Москвы?». Type 1 — просто перезаписать значение, история теряется (годится, когда прошлое значение не важно). Type 2 — не перезаписывать, а добавить новую строку с новым значением и датами действия (valid_from/valid_to, is_current), сохранив старую — история сохраняется полностью, это самый частый выбор в реальных DWH. Реже встречаются: Type 3 хранит текущее и предыдущее значение в отдельных колонках одной строки (только «было/стало», без полной истории); Type 4 выносит историю в отдельную таблицу, оставляя в основной только текущее значение. На практике почти всегда выбирают между Type 1 (история не важна) и Type 2 (нужна полная история).

Числовой пример

Клиент 42 жил в Москве, потом переехал в Питер — SCD Type 2 в dim_customer:

customer_key | customer_id | city   | valid_from | valid_to   | is_current
1            | 42          | Москва | 2024-01-01 | 2025-06-01 | false
2            | 42          | Питер  | 2025-06-01 | NULL       | true

Заказы до июня 2025 ссылаются на customer_key=1 (город на момент заказа), после — на customer_key=2.