Trabalhar com relações e cardinalidade

Concluído

Ao contrário de outros sistemas de gestão de bases de dados, o Power BI tem o conceito de direccionalidade para uma relação. Esta direccionalidade desempenha um papel importante na filtragem de dados entre várias tabelas. Quando carrega dados, o Power BI procura automaticamente relações que existem nos dados através da correspondência de nomes de colunas. Também pode utilizar Manage Relationships para editar estas opções manualmente.

Por exemplo, recuperou muitas tabelas da base de dados Sales e a imagem seguinte é um exemplo do seu modelo semântico. Power BI detectou automaticamente várias relações, mas não se consegue perceber o que significam. Pretende certificar-se de que as relações reflectem com precisão as que existem nos seus dados.

Relações

Seguem-se os diferentes tipos de relações que se podem encontrar Power BI.

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

  • Descreve uma relação em que existem muitas instâncias de um valor numa coluna que estão relacionadas com apenas uma instância única correspondente noutra coluna.

  • Descreve a direccionalidade entre as tabelas de factos e de dimensões.

  • É o tipo mais comum de direccionalidade e é a predefinição Power BI quando se criam relações automaticamente.

Um exemplo de uma relação um-para-muitos seria entre as tabelas CountryName e Territory, onde pode haver muitos territórios associados a um único país/região.

Relação de um para um (1:1):

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

  • Requer valores únicos em ambas as tabelas.

  • Não é recomendado porque esta relação armazena informações redundantes e sugere que o modelo não foi concebido corretamente. É preferível combinar os quadros.

Um exemplo de uma relação de um para um seria se tivesse produtos e IDs de produtos em duas tabelas diferentes. Criar uma relação de um para um é redundante e estas duas tabelas devem ser combinadas.

Relação de muitos para muitos (.):

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

  • Não requer valores únicos em nenhuma das tabelas de uma relação.

  • Não é recomendado; a falta de valores únicos introduz ambiguidade e os seus utilizadores podem não saber que coluna de valores se refere a quê.

Por exemplo, a figura seguinte mostra uma relação de muitos para muitos entre as tabelas Sales e Order na coluna OrderDate porque várias vendas podem ter várias encomendas associadas. A ambiguidade é introduzida porque ambas as tabelas podem ter a mesma data de encomenda.

Direção do filtro cruzado

Os dados podem ser filtrados num ou em ambos os lados de uma relação.

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

  • Apenas uma tabela numa relação pode ser utilizada para filtrar os dados. Por exemplo, o quadro 1 pode ser filtrado pelo quadro 2, mas o quadro 2 não pode ser filtrado pelo quadro 1.

    Dica

    Siga a direção da seta na relação entre as suas mesas para saber em que direção o filtro irá fluir. Normalmente, estas setas devem apontar para a tabela de factos.

  • 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 direcções de filtragem cruzada ou filtragem cruzada bidirecional:

  • Uma tabela numa relação pode ser utilizada para filtrar a outra. Por exemplo, uma tabela de dimensão pode ser filtrada através da tabela de factos, e as tabelas de factos podem ser filtradas através da tabela de dimensão.

  • Poderá ter um desempenho inferior quando utilizar a filtragem cruzada bidirecional com relações muitos-para-muitos.

Uma palavra de cautela em relação à filtragem cruzada bidirecional: Não deve ativar as relações de filtragem cruzada bidirecional, a menos que compreenda totalmente as ramificações de o fazer. A sua ativação pode conduzir a ambiguidade, sobre-amostragem, resultados inesperados e potencial degradação do desempenho.

Cardinalidade e direção de filtro cruzado

Para relações de um para um, a única opção disponível é a filtragem cruzada bidirecional. Os dados podem ser filtrados em qualquer um dos lados desta relação e resultar num valor distinto e não ambíguo. Por exemplo, pode filtrar um ID de produto e receber um único produto, e pode filtrar um produto e receber um único ID de produto.

Para relações muitos-para-muitos, pode optar por filtrar numa única direção ou em ambas as direcções, utilizando a filtragem cruzada bidirecional. A ambiguidade que está associada à filtragem cruzada bidirecional é amplificada numa relação muitos-para-muitos porque existirão vários caminhos entre diferentes tabelas. Se criar uma medida, um cálculo ou um filtro, podem ocorrer consequências indesejadas nos casos em que os dados estão a ser filtrados e, dependendo da relação que o motor Power BI escolher ao aplicar o filtro, o resultado final pode ser diferente. Esta situação também se aplica às relações bidireccionais e é por isso que deve ter cuidado ao utilizá-las.

Por isto motivo, as relações de muitos para muitos e/ou as relações bidireccionais são complicadas. A menos que tenha a certeza do aspeto dos seus dados quando agregados, estes tipos de relações abertas com várias direcções de filtragem podem introduzir vários caminhos através dos dados.

Criar relações de muitos para muitos

Considere o cenário em que é encarregado de criar um visual que examina os orçamentos de clientes e contas. É possível ter vários clientes na mesma conta e várias contas com o mesmo cliente, pelo que se sabe que é necessário criar uma relação de muitos para muitos.

Para criar esta relação, aceda a Gerir relações>Nova. Na janela resultante, crie um relacionamento entre a coluna Customer ID em CustomerTable e AccountTable. A relação é definida como muitos-para-muitos e o tipo de filtro é em ambas as direcções. Imediatamente, será avisado de que só deve utilizar isto tipo de relação se for expetável que nenhuma das colunas tenha valores únicos, pois poderá obter valores inesperados. Uma vez que pretende filtrar em ambas as direcções, escolha bi-directional cross-filtering.

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

Para mais informações, consultar Relações muitos-para-muitos em Power BI.