📐

Fundamentos del Modelado de Datos

Tablas de hechos y dimensiones, granularidad, cardinalidad y normalización — los conceptos que todo profesional Power BI debe dominar antes de tocar DAX

Principiante
📊

Tablas de Hechos vs Tablas de Dimensiones

¿Qué son las tablas de hechos?

Las tablas de hechos contienen las métricas cuantitativas de tu negocio — los números que quieres analizar. Representan eventos o transacciones: ventas, pedidos, llamadas, pagos, clicks.

Características de una tabla de hechos:

  • Muchas filas (millones en proyectos reales)
  • Pocas columnas (principalmente claves foráneas + métricas numéricas)
  • Ejemplos: FactVentas, FactPedidos, FactInventario

Ejemplo de tabla de hechos:

-- FactVentas
IDFecha | IDCliente | IDProducto | IDTienda | Cantidad | PrecioUnitario | Descuento
20240115 | 1042 | 507 | 3 | 2 | 29.99 | 0.10

¿Qué son las tablas de dimensiones?

Las tablas de dimensiones contienen el contexto descriptivo de los hechos — las perspectivas desde las que quieres analizar: qué producto, qué cliente, cuándo, dónde.

Características de una tabla de dimensiones:

  • Pocas filas (cientos o miles, raramente millones)
  • Muchas columnas de atributos descriptivos
  • Ejemplos: DimCliente, DimProducto, DimFecha, DimTienda

Tabla de Hechos

  • Datos cuantitativos
  • Muchas filas
  • Pocas columnas
  • Claves foráneas
  • Crece constantemente

Tabla de Dimensión

  • Datos descriptivos
  • Pocas filas
  • Muchas columnas
  • Clave primaria
  • Cambia poco
💡 Tip kawaii: Una regla fácil para distinguirlas: si la tabla responde a "¿cuánto?" o "¿cuántas veces?" → es tabla de hechos. Si responde a "¿de qué?", "¿quién?", "¿dónde?" o "¿cuándo?" → es dimensión. 🌸
🔍

Granularidad

¿Qué es la granularidad?

La granularidad define el nivel de detalle de cada fila en tu tabla de hechos. Es la decisión más importante al diseñar un modelo: ¿qué representa exactamente una fila?

Ejemplos de granularidad:

  • Granularidad de línea de pedido: una fila = un producto dentro de un pedido
  • Granularidad de pedido: una fila = un pedido completo (varios productos agregados)
  • Granularidad diaria: una fila = ventas totales del día por tienda

¿Cuál elegir?

Siempre el nivel de detalle más granular que necesites. Un modelo a nivel de línea de pedido puede agruparse para ver ventas diarias, mensuales o anuales. Al revés no es posible — no puedes desagregar datos ya agregados.

⚠️ Ojo con esto: Mezclar granularidades distintas en la misma tabla de hechos es una fuente habitual de errores en los cálculos. Si tienes datos a nivel diario y a nivel mensual, créalos en tablas separadas.
🔢

Cardinalidad

¿Qué es la cardinalidad?

La cardinalidad describe el número de valores únicos en una columna. En Power BI, la cardinalidad tiene un impacto directo en el rendimiento del modelo y en el tamaño del archivo.

Alta cardinalidad (problemática):

  • Columnas como IDTransaccion, FechaHora, Email — cada fila es única
  • El motor VertiPaq no comprime bien estas columnas
  • El archivo PBIX crece y las consultas son más lentas

Cómo reducir cardinalidad:

  • Eliminar columnas de alta cardinalidad que no uses en análisis
  • Redondear fechas/horas: guardar solo fecha si la hora no importa
  • Agrupar valores raros en una categoría "Otros"
  • Usar enteros en lugar de texto como claves (1 en vez de "PROD-001")
📋

Normalización vs Desnormalización

Normalización en bases de datos

Las bases de datos transaccionales (OLTP) se diseñan normalizadas: sin datos duplicados, con tablas separadas para cada entidad y relaciones entre ellas. Esto es ideal para operaciones de escritura pero no para análisis.

Desnormalización para análisis (OLAP)

Para Power BI, queremos modelos desnormalizados estratégicamente: dimensiones planas con todos los atributos en una sola tabla para facilitar el análisis y reducir los JOINs en tiempo de consulta.

Ejemplo práctico:

-- Base de datos normalizada (3 tablas)
Producto (IDProducto, Nombre, IDCategoria)
Categoria (IDCategoria, NombreCategoria, IDSubcategoria)
Subcategoria (IDSubcategoria, NombreSubcategoria)

-- Dimensión desnormalizada para Power BI (1 tabla)
DimProducto (IDProducto, Nombre, Categoria, Subcategoria)

En Power BI, la dimensión plana rinde mejor porque VertiPaq puede comprimirla eficientemente sin necesidad de JOINs costosos en tiempo de consulta.

🔑

Claves Primarias y Foráneas

Clave primaria (Primary Key)

La clave primaria identifica de forma única cada fila en una tabla de dimensión. Debe ser:

  • Única: sin valores duplicados
  • Sin nulos: cada fila tiene un valor
  • Estable: no cambia con el tiempo

Por convención: IDProducto, IDCliente, IDFecha.

Clave foránea (Foreign Key)

La clave foránea en la tabla de hechos hace referencia a la clave primaria de una dimensión, estableciendo la relación entre ambas tablas.

📌 Buena práctica: Usa siempre claves enteras (INT) como claves primarias y foráneas. Son más pequeñas, rápidas de comparar y el motor VertiPaq las comprime mucho mejor que texto.
🚀 ¡Ya tienes las bases! Con estos conceptos claros, el siguiente paso es entender el patrón de diseño que usarás en el 90% de tus modelos: el Esquema Estrella. También es fundamental dominar las Relaciones entre tablas para conectar correctamente hechos y dimensiones.