Compartir vía


Instrucciones para relaciones bidireccionales

Este artículo está dirigido a modeladores de datos que trabajan con Power BI Desktop. Le proporciona instrucciones sobre cuándo crear relaciones de modelo bidireccionales. Una relación bidireccional es aquella que se filtra en ambas direcciones.

Nota

En este artículo no se incluye una introducción a las relaciones de modelo. Si no está familiarizado con las relaciones, sus propiedades o cómo configurarlas, se recomienda que primero lea el artículo Relaciones de modelos en Power BI Desktop.

También es importante que conozca el diseño del esquema de estrella. Para más información, vea Descripción de un esquema de estrella e importancia para Power BI.

Por lo general, se recomienda minimizar el uso de relaciones bidireccionales. Esto se debe a que pueden afectar negativamente al rendimiento de las consultas del modelo y, posiblemente, ofrecer experiencias confusas para los usuarios del informe.

Sin embargo, hay tres escenarios en los que el filtrado bidireccional puede resolver requisitos específicos:

Relaciones de modelos especiales

Las relaciones bidireccionales desempeñan un rol importante al crear los dos tipos de relaciones de modelos especiales siguientes:

  • Uno a uno: todas las relaciones uno a uno deben ser bidireccionales; no es posible ninguna otra configuración. En general, no recomendamos crear estos tipos de relaciones. Para obtener una explicación completa y patrones de diseño alternativos, consulte la guía de relación uno a uno .
  • De varios a varios: cuando se relacionan dos tablas de dimensión, se requiere una tabla puente. Se requiere un filtro bidireccional para asegurarse de que los filtros se propagan a través de la tabla de puente. Para obtener más información, consulte Guía de relación de varios a varios.

Opciones de segmentación "con datos"

Las relaciones bidireccionales pueden proporcionar segmentaciones de datos que limiten las opciones a dónde existen los datos. (Si está familiarizado con las tablas dinámicas y segmentaciones de Excel, es el comportamiento predeterminado al obtener datos de un modelo semántico de Power BI o de un modelo de Analysis Services). Para ayudar a explicar lo que significa, considere primero el siguiente diagrama de modelos.

Diagrama en el que se muestra un modelo que contiene tres tablas. El diseño se describe en el párrafo siguiente.

La primera tabla se denomina Customer., y contiene tres columnas: Country-Region, Customery CustomerCode. La segunda tabla se denomina Producty contiene tres columnas: Color, Producty SKU. La tercera tabla se denomina Salesy contiene cuatro columnas: CustomerCode, OrderDate, Quantityy SKU. Las tablas Customer y Product son tablas de dimensiones y cada una tiene una relación uno a varios con la tabla de Sales. Cada relación filtra en una sola dirección.

Para facilitar la descripción de cómo funciona el filtrado bidireccional, se ha modificado el diagrama del modelo para mostrar las filas de la tabla. Todos los ejemplos de este artículo se basan en estos datos.

Diagrama en el que se muestra que ahora el modelo muestra las filas de las tablas. Los detalles de las tablas se describen en el párrafo siguiente.

Los detalles de las filas de las tres tablas se describen en la siguiente lista con viñetas:

  • La tabla Customer tiene dos filas:
    • CustomerCodeCUST-01, CustomerCustomer-1, Country-RegionEstados Unidos
    • CustomerCode CUST-02, CustomerCustomer-2, Country-RegionAustralia
  • La tabla Product tiene tres filas:
    • SKU CL-01, ProductT-shirt, ColorGreen
    • SKU CL-02, ProductJeans, ColorBlue
    • SKU AC-01, ProductHat, ColorBlue
  • La tabla Sales tiene tres filas:
    • OrderDate1 de enero de 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate2 de febrero de 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate3 de marzo de 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Ahora suponga la siguiente página de informe.

Diagrama en el que se muestra la página de informe con tres objetos visuales. Los detalles se describen en el párrafo siguiente.

La página se compone de dos segmentaciones y un objeto visual de tarjeta. La primera segmentación se basa en el campo Country-Region, y tiene dos opciones: Australia y United States. Actualmente se segmenta por Australia. La segunda segmentación se basa en el campo Product y tiene tres opciones: Hat, Jeans y T-shirt. No se selecciona ningún elemento (lo que significa no se filtra ningún producto). El objeto visual muestra una cantidad de treinta.

