Trabalhar com relações e cardinalidade

Concluído

Ao contrário de outros sistemas de gerenciamento de banco de dados, o Power BI tem o conceito de direcionalidade em uma relação. Essa direcionalidade desempenha um papel importante na filtragem de dados entre várias tabelas. Quando você carrega dados, o Power BI procura automaticamente as relações que existem nos dados, ao realizar a correspondência entre nomes de coluna. Também é possível usar Gerenciar Relações para editar essas opções manualmente.

Por exemplo, você recuperou muitas tabelas do banco de dados Vendas, e a imagem a seguir é um exemplo do seu modelo semântico. A Power BI detectou automaticamente várias relações, mas você não consegue discernir o que elas significam. Você deseja verificar se as relações refletem com precisão aquelas que existem em seus dados.

Captura de tela de um exemplo de modelo semântico.

Relações

Confira a seguir diferentes tipos de relações que você encontrará no Power BI.

Relação muitos para um (*:1) ou um para muitos (1: *)

  • Descreve uma relação na qual você tem muitas instâncias de um valor em uma coluna que estão relacionadas a apenas uma instância exclusiva correspondente em outra coluna.

  • Descreve a direcionalidade entre as tabelas de fatos e de dimensões.

  • Esse é o tipo mais comum de direcionalidade e é o padrão do Power BI quando você está criando relações automaticamente.

Um exemplo de uma relação de um-para-muitos seria entre as tabelas CountryName e Território, em que é possível ter muitas regiões associadas a um país exclusivo.

Captura de tela da relação muitos-para-um.

Relação um para um:

  • Descreve uma relação na qual apenas uma instância de um valor é comum entre duas tabelas.

  • Requer valores exclusivos em ambas as tabelas.

  • Não é recomendável porque essa relação armazena informações redundantes e sugere que o modelo não foi projetado corretamente. Combinar as tabelas é uma prática mais recomendável.

Um exemplo de uma relação um-para-um seria se você tivesse produtos e IDs de produto em duas tabelas diferentes. A criação de uma relação um-para-um é redundante e essas duas tabelas devem ser combinadas.

Captura de tela da relação um-para-um.

Relação muitos para muitos (.):

  • Descreve uma relação em que muitos valores estão em comum entre duas tabelas.

  • Não requer valores exclusivos em nenhuma das duas tabelas em uma relação.

  • Não é recomendado; a falta de valores exclusivos gera ambiguidade e os usuários talvez não saibam qual coluna de valores está se referindo a quê.

Por exemplo, a figura a seguir mostra uma relação muitos-para-muitos entre as tabelas Vendas e Pedido na coluna OrderDate, porque várias vendas talvez tenham vários pedidos associados a elas. A ambiguidade é introduzida porque é possível que ambas as tabelas tenham a mesma data do pedido.

Captura de tela da relação muitos-para-muitos.

Direção do filtro cruzado

É possível filtrar os dados em um ou ambos os lados de uma relação.

Com uma direção única do filtro cruzado:

  • Somente uma tabela em uma relação pode ser usada para filtrar os dados. Por exemplo, a Tabela 1 pode ser filtrada pela Tabela 2, mas a Tabela 2 não pode ser filtrada pela Tabela 1.

    Dica

    Siga a direção da seta na relação entre as tabelas para saber em qual direção o filtro fluirá. Normalmente, é conveniente que essas setas apontem para a sua tabela de fatos.

  • Para uma relação um para muitos ou muitos para um, a direção do filtro cruzado será do lado "um", o que significa que a filtragem ocorrerá na tabela que tem muitos valores.

Com ambas as direções de filtro cruzado ou filtragem cruzada bidirecional:

  • Uma tabela em uma relação pode ser usada para filtrar a outra. Por exemplo, uma tabela de dimensões pode ser filtrada por meio da tabela de fatos e as tabelas de fatos podem ser filtradas por meio da tabela de dimensões.

  • O uso da filtragem cruzada bidirecional com relações muitos-para-muitos pode resultar em um desempenho inferior.

Uma palavra de prudência sobre a filtragem cruzada bidirecional: Não habilite as relações de filtragem cruzada bidirecional, a menos que você entenda totalmente as ramificações de fazer isso. Habilitá-las pode levar à ambiguidade, ao excesso de amostragem, a resultados inesperados e à degradação potencial do desempenho.

Cardinalidade e direção do filtro cruzado

Para relações um-para-um, a única opção disponível é a filtragem cruzada bidirecional. Os dados podem ser filtrados em ambos os lados dessa relação e resultar em um valor distinto e não ambíguo. Por exemplo, é possível filtrar por uma ID de produto e obter como resultado apenas um produto, bem como é possível filtrar por um produto e obter como resultado apenas uma ID de produto.

Para relações muitos para muitos, você pode optar por filtrar em uma única direção ou em ambas as direções ao usar a filtragem cruzada bidirecional. A ambiguidade associada à filtragem cruzada bidirecional é amplificada em uma relação muitos-para-muitos, pois vários caminhos existem entre tabelas diferentes. Se você criar uma medida, um cálculo ou um filtro, poderão ocorrer consequências indesejadas em que, ao filtrar os dados, dependendo da relação que o mecanismo de Power BI escolher ao aplicar o filtro, o resultado final será diferente. Essa situação também é verdadeira para relações bidirecionais e, por isso, você deve ter cuidado ao usá-las.

Por esse motivo, relações muitos-para-muitos e/ou relações bidirecionais são complicadas. A menos que você tenha certeza de como seus dados são quando agregados, esses tipos de relações abertas com várias direções de filtragem podem introduzir vários caminhos pelos dados.

Criar relações muitos-para-muitos

Considere o cenário em que você tem a tarefa de criar um visual que examina os orçamentos para clientes e contas. Há a possibilidade de existirem vários clientes na mesma conta e várias contas com o mesmo cliente, portanto, você sabe que precisa criar uma relação muitos-para-muitos.

Captura de tela da relação muitos-para-muitos.

Para criar essa relação, acesse Gerenciar Relações>Nova. Na janela resultante, crie uma relação entre a coluna Customer ID em CustomerTable e AccountTable. A relação é definida como muitos para muitos e o tipo de filtro é bidirecional. No primeiro momento, você será avisado de que só deverá usar esse tipo de relação se for esperado que nenhuma coluna tenha valores exclusivos, porque caso contrário, você obterá valores inesperados. Como você deseja filtrar em ambas as direções, escolha filtragem cruzada bidirecional.

Selecione OK. Você criou com êxito uma relação muitos-para-muitos.

Captura de tela da relação muitos-para-muitos em Gerenciar Relação.

Para obter mais informações, confira Relações muitos-para-muitos no Power BI.