Trabajar con relaciones y cardinalidad

Completado

A diferencia de otros sistemas de gestión de bases de datos, Power BI incluye el concepto de direccionalidad en una relación. La direccionalidad juega un papel importante en el filtrado de datos entre múltiples tablas. Al cargar datos, Power BI busca automáticamente las relaciones en estos buscando coincidencias en los nombres de las columnas. También puedes usar Administrar relaciones para editar estas opciones manualmente.

Por ejemplo, has recuperado muchas tablas de la base de datos Sales y la siguiente imagen es un ejemplo de tu modelo semántico. Power BI ha detectado automáticamente varias relaciones, pero nos logra entender lo que significan. Quieres asegurarte de que las relaciones reflejen con precisión las que existen en los datos.

Captura de pantalla del ejemplo de modelo semántico

Relaciones

Estos son los distintos tipos de relaciones que encontrará en Power BI.

Relación varios a uno (*:1) o uno a varios (1: *)

  • Describe una relación en la que se tienen muchas instancias de un valor en una columna que están relacionadas con una sola instancia correspondiente en otra columna.

  • Describe la direccionalidad entre las tablas de hechos y las de dimensiones.

  • Es el tipo de direccionalidad más común y es el valor predeterminado en Power BI cuando se crean relaciones automáticamente.

Un ejemplo de relación uno a varios es la que hay entre las tablas CountryName y Territory, ya que puede haber muchos territorios asociados a un único país.

Captura de pantalla de la relación varios a uno

Relación uno a uno (1:1):

  • Describe una relación en la que solo una instancia de un valor es común entre dos tablas.

  • Requiere valores únicos en las dos tablas.

  • No es recomendable porque esta relación almacena información redundante y podría indicar que el modelo no está diseñado correctamente. Lo recomendable es combinar las tablas.

Un ejemplo de relación uno a uno sería si tuviera productos e identificadores de producto en dos tablas diferentes. La creación de una relación uno a uno es redundante y estas dos tablas se deben combinar.

Captura de pantalla de la relación uno a uno

Relación varios a varios (.):

  • Describe una relación en la que muchos valores son comunes entre dos tablas.

  • No requiere valores únicos en ninguna de las tablas de una relación.

  • No es recomendable; la falta de valores únicos genera ambigüedad y es posible que los usuarios no sepan a qué hace referencia cada columna de valores.

Por ejemplo, en la imagen siguiente se muestra una relación de varios a varios entre las tablas Sales y Order por la columna OrderDate, porque varias ventas pueden tener varios pedidos asociados. Se genera ambigüedad porque las dos tablas pueden tener la misma fecha de pedido.

Captura de pantalla de la relación varios a varios

Dirección de filtro cruzado

Los datos se pueden filtrar en uno de los lados de una relación o en ambos.

Con una dirección de filtro cruzado única:

  • Solo se puede usar una tabla de una relación para filtrar los datos. Por ejemplo, la tabla 1 se puede filtrar por la tabla 2, pero la tabla 2 no se puede filtrar por la tabla 1.

    Sugerencia

    Sigue la dirección de la flecha de la relación entre las tablas para saber en qué dirección fluirá el filtro. Normalmente querrás que estas flechas apunten a la tabla de hechos.

  • Para una relación de uno a varios o de varios a uno, la dirección del filtro cruzado será desde el lado "uno", lo que significa que el filtrado se producirá en la tabla que tiene muchos valores.

Con ambas direcciones de filtro cruzado o el filtrado cruzado bidireccional:

  • Se puede usar una tabla de una relación para filtrar la otra. Por ejemplo, se puede filtrar una tabla de dimensiones a través de la tabla de hechos, y las tablas de hechos se pueden filtrar a través de la tabla de dimensiones.

  • Es posible que el rendimiento sea menor al usar el filtrado cruzado bidireccional con relaciones de varios a varios.

Una advertencia con respecto al filtrado cruzado bidireccional: no debes habilitar relaciones de filtrado cruzado bidireccional a menos que comprendas completamente las implicaciones de hacerlo. Si se habilitan, se pueden provocar ambigüedades, sobremuestreos, resultados inesperados y una posible degradación del rendimiento.

La cardinalidad y la dirección del filtro cruzado

En el caso de las relaciones uno a uno, la única opción disponible es el filtrado cruzado bidireccional. Los datos se pueden filtrar en cualquier lado de esta relación y generar un valor distinto e inequívoco. Por ejemplo, puedes filtrar por un identificador de producto y obtener un único producto, y puedes filtrar por un producto y obtener un identificador de producto único.

En el caso de las relaciones de varios a varios, puedes elegir filtrar por una sola dirección única o las dos mediante el filtrado cruzado bidireccional. La ambigüedad asociada con el filtrado cruzado bidireccional se amplifica en una relación de varios a varios porque existen varias rutas entre diferentes tablas. Si creas una medida, un cálculo o un filtro, puedes haber consecuencias no deseadas al filtrar los datos, y el resultado puede ser distinto en función de la relación escogida por el motor de Power BI al aplicar el filtro. Lo mismo ocurre con las relaciones bidireccionales, así que hay que usarlas con cuidado.

Por esta razón, las relaciones de varios a varios o las relaciones bidireccionales son complicadas. A menos que estés seguro del aspecto que tienen los datos al agregarlos, estos tipos de relaciones abiertas con varias direcciones de filtrado pueden generar varias rutas en los datos.

Crear relaciones varios a varios

Imagina que se te encarga la tarea de crear un objeto visual que examine los presupuestos de clientes y cuentas. Puedes tener varios clientes en la misma cuenta y varias cuentas con el mismo cliente, por lo que sabes que tendrá que crear una relación de varios a varios.

Captura de pantalla de la relación varios a varios

Para crear esta relación, ve a Administrar relaciones>Nueva. En la ventana que se abrirá, crea una relación entre la columna Customer ID de CustomerTable y AccountTable. La relación se establece en varios a varios y el tipo de filtro se ha configurado en ambas direcciones. Se te advertirá inmediatamente de que solo debe usar este tipo de relación si se espera que ninguna de las columnas tenga valores únicos, ya que podrías obtener valores inesperados. Como quieres filtrar en ambas direcciones, elige filtrado cruzado bidireccional.

Seleccione Aceptar. Ya ha creado correctamente una relación de varios a varios.

Captura de pantalla de la relación varios a varios en Administrar relación

Para obtener más información, consulta Relaciones varios a varios en Power BI.