Cuando los usuarios de informes segmentan por Australia, es posible que desee limitar la segmentación de productos para mostrar opciones en las que los datos se relacionan con las ventas australianas. Esto es lo que se entiende por mostrar las opciones de segmentación "con datos". Puede lograr este comportamiento estableciendo la relación entre las tablas Product y Sales para filtrar en ambas direcciones.

Diagrama que muestra un modelo en el que la relación entre las tablas Product y Sales ahora es bidireccional.

La segmentación de productos muestra ahora una única opción: T-shirt. Esta opción representa el único producto vendido a los clientes australianos.

Diagrama en el que se muestra la página del informe que contiene tres objetos visuales con la opción Producto destacada. En el párrafo siguiente se describen los detalles.

En primer lugar, se recomienda considerar detenidamente si este diseño funciona para los usuarios del informe. Algunos usuarios informan de que la experiencia les resulta confusa porque no entienden por qué las opciones de segmentación aparecen o desaparecen dinámicamente cuando interactúan con otras segmentaciones.

Si decide mostrar opciones de segmentación "con datos", no le recomendamos que establezca relaciones bidireccionales. Las relaciones bidireccionales requieren más procesamiento y, por tanto, pueden afectar negativamente al rendimiento de las consultas, especialmente a medida que aumenta el número de relaciones bidireccionales en el modelo.

Hay una mejor manera de conseguir el mismo resultado: en lugar de usar filtros bidireccionales, puede aplicar un filtro de nivel visual a la propia segmentación de productos.

Consideremos ahora que la relación entre las tablas Product y Sales ya no filtra en ambas direcciones. Además, se ha agregado la siguiente definición de medida a la tabla Sales.

Total Quantity = SUM(Sales[Quantity])

Para mostrar las opciones de segmentación de productos "con datos", simplemente hay que filtrar por la medida Total Quantity utilizando la condición "no está en blanco".

Diagrama en el que se muestra que el panel Filtros para la segmentación de Product ahora se filtra por Cantidad total no está en blanco.

Análisis de dimensión a dimensión

Un escenario diferente que implica relaciones bidireccionales trata una tabla de hechos como una tabla puente . De este modo, admite el análisis de datos de tabla de dimensiones dentro del contexto de filtro de una tabla de dimensiones diferente.

Mediante el modelo de ejemplo en este artículo, considere cómo se pueden responder las siguientes preguntas:

  • ¿Cuántos colores se vendieron a clientes australianos?
  • ¿Cuántos países/regiones compraron pantalones vaqueros?

Ambas preguntas pueden responderse sin resumir los datos en la tabla de hechos de puente. Sin embargo, requieren que los filtros se propaguen de una tabla de dimensiones a la otra. Cuando los filtros se propagan a través de la tabla de hechos, el resumen de las columnas de la tabla de dimensiones puede lograrse utilizando la función DISTINCTCOUNT de DAX, y posiblemente las funciones DAX MIN y MAX. DAX.

Como la tabla de hechos se comporta como una tabla puente, puede aplicar la guía de relaciones de varios a varios para relacionar dos tablas de dimensiones. Requerirá configurar al menos una relación para filtrar en ambas direcciones. Para obtener más información, consulte Guía de relación de varios a varios.

Sin embargo, como ya se describió en este artículo, es probable que este diseño tenga un impacto negativo en el rendimiento y que el usuario experimente consecuencias relacionadas con las opciones de segmentación "con datos". Por lo tanto, le recomendamos que active el filtrado bidireccional en una definición de medida utilizando la función DAX CROSSFILTER en su lugar. Puede usar la función CROSSFILTER para modificar las direcciones de filtro (o incluso deshabilitar la relación) durante la evaluación de una expresión.

Tenga en cuenta la siguiente definición de medida agregada a la tabla Sales. En este ejemplo, la relación modelo entre las tablas Customer y Sales se ha configurado para filtrar en una dirección única.

Different Countries Sold =
CALCULATE(
    DISTINCTCOUNT(Customer[Country-Region]),
    CROSSFILTER(
        Customer[CustomerCode],
        Sales[CustomerCode],
        BOTH
    )
)

Durante la evaluación de la medida Different Countries Sold, la relación entre las tablas Customer y Sales se filtra en ambas direcciones.

El siguiente objeto visual de tabla presenta estadísticas para cada producto vendido. La columna Quantity es simplemente la suma de valores de cantidad. La columna Different Countries Sold representa el recuento distinto de valores de región de país de todos los clientes que han comprado el producto.

Diagrama en el que se muestra que dos productos aparecen en un objeto visual de tabla. En la columna

Para obtener más información sobre este artículo, consulte los recursos siguientes: