Fanout no Looker: O Guia Definitivo Para Evitar Duplicação
Ao criar relatórios no Looker, é comum encontrar situações onde os totais parecem inflados sem um motivo aparente. Seu faturamento parece maior do que deveria? Contagens de itens aparecem duplicadas? Se sim, você provavelmente está lidando com o fanout.
O Que é Fanout?
Fanout é um fenômeno que acontece quando a adição de um JOIN em suas consultas resulta em um aumento indevido no número de linhas. Consequentemente, medidas como SUM e COUNT passam a exibir valores inflados, gerando imprecisões nos seus dados. De forma simples, uma única linha no resultado se multiplica em várias após um JOIN.

Exemplo Prático de Fanout
Vamos ilustrar com um cenário comum:
Tabelas Envolvidas:
- Tabela de Pedidos: Contém informações gerais sobre cada pedido.

- Tabela de Itens do Pedido: Lista os produtos e quantidades de cada pedido.

O Join e o Resultado:
Ao realizar um LEFT JOIN entre a tabela de Pedidos e a tabela de Itens do Pedido, usando o ID do pedido como chave, observe o que acontece:
orders LEFT JOIN order_items ON orders.order_id = order_items.order_id
Imagine um pedido com valor R$ 100,00 que possui dois itens. Após o join, essa informação pode ser replicada para cada item, dobrando o valor total.

Resultado:
- Valor original: R$ 100,00
- Após o join (
SUM(amount)): R$ 200,00 ❌
Por Que o Fanout Acontece?
O fanout ocorre principalmente devido a relacionamentos do tipo um-para-muitos. Isso significa que um registro em uma tabela pode estar associado a múltiplos registros em outra tabela. Um exemplo clássico é um pedido que pode ter vários itens. Se você simplesmente junta essas tabelas sem o devido cuidado, cada item associado ao pedido multiplicará a informação do pedido original.

Exemplo: Um pedido (um) pode ter vários itens (muitos). Essa relação é um gatilho para o fanout.
Como o Fanout Afeta Suas Métricas
As métricas agregadas, como soma de valores ou contagem de registros, são as mais afetadas. Ao ter linhas duplicadas, o SUM somará o valor de cada linha multiplicada, e o COUNT contará cada ocorrência separadamente, distorcendo os resultados e levando a análises equivocadas.

Como Identificar o Fanout
Preste atenção aos seguintes sinais:
- Métricas (valores de vendas, contagens) aumentam drasticamente após adicionar um novo
JOIN. - A mesma dimensão aparece com linhas duplicadas nos resultados.
- Os totais calculados não batem com os valores esperados ou com os dados nas tabelas de origem.
Dica de Debug:
Adicionar uma medida de contagem simples, como COUNT(*) ou COUNT(DISTINCT id), pode ajudar a visualizar o aumento de linhas.
measure: row_count {
type: count
}
Como o Looker Lida com o Fanout
O Looker oferece ferramentas poderosas para controlar o fanout explicitamente e garantir a precisão dos seus dados:
1. Defina a Relação Corretamente
Ao definir seus JOINs no LookML, especifique o tipo de relação entre as tabelas. Para um caso onde um pedido tem vários itens, a relação é one_to_many.
join: order_items {
type: left_outer
relationship: one_to_many
sql_on: ${orders.order_id} = ${order_items.order_id} ;;
}
Isso informa ao Looker que a duplicação de linhas é esperada e que ele deve ter cautela com as agregações.
2. Utilize Medidas SUM_DISTINCT
Para campos numéricos que podem ser duplicados, utilize sum_distinct. Essa medida garante que cada valor seja somado apenas uma vez, mesmo que apareça em múltiplas linhas.
measure: total_revenue {
type: sum_distinct
sql: ${amount} ;;
}
3. Use Chaves Primárias
Definir a chave primária para suas dimensões ajuda o Looker a entender quais campos identificam registros únicos, auxiliando na prevenção de contagens e somas duplicadas.
dimension: order_id {
primary_key: yes
}
4. Use Tabelas Derivadas (Melhor Prática)
Uma abordagem robusta é pré-agregar os dados antes mesmo de realizar o join principal. Tabelas derivadas (derived_tables) são ideais para isso.
view: order_summary {
derived_table: {
sql:
SELECT order_id, SUM(amount) AS total_amount
FROM orders
GROUP BY order_id
;;
}
}
Ao pré-agregar, você evita completamente a duplicação de linhas no nível dos itens do pedido antes de juntá-lo com outras informações.
5. Use COUNT_DISTINCT
Para contagens únicas de identificadores (como IDs de pedidos), use count_distinct. Isso garante que cada ID seja contado apenas uma vez, independentemente de quantas vezes ele aparece após um join.
measure: unique_orders {
type: count_distinct
sql: ${order_id} ;;
}
Cenário Real: Dashboard de E-commerce
Em um dashboard de e-commerce, é comum unir dados de Pedidos, Itens do Pedido e Pagamentos. Sem o tratamento adequado do fanout, você pode observar:
- Receita duplicada.
- Contagem de pedidos inflada.
Com o modelagem correta, garantindo que o fanout seja controlado, você terá:
- KPIs precisos.
- Dashboards confiáveis para tomada de decisão.
Melhores Práticas
- Sempre defina o tipo de
relationshipnos seusJOINs. - Use
COUNT_DISTINCTpara contagens de IDs. - Evite somar campos que podem ser duplicados sem o uso de
SUM_DISTINCT. - Pré-agregue dados em tabelas derivadas quando lidar com grandes volumes.
- Teste seus
JOINse validações de métricas antes de utilizá-los em dashboards.
Ponto Chave
Fanout é a multiplicação de linhas causada por JOINs. Se não for tratado, ele corrói a precisão das suas métricas. Uma modelagem cuidadosa no LookML é a chave para evitar esse problema e garantir relatórios confiáveis.
Definição Rápida
Fanout no Looker é a duplicação não intencional de linhas resultado de JOINs, levando a agregações incorretas em medidas.
chat_bubble Comentários (0)
Nenhum comentário ainda. Seja o primeiro a comentar!
Deixe seu comentário