Saltar al contenido
Datacon Alex— inicio
YouTube
← Glosario

Modelado

Dimensión de cambio lento

en inglés: Slowly Changing Dimension (SCD)

Una dimensión cuyos atributos cambian de vez en cuando, y la decisión de qué hacer con la historia cuando eso pasa. Si un cliente se muda, ¿las ventas viejas se quedan con la dirección anterior o se reescriben?

Un cliente cambia de ciudad. Un producto cambia de categoría. Un vendedor cambia de región.

La pregunta no es técnica, es de negocio: las ventas del año pasado, ¿a qué región pertenecen — a la de entonces o a la de ahora? Las dos respuestas son válidas y llevan a implementaciones distintas.

Tipo 1: sobrescribir

Actualizas el valor y la historia se pierde. Todos los reportes, viejos y nuevos, muestran el valor actual.

UPDATE dim_cliente SET ciudad = 'Monterrey' WHERE id_cliente = 42;

Sirve para corregir errores de captura: si el nombre estaba mal escrito, no quieres conservar la falta de ortografía como dato histórico.

Tipo 2: versionar

Cierras la fila vigente y abres una nueva. El cliente pasa a tener dos renglones, cada uno válido en un periodo. Es el que se usa cuando la historia importa.

-- 1) Se cierra la versión vigente.
UPDATE dim_cliente
SET valido_hasta = CURRENT_DATE - 1, es_vigente = FALSE
WHERE sk_cliente = 8801 AND es_vigente;

-- 2) Se abre una nueva con llave sustituta distinta.
INSERT INTO dim_cliente
  (sk_cliente, id_cliente, ciudad, valido_desde, valido_hasta, es_vigente)
VALUES
  (9427, 42, 'Monterrey', CURRENT_DATE, '9999-12-31', TRUE);

Aquí se ve para qué sirve de verdad la llave sustituta. La tabla de hechos guarda sk_cliente, no id_cliente. Las ventas viejas siguen apuntando a 8801 —con Guadalajara— y las nuevas apuntan a 9427 —con Monterrey—. La historia queda correcta sin tocar un solo renglón de hechos.

Tipo 3: guardar el anterior

Una columna extra con el valor previo. Sirve cuando solo necesitas comparar contra el valor inmediatamente anterior —una reorganización de territorios, por ejemplo— y no toda la historia.

Cuál elegir

Pregúntale al negocio, no al equipo técnico. La pregunta exacta es: "cuando esto cambie, ¿los reportes del año pasado deben cambiar también?". Si la respuesta es no, es tipo 2. Si es sí, tipo 1.

Siguientes en la fila