Trabalhar com relacionamentos e cardinalidade

Concluído

Diferentemente de outros sistemas de gerenciamento de banco de dados, o Power BI tem o conceito de direcionalidade para um relacionamento. Essa direcionalidade desempenha um papel importante na filtragem de dados entre várias tabelas. Quando você carrega dados, o Power BI procura automaticamente relacionamentos existentes dentro dos dados combinando nomes de coluna. Você também pode usar Gerenciar Relacionamentos para editar manualmente essas opções.

Por exemplo, você recuperou muitas tabelas do banco de dados Sales, e a imagem a seguir é um exemplo do modelo semântico. O Power BI detectou automaticamente diversos relacionamentos, mas você não consegue discernir o que eles significam. Você deseja verificar se os relacionamentos refletem com precisão aqueles existentes nos dados.

Captura de tela de um modelo semântico de exemplo

Relacionamentos

Estes são diferentes tipos de relacionamentos que você encontrará no Power BI.

Relacionamento muitos para um (*:1) ou um para muitos (1: *)

  • Descreve um relacionamento em que você tem muitas instâncias de um valor em uma coluna relacionadas a apenas uma instância correspondente exclusiva em outra coluna.

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

  • Trata-se do tipo mais comum de direcionalidade e é o padrão do Power BI quando você está criando relacionamentos automaticamente.

Um exemplo de um relacionamento de um para muitos seria entre as tabelas CountryName e Territory, em que é possível ter muitas regiões associadas a um país exclusivo.

Captura de tela do relacionamento muitos para um.

Relacionamento um para muitos (1:1):

  • Descreve um relacionamento em que somente uma instância de um valor é comum entre duas tabelas.

  • Requer valores exclusivos em ambas as tabelas.

  • Não é recomendável porque esse relacionamento armazena informações redundantes e sugere que o modelo não foi projetado corretamente. É melhor praticar a combinação das tabelas.

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

Captura de tela do relacionamento um para muitos.

Relacionamento muitos para muitos (.):

  • Descreve um relacionamento em que muitos valores são comuns entre duas tabelas.

  • Não requer valores exclusivos em nenhuma das duas tabelas em um relacionamento.

  • 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 ao quê.

Por exemplo, a figura a seguir mostra um relacionamento muitos para muitos entre as tabelas Sales e Order na coluna OrderDate porque várias vendas podem ter várias ordens associadas a elas. A ambiguidade é introduzida porque ambas as tabelas podem ter a mesma data de ordem.

Captura de tela do relacionamento muitos para muitos.

Direção do filtro cruzado

Os dados podem ser filtrados em um ou ambos os lados de um relacionamento.

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

  • Somente uma tabela em um relacionamento 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 no relacionamento entre as tabelas para saber em qual direção o filtro fluirá. Normalmente convém que essas setas apontem para a tabela de fatos.

  • Para um relacionamento 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 um relacionamento pode ser usada para filtrar os outros. 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.

  • É possível que haja um desempenho inferior durante o uso da filtragem cruzada bidirecional com relacionamentos muitos para muitos.

Um aviso em relação à filtragem cruzada bidirecional: você não deve habilitar relacionamentos de filtragem cruzada bidirecional a menos que compreenda perfeitamente as ramificações de fazê-lo. Habilitá-la pode acarretar ambiguidade, excesso de amostragem, resultados inesperados e degradação potencial do desempenho.

Cardinalidade e direção do filtro cruzado

Para relacionamentos um para um, a única opção disponível é a filtragem cruzada bidirecional. Os dados podem ser filtrados em ambos os lados desse relacionamento e acarretam um valor distinto e não ambíguo. Por exemplo, você pode filtrar por uma ID do produto (product ID) e receber um único produto, bem como pode filtrar por um produto e receber uma única ID do produto (product ID).

Para relacionamentos 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 um relacionamento muitos para muitos, pois haverá vários caminhos entre tabelas diferentes. Se você criar uma medida, um cálculo ou um filtro, consequências indesejadas poderão ocorrer onde os dados estão sendo filtrados e, dependendo do relacionamento escolhido pelo mecanismo Power BI ao aplicar o filtro, o resultado final pode ser diferente. Essa situação também acontece com relacionamentos bidirecionais e, por isso, você deve tomar cuidado ao usá-los.

Por esse motivo, relacionamentos muitos para muitos e/ou relacionamentos bidirecionais são complicados. A menos que você tenha certeza da aparência dos dados quando agregados, esses tipos de relacionamentos abertos com várias direções de filtragem podem introduzir vários caminhos por meio dos dados.

Criar relacionamentos muitos para muitos

Considere o cenário em que você tem a tarefa de compilar um visual que examine orçamentos para clientes e contas. Você pode ter vários clientes na mesma conta e várias contas com o mesmo cliente, logo, você sabe que precisa criar um relacionamento muitos para muitos.

Captura de tela do relacionamento muitos para muitos.

Para criar esse relacionamento, vá até Gerenciar Novos>Relacionamentos. Na janela resultante, crie um relacionamento entre a coluna Customer ID em CustomerTable e AccountTable. O relacionamento é definido como muitos para muitos, e o tipo de filtro está em ambas as direções. No primeiro momento, você receberá o aviso de que só deverá usar esse tipo de relacionamento se for esperado que nenhuma coluna tenha valores exclusivos, porque, do contrário, você receberá valores inesperados. Como convém filtrar em ambas as direções, escolha filtragem cruzada bidirecional.

Selecione OK. Você criou com êxito um relacionamento muitos para muitos.

Captura de tela do relacionamento muitos para muitos em Gerenciar Relacionamento.

Para obter mais informações, consulte Relacionamentos muitos para muitos no Power BI.