Instrucciones para relaciones bidireccionales

Este artículo está dirigido a modeladores de datos como usted 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.

En general, recomendamos minimizar el uso de relaciones bidireccionales. Pueden afectar negativamente al rendimiento de la consulta del modelo y, posiblemente, ofrecer experiencias confusas para los usuarios del informe.

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:

Elementos de segmentación "con datos"

Las relaciones bidireccionales pueden ofrecer segmentaciones que limitan los elementos a donde hay datos. (Si está familiarizado con las tablas dinámicas y las segmentaciones de datos de Excel, es el comportamiento predeterminado cuando se obtienen datos de un modelo semántico, anteriormente conocido como "conjunto de datos", de Power BI o de un modelo de Analysis Services). Para ayudar a explicar lo que significa, considere primero el siguiente diagrama del modelo.

Diagram showing a model containing three tables. The design is described in the following paragraph.

La primera tabla se denomina Customer y contiene tres columnas: Country-Region, Customer y CustomerCode. La segunda tabla se denomina Product y contiene tres columnas: Color, Product y SKU. La tercer tabla se denomina Sales y contiene cuatro columnas: CustomerCode, OrderDate, Quantity y SKU. Las tablas Customer y Product son tablas de tipo de dimensión y cada una tiene una relación uno a varios con la tabla 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.

Nota

No es posible mostrar filas de tabla en el diagrama de modelo de Power BI Desktop. En este artículo se hace para complementar la explicación con ejemplos claros.

Diagram showing that the model now reveals the table rows. The row details are described in the following paragraph.

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

  • La tabla Customer tiene dos filas:
    • CustomerCode CUST-01, Customer Customer-1, Country-Region United States
    • CustomerCode CUST-02, Customer Customer-2, Country-Region Australia
  • La tabla Product tiene tres filas:
    • SKU CL-01, Product T-shirt, Color Green
    • SKU CL-02, Product Jeans, Color Blue
    • SKU AC-01, Product Hat, Color Blue
  • La tabla Sales tiene tres filas:
    • OrderDate January 1 2019, CustomerCode CUST-01, SKU CL-01, Quantity 10
    • OrderDate February 2 2019, CustomerCode CUST-01, SKU CL-02, Quantity 20
    • OrderDate March 3 2019, CustomerCode CUST-02, SKU CL-01, Quantity 30

Ahora suponga la siguiente página de informe.

Diagram showing the report page containing three visuals. The details are described in the following paragraph.

La página se compone de dos segmentaciones y un objeto visual de tarjeta. La primera segmentación es para Country-Region y tiene dos elementos: Australia y United States. Actualmente se segmenta por Australia. La segunda segmentación es para Product y tiene tres elementos: 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 se segmentan por Australia, es posible que desee limitar la segmentación Producto para mostrar los elementos donde los datos se relacionan con las ventas australianas. Es lo que significa mostrar elementos de segmentación "con datos". Puede lograr este comportamiento configurando la relación entre las tablas Product y Sales para filtrar en ambas direcciones.

Diagram showing a model that the relationship between the Product and Sales table is now bi-directional.

La segmentación de Product ahora enumera un solo artículo: T-shirt. Este artículo representa el único producto vendido a clientes australianos.

Diagram showing the report page containing three visuals with Product called out. The details are described in the following paragraph.

Primero le recomendamos que considere cuidadosamente si este diseño funciona para los usuarios de su informe. Algunos usuarios de informes encuentran la experiencia confusa. No entienden por qué los artículos de segmentación aparecen o desaparecen dinámicamente cuando interactúan con otras segmentaciones.

Si decide mostrar elementos de segmentación "con datos", no le recomendamos que configure relaciones bidireccionales. Las relaciones bidireccionales requieren más procesamiento y, por lo tanto, pueden tener 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 lograr el mismo resultado: en lugar de usar filtros bidireccionales, puede aplicar un filtro de nivel de objeto visual a la propia segmentación de Product.

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

Total Quantity = SUM(Sales[Quantity])

Para mostrar los artículos de segmentación de Product "con datos", simplemente se necesita filtrar por la medida Cantidad total usando la condición "no está en blanco".

Diagram showing that the Filters pane for the Product slicer now filters by

Análisis de dimensión a dimensión

Un escenario diferente que involucra relaciones bidireccionales trata una tabla de tipo de hecho como una tabla de puente. De esta forma, admite el análisis de datos de tabla de tipo de dimensión dentro del contexto de filtro de una tabla de tipo de dimensión 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 tipo de hecho de puente. Sin embargo, requieren que los filtros se propaguen de una tabla de tipo de dimensión a la otra. Una vez que los filtros se propagan a través de la tabla de tipo de hecho, se puede lograr el resumen de las columnas de la tabla de tipo de dimensión mediante la función DAX DISTINCTCOUNT, y posiblemente las funciones DAX MIN y MAX.

Como la tabla de tipo de hecho se comporta como una tabla de puente, puede seguir las instrucciones de relación de varios a varios para relacionar dos tablas de tipo de dimensión. Será necesario configurar al menos una relación para filtrar en ambas direcciones. Para más información, consulte Instrucciones para relaciones de varios a varios (Relación de dimensiones 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 los elementos 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. La función CROSSFILTER se puede usar para modificar las direcciones del filtro (o incluso deshabilitar la relación), durante la evaluación de una expresión.

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

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

Durante la evaluación de la expresión de 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 los valores de cantidad. La columna Different Countries Sold representa el recuento distintivo de los valores de país-región de todos los clientes que han comprado el producto.

Diagram showing that two products are listed in a table visual. In the

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