Compartilhar via


Diretrizes de relação bidirecional

Este artigo tem como destino você como um modelador de dados que trabalha com o Power BI Desktop. Ele fornece orientação sobre quando criar relações de modelos bidirecionais. Uma relação bidirecional filtra em ambas as direções.

Observação

Este artigo não inclui nenhuma introdução às relações de modelo. Se você não estiver totalmente familiarizado com essas relações, as respectivas propriedades e como configurá-las, recomendamos que leia primeiro o artigo Relações de modelo no Power BI Desktop.

Também é importante que você compreenda o design em esquema em estrela. Para obter mais informações, confira Entender o esquema em estrela e a importância dele para o Power BI.

Em geral, recomendamos que você minimize o uso de relações bidirecionais. Isso ocorre porque eles podem afetar negativamente o desempenho da consulta de modelo e, possivelmente, oferecer experiências confusas para os usuários do relatório.

No entanto, há três cenários em que a filtragem bidirecional pode resolver requisitos específicos:

Relações de modelos especiais

As relações bidirecionais têm uma função importante na criação dos dois seguintes tipos de relação de modelo especial:

  • Um-para-um: Todas as relações de um-para-um devem ser bidirecionais, e não é possível configurá-las de outra forma. Geralmente, não recomendamos a criação desses tipos de relações. Para obter uma discussão completa e padrões de design alternativos, consulte Diretrizes sobre relação um-para-um.
  • Muitos para muitos: ao relacionar duas tabelas de dimensão, é necessária uma tabela de ponte. Um filtro bidirecional é necessário para garantir que os filtros se propaguem pela tabela de ponte. Para obter mais informações, consulte Diretrizes de relação muitos para muitos.

Opções de segmentação "com os dados"

As relações bidirecionais podem fornecer segmentações que limitam as opções de onde podem existir dados. (Se você estiver familiarizado com tabelas dinâmicas e segmentações de dados do Excel, é o comportamento padrão ao fornecer dados de um modelo semântico do Power BI ou de um modelo do Analysis Services.) Para ajudar a explicar o que isso significa, primeiro considere o diagrama de modelo a seguir.

Diagrama mostrando um modelo que contém três tabelas. O design é descrito no parágrafo a seguir.

A primeira tabela é denominada Customer., e contém três colunas: Country-Region, Customere CustomerCode. A segunda tabela é denominada Producte contém três colunas: Color, Producte SKU. A terceira tabela é denominada Salese contém quatro colunas: CustomerCode, OrderDate, Quantitye SKU. As tabelas Customer e Product são tabelas de dimensão e cada uma tem uma relação um-para-muitos com a tabela Sales. Cada relação é filtrada em uma única direção.

Para ajudar a descrever como funciona a filtragem bidirecional, o diagrama de modelo foi modificado para revelar as linhas da tabela. Todos os exemplos deste artigo se baseiam nesses dados.

Diagrama mostrando que o modelo agora revela as linhas da tabela. Os detalhes das linhas são descritos no parágrafo a seguir.

Os detalhes de linha das três tabelas são descritos na seguinte lista com marcadores:

  • A tabela Customer tem duas linhas:
    • CustomerCodeCUST-01, CustomerCustomer-1, Country-RegionEstados Unidos
    • CustomerCode CUST-02, CustomerCustomer-2, Country-RegionAustralia
  • A tabela Product tem três linhas:
    • SKU CL-01, ProductT-shirt, ColorGreen
    • SKU CL-02, ProductJeans, ColorBlue
    • SKUAC-01, ProductChapéu, ColorAzul
  • A tabela Sales tem três linhas:
    • OrderDate1º de janeiro de 2019, CustomerCodeCUST-01, SKUCL-01, Quantity10
    • OrderDate February 2 2019, CustomerCodeCUST-01, SKUCL-02, Quantity20
    • OrderDate March 3 2019, CustomerCodeCUST-02, SKUCL-01, Quantity30

Agora, considere a página de relatório a seguir.

Diagrama mostrando a página de relatório contendo três visuais. Os detalhes estão descritos no parágrafo a seguir.

A página consiste em duas segmentações e um visual de cartão. A primeira segmentação é baseada no campo Country-Region e tem duas opções: Australia e United States. Atualmente, está segmentado por Australia. A segunda segmentação é baseada no campo Product, e tem três opções: Hat, Jeans e T-shirt. Nenhum item está selecionado (ou seja, nenhum produto está filtrado). O visual de cartão exibe uma quantidade de 30.

