2.1 · Relaciones y modelo de datos

Nivel 2 · Modelo y DAX

2.1Relaciones y modelo de datos

Objetivo: Crear y verificar relaciones en la vista Modelo, y reconocer para toda la vida el síntoma de la relación ausente.
Tiempo estimado: 18 min · lectura autónoma · Si solo tienes 5 min: lee «Lo esencial en 30s» + el esquema.

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).

Error frecuente de interpretación: «Una relación es opcional: mis visuales funcionan igual, el modo bidireccional es más práctico y mi clave puede contener duplicados». No, triple error. Sin relación, las tablas no dialogan: los totales se repiten en todas las filas — es el diagnóstico n.º 1. La dirección bidireccional casi nunca es necesaria y crea ambigüedades y lentitud: el reflejo es la dirección única (1 → *). Y la columna clave del lado dimensión debe ser única, sin duplicado ni vacío, o la relación 1:* se rechaza.
Una relación, el canal de los filtros El filtro circula de la dimensión (lado 1) hacia los hechos (lado *). Dimensión (lado 1)Productos[Código] — una fila por producto+Hechos (lado *)Ventas[CódigoProducto] — varias filas+Dirección del filtro1 → * (única, la norma sana) Totales idénticos en todas partes = relación ausente (diagnóstico n.º 1).
El filtro circula de la dimensión (lado 1) hacia los hechos (lado *).
Versión en texto del esquema (SEO / lectores de pantalla / traducción): 1) Zineb, controladora de gestión en Argel, vincula sus ventas a su catálogo de productos: en la vista Modelo, arrastra Ventas[CódigoProducto] sobre Productos[Código] y la línea aparece — el modelo propaga los filtros, sin fórmula. 2) Lee la cardinalidad (1:* — un producto, varias ventas) y la dirección de filtro única, del lado «1» hacia el lado «*», y verifica siempre las relaciones autodetectadas. 3) Aprende el diagnóstico n.º 1: unos totales idénticos en todas las filas de un visual señalan una relación ausente o rota — a menudo una clave con duplicados o vacíos del lado dimensión. Lección: vincular las tablas sustituye a BUSCARV, se mantiene la dirección única y se verifica la clave del lado dimensión.

🔎 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

  1. Importe una segunda tabla «Productos» (Código, Denominación, Categoría, PrecioUnitario) — créela en Excel si hace falta, como Zineb.
  2. Vista Modelo: si Power BI no ha creado la relación, arrastre Ventas[CódigoProducto] sobre Productos[Código] — la línea aparece.
  3. Haga doble clic en la línea: lea la cardinalidad (1:*) y la dirección de filtro (única) — la configuración sana por defecto.
  4. 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.
Su primer modelo multitabla funcional — y el síntoma de la relación ausente reconocido para siempre.

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.

Lista de salida de la sección
  • 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.
Autoevaluación 1-5: ¿creo y verifico una relación sin dudar?Autoevaluación 1-5: ¿he reproducido el síntoma de la relación ausente para reconocerlo?

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.

Comprueba tu comprensión

¿Qué significa «totales idénticos en todas las filas» de un visual?

Recursos adicionales (opcional, para ir más allá)

Examen del nivel 2Preguntas inéditas y más difíciles para validar tus conocimientos