Modelo de Datos y Relaciones
El modelo de datos es el corazón de Power BI. Define cómo se conectan las tablas entre sí y determina cómo fluyen los filtros en tus visualizaciones.
¿Qué es un modelo de datos?
Un modelo de datos es un conjunto de tablas relacionadas que representan la realidad del negocio. En Power BI, el modelo define:
- Qué tablas existen.
- Cómo se relacionan (claves primarias y foráneas).
- En qué dirección fluyen los filtros.
Esquema Estrella (Star Schema)
El patrón más recomendado para Power BI es el esquema estrella:
┌──────────┐
│ DimFecha │
└────┬─────┘
│
┌──────────┐ │ ┌───────────┐
│DimProducto├──┼──┤FactVentas │
└──────────┘ │ └─────┬─────┘
│ │
┌────┴─────┐ │
│DimCliente│──┘
└──────────┘
- Tabla de hechos (Fact): Contiene las métricas numéricas (ventas, cantidades, montos). Tiene muchas filas.
- Tablas de dimensión (Dim): Contienen los atributos descriptivos (nombres, categorías, fechas). Tienen pocas filas.
Crear relaciones
En la Vista de Modelo, arrastra un campo de una tabla a otra para crear la relación:
Productos.ID ──── Ventas.ProductoID
Clientes.ID ──── Ventas.ClienteID
Fecha.Fecha ──── Ventas.FechaVenta
Propiedades de las relaciones
Cardinalidad
| Tipo | Descripción | Ejemplo |
|---|---|---|
| 1:M (Uno a muchos) | Lo más común. Una fila en la dimensión se relaciona con muchas en la tabla de hechos | Un producto → muchas ventas |
| 1:1 (Uno a uno) | Cada fila tiene exactamente una coincidencia | Empleado → detalle de nómina |
| M:M (Muchos a muchos) | Requiere tabla puente. Úsalo con cuidado | Estudiante ↔ Curso |
Dirección del filtro cruzado
Producto ──(1:M)──► Ventas
│
▼ Filtro fluye en esta dirección
- Single (Unidireccional): El filtro va de la dimensión a la tabla de hechos. Recomendado.
- Both (Bidireccional): El filtro va en ambas direcciones. Puede causar ambigüedad; evítalo cuando sea posible.
Tabla de fechas
Toda base de análisis temporal necesita una tabla de fechas (calendario) dedicada:
Calendario =
ADDCOLUMNS(
CALENDARAUTO(),
"Año", YEAR([Date]),
"Mes", FORMAT([Date], "MMMM"),
"MesNumero", MONTH([Date]),
"Trimestre", "Q" & FORMAT([Date], "Q"),
"DiaSemana", FORMAT([Date], "dddd"),
"DiaSemanaNum", WEEKDAY([Date], 2),
"AñoMes", FORMAT([Date], "YYYY-MM")
)
Márcala como tabla de fechas en Power BI: clic derecho sobre la tabla → Marcar como tabla de fechas.
Relaciones inactivas
Power BI solo permite una relación activa entre dos tablas. Si necesitas más (por ejemplo, FechaVenta y FechaEnvío apuntando a la misma tabla de calendario), la segunda será inactiva.
Para usarla en DAX:
Ventas por Envío =
CALCULATE(
SUM(Ventas[Monto]),
USERELATIONSHIP(Ventas[FechaEnvío], Calendario[Date])
)
Roles de datos
Puedes asignar categorías de datos a columnas para mejorar las visualizaciones:
- Categoría geográfica: País, Estado, Ciudad, Latitud, Longitud.
- URL de imagen: Para mostrar imágenes en tablas.
- URL web: Para crear enlaces clickeables.
Jerarquías
Crea jerarquías para navegación drill-down:
Geografía:
└── País
└── Estado
└── Ciudad
Tiempo:
└── Año
└── Trimestre
└── Mes
└── Día
En las visualizaciones, puedes hacer drill-down/drill-up por los niveles de la jerarquía.
Errores comunes en el modelo
| Error | Problema | Solución |
|---|---|---|
| Relaciones M:M sin tabla puente | Resultados incorrectos | Crear tabla puente |
| Filtros bidireccionales innecesarios | Rendimiento y ambigüedad | Usar unidireccional |
| Tabla de hechos como filtro de dimensión | Modelo invertido | Reestructurar con star schema |
| Sin tabla de fechas | Time Intelligence no funciona | Crear tabla calendario |
| Columnas de fecha como texto | No hay jerarquía temporal | Convertir a tipo Date |
Resumen
Un buen modelo de datos usa esquema estrella con tablas de hechos y dimensiones claras. Las relaciones definen cómo fluyen los filtros. Siempre crea una tabla de fechas dedicada y prefiere relaciones unidireccionales 1:M.