Orientação de relacionamento bidirecional

Este artigo destina-se a você como um modelador de dados que trabalha com o Power BI Desktop. Ele fornece orientação sobre quando criar relações de modelo bidirecional. Uma relação bidirecional é aquela que filtra em ambas as direções.

Nota

Uma introdução às relações de modelo não é abordada neste artigo. Se você não estiver completamente familiarizado com relacionamentos, suas propriedades ou como configurá-los, recomendamos que leia primeiro o artigo Relações de modelo no Power BI Desktop .

Também é importante que você tenha uma compreensão do design do esquema de estrelas. Para obter mais informações, consulte Compreender o esquema em estrela e a importância para o Power BI.

Geralmente, recomendamos minimizar o uso de relações bidirecionais. Eles podem afetar negativamente o desempenho da consulta de modelo e, possivelmente, oferecer experiências confusas para os usuários do relatório.

Há três cenários em que a filtragem bidirecional pode resolver requisitos específicos:

Relações de modelo especiais

As relações bidirecionais desempenham um papel importante ao criar os seguintes dois tipos de relacionamento de modelo especial:

  • Um-para-um: Todas as relações um-para-um devem ser bidirecionais — não é possível configurar de outra forma. Geralmente, não recomendamos a criação desses tipos de relacionamentos. Para obter uma discussão completa e designs alternativos, consulte Orientação de relacionamento um-para-um.
  • Muitos-para-muitos: Ao relacionar tabelas de duas dimensões, é 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 relacionamento muitos-para-muitos (Relacionar muitas dimensões a muitas).

Itens de segmentação de dados "com dados"

As relações bidirecionais podem fornecer segmentações de dados que limitam os itens onde os dados existem. (Se você estiver familiarizado com as Tabelas Dinâmicas e segmentações de dados do Excel, esse é o comportamento padrão ao obter dados de um modelo semântico do Power BI (anteriormente conhecido como conjunto de dados) ou de um modelo do Analysis Services.) Para ajudar a explicar o que significa, primeiro considere o diagrama de modelo a seguir.

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

A primeira tabela é chamada Cliente e contém três colunas: País-Região, Cliente e CustomerCode. A segunda tabela é chamada Produto e contém três colunas: Cor, Produto e SKU. A terceira tabela é chamada Sales e contém quatro colunas: CustomerCode, OrderDate, Quantity e SKU. As tabelas Cliente e Produto são tabelas do tipo dimensão e cada uma tem uma relação um-para-muitos com a tabela Vendas. Cada relação filtra 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 neste artigo são baseados nesses dados.

Nota

Não é possível exibir linhas de tabela no diagrama de modelo do Power BI Desktop. É feito neste artigo para apoiar a discussão com exemplos claros.

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

Os detalhes da linha para as três tabelas são descritos na seguinte lista com marcadores:

  • A tabela Cliente tem duas linhas:
    • CustomerCode CUST-01, Customer Customer-1, País-Região Estados Unidos
    • CustomerCode CUST-02, Customer Customer-2, País-Região Austrália
  • A tabela Produto tem três linhas:
    • SKU CL-01, T-shirt do produto, Cor Verde
    • SKU CL-02, Produto Jeans, Cor Azul
    • SKU AC-01, Chapéu Produto, Cor Azul
  • A tabela Vendas tem três linhas:
    • Data do pedido: 1 de janeiro de 2019, CustomerCode: CUST-01, SKU, CL-01, Quantidade: 10
    • Data do pedido: 2 de fevereiro de 2019, CustomerCode: CUST-01, SKU, CL-02, Quantidade:20
    • Data do pedido: 3 de março de 2019, CustomerCode: CUST-02, SKU, CL-01, Quantidade: 30

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

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

