Aller au contenu
Transformation et modélisation

Dimensions à variation lente (SCD)

Une SCD gère les attributs de dimension qui changent rarement, comme la ville d'un client. Le type 1 écrase la valeur, le type 2 garde chaque version pour analyser le passé tel qu'il était.

  • slowly changing dimension
  • type 1
  • type 2
  • historique
  • valide_du
  • valide_au
  • snapshot

Syntaxe

Modèle
Type 1 : on écrase l'ancienne valeur          → pas d'historique  UPDATE dim SET attribut = :nouveau WHERE cle_metier = :cle;Type 2 : on ferme la version en cours et on en ajoute une  UPDATE dim SET valide_au = :date, est_courante = 0  WHERE cle_metier = :cle AND est_courante = 1;  INSERT INTO dim (cle_metier, attribut, valide_du, valide_au, est_courante)  VALUES (:cle, :nouveau, :date, NULL, 1);Intervalle semi-ouvert : valide_du <= jour < valide_au (NULL = toujours en cours)

Exemple

Exemple concret
CREATE TABLE dim_client (  client_sk INTEGER PRIMARY KEY,   -- clé de substitution  client_id TEXT,                  -- clé métier  ville TEXT,  valide_du TEXT,  valide_au TEXT,                  -- NULL = version en cours  est_courante INTEGER);INSERT INTO dim_client VALUES (1, 'C42', 'Lyon', '2024-03-01', NULL, 1);-- Le client C42 déménage à Bordeaux le 2026-10-15 : type 2UPDATE dim_client SET valide_au = '2026-10-15', est_courante = 0WHERE client_id = 'C42' AND est_courante = 1;INSERT INTO dim_client (client_id, ville, valide_du, valide_au, est_courante)VALUES ('C42', 'Bordeaux', '2026-10-15', NULL, 1);SELECT * FROM dim_client;-- 1 | C42 | Lyon     | 2024-03-01 | 2026-10-15 | 0-- 2 | C42 | Bordeaux | 2026-10-15 | NULL       | 1-- Une vente du 2026-09-20 reste rattachée à la version lyonnaiseSELECT client_sk, ville FROM dim_clientWHERE client_id = 'C42'  AND valide_du <= '2026-09-20'  AND (valide_au > '2026-09-20' OR valide_au IS NULL);-- 1 | Lyon

À retenir

  1. Choisissez le type attribut par attribut : une faute de frappe corrigée dans un nom relève du type 1, un changement de ville ou de segment commercial qui doit peser sur les analyses relève du type 2.
  2. Au chargement d'un fait, recherchez la version valide à la date du fait et stockez sa clé de substitution : la jointure ultérieure ne dépend plus des dates.
  3. Dans dbt, les snapshots produisent un type 2 automatiquement à partir d'une colonne de date de mise à jour ou d'une comparaison de colonnes.
  4. Piège : fermer l'ancienne version et ouvrir la nouvelle avec des bornes incluses des deux côtés. Le jour du changement appartient alors aux deux versions et les faits de ce jour sont comptés en double.

Voir aussi