Modelado
Tabla de hechos
en inglés: Fact Table
La tabla central de un modelo dimensional. Guarda un renglón por cada evento medible del negocio, con las métricas que se suman y las llaves que apuntan a las dimensiones.
Si una tabla contesta "¿cuánto?", es de hechos. Si contesta "¿de qué?" o "¿de quién?", es de dimensión.
Lo primero es la granularidad
Antes de crear una sola columna tienes que poder terminar esta frase: "cada renglón de esta tabla representa...".
- "…una línea de un pedido" → grano fino, máximo detalle.
- "…un pedido completo" → ya perdiste el detalle por producto.
- "…las ventas de una tienda en un día" → agregada, no puedes bajar de ahí.
Elegir mal el grano es el error más caro del modelado, porque no se arregla después: si guardaste el total del pedido, la venta por producto ya no existe y no hay consulta que la reconstruya. En la duda, guarda el grano más fino que puedas.
Tipos de métrica
No todas las columnas numéricas se pueden sumar igual:
- Aditivas: se suman en cualquier dimensión. El importe de una venta.
- Semiaditivas: se suman en unas dimensiones pero no en el tiempo. Un saldo de cuenta: sumar el saldo de enero y el de febrero no significa nada; el promedio sí.
- No aditivas: no se suman nunca. Porcentajes y razones. Guarda el numerador y el denominador por separado y calcula la razón al final.
-- Mal: el promedio de un promedio no es el promedio.
SELECT AVG(margen_pct) FROM hechos_ventas;
-- Bien: guarda los componentes y divide hasta el final.
SELECT SUM(utilidad) / SUM(importe) AS margen_pct
FROM hechos_ventas;
Tres sabores
- Transaccional: un renglón por evento cuando ocurre. El más común.
- Instantánea periódica: una foto del estado cada cierto tiempo. Inventario al cierre de cada día.
- Instantánea acumulada: un renglón por proceso que se va actualizando con cada hito. Un pedido con sus fechas de creado, pagado, enviado y entregado.