2.1Relaciones y modelo de datos
Lo esencial en 30 segundos
- Las relaciones vinculan dos tablas por una columna común (Productos[Código] ↔ Ventas[CódigoProducto]): el modelo propaga los filtros, sin ninguna fórmula.
- Cardinalidad normal: uno a varios (1 → *), del catálogo (lado «1») hacia los hechos (lado «*»); la dirección de filtro única es la norma sana.
- Diagnóstico n.º 1: totales idénticos en todas las filas de un visual = relación ausente o rota — siempre se verifican las relaciones autodetectadas.
Mini-caso continuo — Zineb vincula sus ventas al catálogo de productos
Zineb, controladora de gestión en una pyme agroalimentaria de Argel, debe cruzar sus ventas por categoría de producto, pero sus tablas Ventas y Productos viven cada una por su lado. Aplica la lección: en la vista Modelo, arrastra Ventas[CódigoProducto] sobre Productos[Código] — la línea aparece —, lee la cardinalidad 1:* y la dirección de filtro única, y demuestra con un histograma Categoría × Importe que las dos tablas dialogan. Para ver el síntoma, elimina la relación: todos los totales se vuelven idénticos en cada categoría. La recrea al instante y retiene el diagnóstico n.º 1 para siempre.
Caso autónomo de esta sección: reaparece en el curso, el esquema, el guion y el reto de 48 h de la sección 2.1.
1. Vincular las tablas
Nivel decisivo: el modelo. Sus datos reales llegan en varias tablas (ventas, productos, clientes) que Power BI vincula mediante relaciones: una línea entre dos tablas por una columna común. Una vez puesta la relación, un visual cruza «Denominación producto» e «Importe de las ventas» sin ninguna fórmula — el modelo propaga los filtros. Zineb sustituye así sus antiguos BUSCARV: el filtro circula solo de una tabla a otra.
2. Cardinalidad y dirección
Se lee la cardinalidad (uno a varios en la inmensa mayoría de los casos: UN producto ↔ VARIAS ventas) y la dirección del filtro (del lado «1» hacia el lado «*»). La dirección única es la norma sana; la bidireccional crea ambigüedades y lentitud. Las relaciones autodetectadas al importar siempre deben verificarse en la vista Modelo. Zineb hace doble clic en la línea para leer 1:* y «única» antes de concluir.
3. El diagnóstico n.º 1
El síntoma clásico de una relación ausente o rota: totales idénticos en todas las filas de un visual — cada categoría muestra el mismo total. Se reconoce para toda la vida. Otra causa de fallo de una relación 1:*, del lado «1»: duplicados o vacíos en la columna clave, porque una dimensión tiene una sola fila por elemento. Zineb corrige entonces en Power Query (Eliminar los duplicados, filtrar los nulos).
🔎 Ejemplo concreto — 🔎 Ejemplo concreto — Ventas ↔ Productos
Zineb cruza categoría e importe, dos tablas vinculadas:
Relación: Ventas[CódigoProducto] → Productos[Código] (1:*)
→ visual Categoría (de Productos) × Importe (de Ventas)
las dos tablas dialogan, sin ninguna fórmula.
Eliminar la relación → mismos totales en todas partes (el síntoma).
Lectura: la cardinalidad 1:* la soporta la clave única del lado dimensión (Productos[Código]).
Lección: eliminar la relación hace aparecer totales idénticos — el reflejo de diagnóstico que hay que reconocer.
Vocabulario de la sección
- Relación
- El vínculo entre dos tablas por una columna común (Productos[Código] ↔ Ventas[CódigoProducto]): el canal por el que circulan los filtros.
Ejemplo sencillo: Zineb vincula Ventas y Productos para cruzar categoría e importe.
Lo que no es: dos tablas puestas una al lado de otra, sin línea entre ellas.
Reflejo: dos tablas para cruzar → una relación por la columna clave.
- Cardinalidad uno a varios (1:*)
- El caso estándar: UN producto del catálogo ↔ VARIAS filas de ventas.
Ejemplo sencillo: Zineb lee 1:* en la línea entre Productos y Ventas.
Lo que no es: uno a uno o varios a varios, reservados a otros casos.
Reflejo: 1:* del lado «1» (dimensión) hacia el lado «*» (hechos).
- Dirección del filtro
- Por defecto, el filtro va del lado «1» hacia el lado «*»: filtrar un producto filtra sus ventas.
Ejemplo sencillo: Zineb mantiene la dirección única, sin ambigüedad.
Lo que no es: el modo bidireccional, fuente de lentitud y de errores.
Reflejo: dirección única por defecto; bidireccional = caso muy particular.
- Detección automática
- Power BI adivina ciertas relaciones al importar: hay que verificarlas sistemáticamente.
Ejemplo sencillo: Zineb controla cada relación autodetectada en la vista Modelo.
Lo que no es: una relación supuestamente correcta sin verificación.
Reflejo: relación autodetectada → verificar siempre cardinalidad y dirección.
- Columna clave
- La columna común que soporta la relación: única del lado dimensión, repetida del lado hechos.
Ejemplo sencillo: Zineb se asegura de que Productos[Código] sea única.
Lo que no es: una clave con duplicados o vacíos que bloquea el 1:*.
Reflejo: clave única del lado «1»: limpiar en Power Query si hace falta.
En la práctica — En la práctica — Vincular ventas y catálogo de productos
- Importe una segunda tabla «Productos» (Código, Denominación, Categoría, PrecioUnitario) — créela en Excel si hace falta, como Zineb.
- Vista Modelo: si Power BI no ha creado la relación, arrastre Ventas[CódigoProducto] sobre Productos[Código] — la línea aparece.
- Haga doble clic en la línea: lea la cardinalidad (1:*) y la dirección de filtro (única) — la configuración sana por defecto.
- Prueba por el visual: cree un histograma Categoría × Importe. Elimine la relación para VER el síntoma (mismos totales en todas partes) y luego recréela.
Guion paso a paso — vincular como Zineb (5 min)
1) Importe la tabla Productos junto a Ventas. 2) En la vista Modelo, arrastre Ventas[CódigoProducto] sobre Productos[Código]: la línea aparece. 3) Haga doble clic en la línea y lea la cardinalidad (1:*) y la dirección (única). 4) Cree un histograma Categoría × Importe y compruebe que las dos tablas dialogan. 5) Elimine la relación, observe los totales idénticos en todas partes y luego recréela — el diagnóstico n.º 1 queda anclado.
Si la relación rechaza el 1:*, busque duplicados o vacíos en la clave del lado dimensión y limpie en Power Query.
Plantilla copiar-pegar — mi lista de comprobación de relación
Relación: Ventas[CódigoProducto] → Productos[Código] (1:*)
[ ] Columna clave única del lado dimensión (sin duplicado, sin vacío)
[ ] Cardinalidad leída: 1:*
[ ] Dirección del filtro: única (1 → *)
[ ] Relación autodetectada verificada en la vista Modelo
Diagnóstico: totales idénticos en todas partes → relación ausente o rota.
Cruzar categoría e importe
Zineb vincula Ventas y Productos: el visual Categoría × Importe funciona sin fórmula.
Sustituir un BUSCARV
Zineb ya no escribe ninguna búsqueda: la relación propaga el rótulo del producto desde la dimensión.
Diagnosticar un total congelado
¿Todos los totales idénticos por categoría? Zineb verifica al instante la relación en la vista Modelo.
Limpiar una clave
Una clave con duplicados bloquea el 1:*: Zineb elimina los duplicados del lado dimensión en Power Query.
✓ Buenas prácticas
- Vincular las tablas por la columna clave (única del lado dimensión).
- Mantener la dirección de filtro única (1 → *): reflejo por defecto.
- Verificar toda relación autodetectada en la vista Modelo.
✗ Errores frecuentes
- Dejar una relación autodetectada errónea sin verificar.
- Pasar a bidireccional «para que funcione» (ambigüedades, lentitud).
- Una clave del lado dimensión con duplicados o vacíos (bloquea el 1:*).
Puntos clave
- Las relaciones sustituyen a BUSCARV: el modelo propaga los filtros entre tablas.
- Cardinalidad normal: uno a varios, del catálogo (1) hacia los hechos (*).
- Verifique siempre las relaciones autodetectadas en la vista Modelo.
- Totales idénticos en todas las filas de un visual = relación ausente o rota: el diagnóstico n.º 1.
Reto de 48 h — aplíquelo mañana
Como Zineb, vincule dos tablas mediante una relación: arrastre la clave de los hechos sobre la clave de la dimensión en la vista Modelo, lea 1:* y la dirección única, y luego cree un visual que cruce las dos tablas. Elimine la relación y anote el síntoma (totales idénticos en todas partes) antes de recrearla.
- Sé crear una relación entre dos tablas por su columna clave.
- Leo la cardinalidad (1:*) y la dirección del filtro (única) de una relación.
- Reconozco el diagnóstico n.º 1: totales idénticos = relación ausente.
Preguntas frecuentes
¿Cuándo usar una relación bidireccional?
Casi nunca: crea ambigüedades de cálculo y lentitud, y se detecta por errores difíciles de diagnosticar. Existen casos legítimos (ciertos filtrados por dimensión compartida entre dos tablas de hechos), pero se resuelven primero con un buen esquema en estrella (2.2) o, puntualmente, con la función DAX CROSSFILTER. El reflejo por defecto sigue siendo la dirección única.
Mi relación rechaza la cardinalidad 1:*: ¿por qué?
Porque la columna clave del lado dimensión contiene duplicados o vacíos, cuando una dimensión tiene una sola fila por elemento. Corrija en Power Query: Eliminar los duplicados en la clave, filtrar los valores nulos. Un catálogo limpio (una fila única por elemento) es la condición de un modelo fiable.
¿Qué significa «totales idénticos en todas las filas» de un visual?