(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
Modelação de Dados (Kimball)
Modelação de Dados (Kimball) 2 min

Modelado dimensional Kimball: guía práctica de hechos y dimensiones

João Barros 25 de October de 2024 2 min de lectura

La metodología dimensional de Ralph Kimball es el estándar de referencia para data warehousing desde hace más de 30 años. Sus principios — hechos, dimensiones y Bus Architecture — se aplican igual de bien en SQL Server tradicional, Azure Synapse y Microsoft Fabric.

Hechos vs Dimensiones

TABLA DE HECHOS:
  - Contiene medidas numéricas (ingresos, cantidad, coste)
  - Muchas filas, pocas columnas
  - Claves foráneas hacia todas las dimensiones
  - Granularidad definida: 1 fila = 1 transacción de venta

TABLA DE DIMENSIÓN:
  - Contiene atributos descriptivos (nombre, categoría, región)
  - Pocas filas, muchas columnas
  - Clave surrogate (INT) como PK — nunca la clave natural
  - Desnormalizada (a Kimball no le gusta el snow-flake)

Definir la granularidad — la decisión más importante

Pregunta: "¿Qué representa una fila de la tabla de hechos?"

Granularidad incorrecta: "datos de ventas"
Granularidad correcta: "una fila por línea de venta (line item) en cada factura"

Impacto: si la granularidad es "por factura" y el usuario quiere
análisis por producto, es imposible. Elija siempre la granularidad
más atómica disponible en el origen.

Estructura típica — esquema en estrella

-- Dimensión Cliente (desnormalizada)
CREATE TABLE dbo.DimCliente (
    sk_cliente      INT IDENTITY PRIMARY KEY,   -- surrogate key
    nk_cliente      INT NOT NULL,               -- natural key del origen
    nombre          NVARCHAR(200),
    segmento        VARCHAR(50),
    pais            VARCHAR(100),
    region          VARCHAR(100),               -- desnormalizado (no normalizar en DimPais)
    valid_from      DATE NOT NULL,
    valid_to        DATE NOT NULL,
    is_current      BIT NOT NULL DEFAULT 1
);

-- Tabla de hechos
CREATE TABLE dbo.FactVentas (
    sk_fecha        INT NOT NULL REFERENCES dbo.DimFecha(sk_fecha),
    sk_cliente      INT NOT NULL REFERENCES dbo.DimCliente(sk_cliente),
    sk_producto     INT NOT NULL REFERENCES dbo.DimProducto(sk_producto),
    sk_tienda       INT NOT NULL REFERENCES dbo.DimTienda(sk_tienda),
    ingresos        DECIMAL(18,2) NOT NULL,
    coste           DECIMAL(18,2) NOT NULL,
    cantidad        INT NOT NULL
);

Tabla de fechas — obligatoria

-- Generar tabla de fechas con todos los atributos necesarios
CREATE TABLE dbo.DimFecha (
    sk_fecha        INT PRIMARY KEY,    -- formato YYYYMMDD como INT
    fecha_completa  DATE NOT NULL,
    anio            SMALLINT,
    trimestre       TINYINT,
    mes             TINYINT,
    nombre_mes      VARCHAR(20),
    semana          TINYINT,
    dia_semana      TINYINT,
    nombre_dia      VARCHAR(20),
    es_fin_semana   BIT,
    es_festivo      BIT
);

Conclusión

Kimball funciona porque alinea el modelo con la forma en que los usuarios de negocio piensan en los datos. Cada dimensión es una perspectiva de análisis, cada hecho es un evento de negocio. Esta alineación hace los informes más intuitivos y las consultas más simples de escribir y optimizar.

Compartir: