que.nom.es

Tabla de hechos: qué es, qué granularidad elegir y tipos que existen

Ingeniería de datos intermedio También llamado: fact table, tabla de hechos
Tabla de hechos: registra cada evento de negocio al grano elegido, con claves que apuntan a las dimensiones y medidas numéricas sumables como unidades e importe; suele tener millones de filas.
Tabla de hechos: registra cada evento de negocio al grano elegido, con claves que apuntan a las dimensiones y medidas numéricas sumables como unidades e importe; suele tener millones de filas.

La tabla de hechos es la tabla central de un modelo dimensional: guarda las medidas numéricas del proceso de negocio y las claves que apuntan a las tablas de dimensión que las contextualizan. En un esquema en estrella es el centro de la estrella.

Una tabla de hechos de ventas contendría, por cada línea vendida, el importe y las unidades —las medidas— más las claves de producto, cliente, tienda y fecha —las dimensiones—. Nada más: los nombres y las descripciones viven en las dimensiones, no aquí.

La granularidad: la decisión que condiciona todo lo demás

El grano es qué representa exactamente una fila. Es la primera decisión del diseño y la más difícil de cambiar después: en un proceso de ventas puede ser una línea de ticket, un ticket completo o las ventas diarias por tienda, y cada opción cierra las preguntas que solo responde la anterior.

Dos reglas gobiernan la elección: usar el grano más fino que el volumen permita sostener —se agrega hacia arriba, pero no se desagrega hacia abajo— y mantener el mismo grano en todas las filas, porque mezclar detalle con filas ya agregadas produce dobles conteos silenciosos.

El desarrollo completo, con los costes del grano fino y cómo declararlo antes de diseñar, está en granularidad.

Los tres tipos

De transacciones. Una fila por evento ocurrido: una venta, un pago, un clic. Es el más común y el más flexible. Solo crece, nunca se actualiza.

De instantáneas periódicas. Una fila por entidad y periodo, tomada a intervalos regulares: el saldo de cada cuenta al cierre de cada mes, el stock de cada artículo cada noche. Responde a preguntas de estado —«cuánto había»— que la de transacciones responde mal, porque obligaría a sumar todo el histórico de movimientos.

De instantáneas acumuladas. Una fila por proceso, con varias fechas que se van rellenando según avanza: fecha de pedido, de preparación, de envío, de entrega. Está pensada para medir duraciones entre hitos, y es la única de las tres que se actualiza en lugar de solo insertar.

Tipos de medida (y la trampa de las semiaditivas)

  • Aditivas: se pueden sumar por todas las dimensiones. El importe vendido es el caso típico.
  • Semiaditivas: se pueden sumar por unas dimensiones pero no por otras. Un saldo se suma entre cuentas, pero no entre periodos —sumar el saldo de enero y el de febrero no significa nada—.
  • No aditivas: no se pueden sumar nunca. Los porcentajes y los ratios entran aquí: hay que guardar el numerador y el denominador por separado y calcular el ratio al final.

Las semiaditivas son el origen de buena parte de los informes mal calculados, porque la herramienta suma alegremente por defecto y el resultado parece plausible.

Hechos sin medidas

Existe un caso que confunde al principio: la tabla de hechos sin ninguna medida numérica, solo con las claves de dimensión. Sirve para registrar que algo ocurrió —un alumno asistió a una clase, un producto estuvo en promoción— cuando el hecho relevante es la ocurrencia misma. Se analiza contando filas.

La contraparte de esta tabla son las dimensiones, cuyo tratamiento del cambio en el tiempo se resuelve con dimensiones de cambio lento. Y el conjunto de ambas es lo que consume un cubo OLAP, materializado o virtual.

En el directorio de plataformas de datos de Dataprix hay fichas y análisis de los motores donde se implementan estos modelos, y el encaje del modelado en el diseño global está en la guía de arquitectura de datos.

Contenido elaborado con asistencia de inteligencia artificial — Equipo Editorial Dataprix. Verifica la información antes de tomar decisiones.