Quando os usuários do relatório filtram por Austrália, talvez você queira limitar o seletor de produtos para mostrar opções em que os dados se relacionem com as vendas australianas. Esse é o significado de mostrar opções de segmentação "com os dados". Você pode obter esse comportamento definindo a relação entre as tabelas Product e Sales para filtrar em ambas as direções.

Diagrama mostrando um modelo de que a relação entre as tabelas Produto e Vendas agora é bidirecional.

O filtro de produtos agora lista uma única opção: camiseta. Essa opção representa o único produto vendido para clientes australianos.

Diagrama mostrando a página de relatório contendo três visuais com Produto destacado. Os detalhes são descritos no parágrafo a seguir.

Primeiro, recomendamos que você considere cuidadosamente se esse design funciona para os usuários do relatório. Alguns usuários de relatórios acham a experiência confusa porque não entendem por que as opções de segmentação aparecem ou desaparecem dinamicamente quando interagem com outras segmentações.

Se você decidir mostrar opções de segmentação "com os dados", não recomendamos que você configure relações bidirecionais. Relações bidirecionais exigem mais processamento e, portanto, podem afetar negativamente o desempenho da consulta, especialmente à medida que o número de relações bidirecionais no modelo aumenta.

Há uma forma melhor de obter o mesmo resultado: em vez de usar filtros bidirecionais, você pode aplicar um filtro no nível do visual diretamente na segmentação de produtos.

Agora, vamos considerar que a relação entre as tabelas Product e Sales não filtra mais em ambas as direções. E a definição de medida a seguir foi adicionada à tabela Sales.

Total Quantity = SUM(Sales[Quantity])

Para mostrar as opções de segmentação de produto "com os dados", as opções precisam ser filtradas pela medida Total Quantity usando a condição "não está em branco".

Diagrama mostrando que o painel Filtros da segmentação Product agora filtra por Total Quantity e não está em branco.

Análise de dimensão a dimensão

Um cenário diferente envolvendo relações bidirecionais trata uma tabela de fatos como uma tabela de ponte . Dessa forma, ele dá suporte à análise de dados da tabela de dimensões dentro do contexto de filtro de uma tabela de dimensões diferente.

Usando o exemplo de modelo deste artigo, considere como é possível responder às seguintes perguntas:

  • Quantas cores foram vendidas para clientes australianos?
  • Quantos países/regiões compraram jeans?

Ambas as perguntas podem ser respondidas sem resumir os dados na tabela de ponte de fatos. No entanto, eles exigem que os filtros se propaguem de uma tabela de dimensão para a outra. Quando os filtros se propagam por meio da tabela de fatos, o resumo das colunas da tabela de dimensões pode ser obtido usando a função DISTINCTCOUNT DAX e, possivelmente, as funções MIN e MAX DAX.

Como a tabela de fatos se comporta como uma tabela de ponte, você pode aplicar as diretrizes para relações muitos para muitos para relacionar tabelas de duas dimensões. Ele exigirá a configuração de pelo menos uma relação para filtrar em ambas as direções. Para obter mais informações, consulte Diretrizes de relação muitos para muitos.

No entanto, conforme já mencionado neste artigo, esse design provavelmente resultará em um impacto negativo no desempenho e o usuário terá consequências relacionadas às opções de segmentação de "com os dados". Portanto, recomendamos que você ative a filtragem bidirecional em uma definição de medida usando a função DAX CROSSFILTER. Você pode usar a função CROSSFILTER para modificar as direções de filtro ou até mesmo desabilitar a relação durante a avaliação de uma expressão.

Considere a definição de medida a seguir adicionada à tabela Sales. Neste exemplo, a relação de modelo entre as tabelas Customer e Sales foi configurada para filtrar em uma só direção.

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

Durante a avaliação da medida Different Countries Sold, a relação entre as tabelas Customer e Sales filtra em ambas as direções.

O visual da tabela a seguir apresenta as estatísticas de cada produto vendido. A coluna Quantity é simplesmente a soma dos valores de quantidade. A coluna Different Countries Sold representa a contagem distinta de valores de país-região de todos os clientes que compraram o produto.

Diagrama mostrando que dois produtos estão listados em um visual de tabela. Na coluna Different Countries Sold, Jeans é 1, e T-shirt é 2.

Para obter mais informações relacionadas a este artigo, confira os seguintes recursos: