O relacionamento muitos-para-muitos é uma das adições mais poderosas — e perigosas — do Power BI. Resolve alguns cenários reais, mas introduz complexidade e riscos de double-counting (contagem dupla) se não for usado com cuidado.
O que é muitos-para-muitos
Em um relacionamento 1:*, um ID aparece uma vez na tabela "1" e pode aparecer várias vezes na tabela "*". Em um *:*, o mesmo ID pode aparecer múltiplas vezes em ambas as tabelas. Exemplos reais:
- Um cliente pode ter múltiplos vendedores e um vendedor pode ter múltiplos clientes
- Um produto pode estar em múltiplas categorias e uma categoria pode ter múltiplos produtos
- Um funcionário pode pertencer a múltiplas equipes
Como o Power BI implementa *:*
O Power BI suporta relacionamentos *:* desde 2018. Quando você cria um relacionamento entre dois campos que não são únicos em nenhuma das tabelas, o Power BI detecta automaticamente e cria um relacionamento muitos-para-muitos.
O filtro flui bidirecionalmente por padrão — o que pode causar ambiguidade em modelos com múltiplas tabelas.
O risco de double-counting
Imagine: tabela de Vendas relacionada a tabela de Metas por Região. Se uma venda pertence a duas regiões (possível em *:*), ela pode ser contada duas vezes em um gráfico por região. Isso é o double-counting — um erro silencioso que passa despercebido se você não souber procurar.
A alternativa: tabela-ponte
Para a maioria dos casos de *:*, a solução correta é criar uma tabela intermediária (bridge table) que resolve o relacionamento em dois 1:*:
Clientes (1) --- (*) ClienteVendedor (*) --- (1) Vendedores
A tabela ClienteVendedor tem uma linha para cada par cliente-vendedor. Isso elimina a ambiguidade e torna o modelo mais explícito e correto.
Quando *:* é a escolha correta
O relacionamento *:* direto é válido quando:
- Você está conectando duas tabelas de fatos (ex: Metas e Vendas pela mesma dimensão de data/produto)
- Você entende e aceita o comportamento bidirecional
- Não há risco de double-counting no contexto específico
Perguntas frequentes
Como sei se meu relacionamento *:* está causando double-counting?
Crie uma medida de contagem de linhas da tabela de fatos e compare com o total esperado. Se o número for maior que o total de transações, há double-counting.
Posso desabilitar a direção bidirecional em um *:*?
Sim. Nas propriedades do relacionamento, mude "Direção do filtro cruzado" para "Único". Isso limita o fluxo do filtro a uma direção e reduz o risco de ambiguidade.