A página é composta por duas segmentações de dados e um visual de cartão. A primeira segmentação de dados é para País-Região e tem dois itens: Austrália e Estados Unidos. Atualmente é fatiado pela Austrália. A segunda fatia é para Produto, e tem três itens: Chapéu, Jeans e Camiseta. Nenhum item é selecionado (o que significa que nenhum produto é filtrado). O visual do cartão exibe uma quantidade de 30.

Quando os usuários de relatório segmentam por Austrália, convém limitar a segmentação de dados de Produto para exibir itens cujos dados estão relacionados às vendas australianas. É o que significa mostrar itens de segmentação de dados "com dados". Você pode obter esse comportamento configurando a relação entre a tabela Produto e Vendas para filtrar em ambas as direções.

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

A segmentação de dados de produtos agora lista um único item: camiseta. Este item representa o único produto vendido a clientes australianos.

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

Em primeiro lugar, sugerimos que você considere cuidadosamente se esse design funciona para os usuários do relatório. Alguns usuários de relatório acham a experiência confusa. Eles não entendem por que os itens de segmentação de dados aparecem ou desaparecem dinamicamente quando interagem com outras segmentações de dados.

Se você decidir mostrar itens de segmentação de dados "com dados", não recomendamos que configure relações bidirecionais. As 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 em seu modelo aumenta.

Há uma maneira melhor de obter o mesmo resultado: em vez de usar filtros bidirecionais, você pode aplicar um filtro de nível visual à própria segmentação de dados de produto .

Vamos agora considerar que a relação entre a tabela Produto e Vendas não filtra mais em ambas as direções. E, a seguinte definição de medida foi adicionada à tabela Vendas .

Total Quantity = SUM(Sales[Quantity])

Para mostrar os itens da segmentação de dados de Produto "com dados", basta filtrá-los pela medida Quantidade Total usando a condição "não está em branco".

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

Análise dimensão a dimensão

Um cenário diferente envolvendo relações bidirecionais trata uma tabela de tipo de fato como uma tabela de transição. Dessa forma, ele suporta a análise de dados de tabela de tipo de dimensão dentro do contexto de filtro de uma tabela de tipo de dimensão diferente.

Usando o modelo de exemplo neste artigo, considere como as seguintes perguntas podem ser respondidas:

  • 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 tipos de fatos de ponte. No entanto, eles exigem que os filtros se propaguem de uma tabela de tipo de dimensão para a outra. Uma vez que os filtros se propagam através da tabela de tipo de fato, a sumarização das colunas da tabela de tipo de dimensão pode ser obtida usando a função DISTINCTCOUNT DAX e, possivelmente, as funções MIN e MAX DAX.

Como a tabela de tipo de fato se comporta como uma tabela de ponte, você pode seguir as diretrizes de relacionamento muitos-para-muitos para relacionar tabelas de tipo bidimensional. Será necessário configurar pelo menos uma relação para filtrar em ambas as direções. Para obter mais informações, consulte Diretrizes de relacionamento muitos-para-muitos (Relacionar muitas dimensões a muitas).

No entanto, como já descrito neste artigo, esse design provavelmente resultará em um impacto negativo no desempenho e nas consequências da experiência do usuário relacionadas a itens de segmentação de dados "com dados". Portanto, recomendamos que você ative a filtragem bidirecional em uma definição de medida usando a função CROSSFILTER DAX. A função CROSSFILTER pode ser usada para modificar as direções do filtro — ou até mesmo desativar a relação — durante a avaliação de uma expressão.

Considere a seguinte definição de medida adicionada à tabela Vendas . Neste exemplo, a relação de modelo entre as tabelas Cliente e Vendas foi configurada para filtrar em uma única direção.

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

Durante a avaliação da expressão da medida Diferentes Países Vendidos, a relação entre as tabelas Cliente e Vendas filtra em ambas as direções.

A tabela a seguir apresenta estatísticas visuais para cada produto vendido. A coluna Quantidade é simplesmente a soma dos valores de quantidade. A coluna Diferentes países vendidos representa a contagem distinta de valores de país-região de todos os clientes que compraram o produto.

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

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