Como trabalhar com mesclagens no LookML

Com as mesclagens, é possível conectar diferentes vistas da propriedade para que você possa explorar dados de mais de uma vista da propriedade ao mesmo tempo e ver como partes diferentes dos seus dados se relacionam entre si.

Por exemplo, seu banco de dados pode incluir as tabelas order_items, orders e users. Você pode usar junções para explorar dados de todas as tabelas ao mesmo tempo. Nesta página, explicamos as junções no LookML, incluindo parâmetros e padrões de mesclagem específicos.

As participações começam com o recurso Explorar

As junções são definidas no arquivo de modelo para estabelecer a relação entre uma exploração e uma visualização. As mesclagens conectam uma ou mais visualizações a uma única visualização, seja diretamente ou por outra visualização mesclada.

Vamos considerar duas tabelas de banco de dados: order_items e orders. Depois de gerar visualizações para ambas as tabelas, declare uma ou mais delas no parâmetro explore no arquivo de modelo:

explore: order_items { ... }

Quando você executa uma consulta na exploração order_items, order_items aparece na cláusula FROM do SQL gerado:

SELECT ...
FROM order_items

Você pode participar de mais informações com nossa exploração order_items. Por exemplo, para adicionar dados sobre o orders de que order_item faz parte, faça algo como:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

O LookML acima realiza duas ações. Primeiro, é possível ver os campos de orders e order_items na UI:

Em segundo lugar, o LookML descreve como mesclar orders e order_items. Esse LookML seria convertido no seguinte SQL:

SELECT ...
FROM order_items
LEFT JOIN orders
ON order_items.order_id = orders.id

Esses parâmetros do LookML são descritos em mais detalhes nas seções a seguir. Consulte a página de referência do parâmetro join para saber mais sobre como esse LookML é convertido em SQL.

Dica da equipe do Chat: os usuários perguntam com mais frequência sobre o erro de validação "Campo desconhecido ou inacessível", que pode ser causado por uma mesclagem ausente. Consulte a página de práticas recomendadas sobre esse erro para mais informações.

Parâmetros de mesclagem

Quatro parâmetros principais são usados para mesclar: join, type, relationship e sql_on.

Etapa 1: como começar a explorar

Primeiro, crie a exploração order_items:

explore: order_items { ... }

Etapa 2: join

Para mesclar uma tabela, primeiro é necessário declará-la em uma visualização. Neste exemplo, orders é uma visualização existente no nosso modelo.

Em seguida, use o parâmetro join para declarar que você quer mesclar a visualização orders ao order_items:

explore: order_items {
  join: orders { ... }
}

Etapa 3: type

Considere qual type de mesclagem deve ser executada. O Looker é compatível com LEFT JOIN, INNER JOIN, FULL OUTER JOIN e CROSS JOIN. Eles correspondem aos valores de parâmetro type de left_outer, inner, full_outer e cross.

explore: order_items {
  join: orders {
    type: left_outer
  }
}

O valor padrão de type é left_outer, e geralmente é o tipo de mesclagem mais usado.

Etapa 4: relationship

Defina uma mesclagem relationship entre order_items e orders. Declarar corretamente o relationship de uma mesclagem é importante para que o Looker calcule medidas precisas. O relacionamento é definido de order_items Explorar para a visualização orders. As opções possíveis são one_to_one, many_to_one, one_to_many e many_to_many.

Neste exemplo, pode haver muitos order_items para um único order. A relação de order_items para orders é many_to_one:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
  }
}

Se você não incluir um relationship na mesclagem, o Looker usará como padrão many_to_one.

Para ver mais dicas sobre como definir o parâmetro relationship corretamente para uma mesclagem, consulte a página Práticas recomendadas para usar o parâmetro relationship corretamente.

Etapa 5: sql_on

Declare como mesclar essas duas tabelas com o parâmetro sql_on ou foreign_key. Geralmente sugerimos o sql_on, já que ele pode fazer tudo que o foreign_key faz, mas costuma ser mais fácil de entender.

sql_on é equivalente à cláusula ON no SQL gerado para uma consulta. Com este parâmetro, podemos declarar quais campos devem ser correspondidos para executar a junção:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
}

Também é possível gravar junções mais complexas. Por exemplo, talvez você queira unir somente pedidos com id maior que 1.000:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} AND ${orders.id} > 1000 ;;
  }
}

Confira os operadores de substituição para saber mais sobre a sintaxe ${ ... } nesses exemplos.

Etapa 6: teste

Para testar se essa mesclagem está funcionando conforme o esperado, acesse a opção Explorar itens do pedido. Você verá campos de order_items e orders.

Consulte Desenvolvimento de modelos para saber mais sobre como testar alterações do LookML.

Como participar por meio de outra visualização

Você pode participar de uma visualização usando outra visualização. No exemplo acima, você associou orders a order_items pelo campo order_id. Também podemos mesclar os dados de uma visualização chamada users ao Explorar order_items, mesmo que eles não compartilhem um campo comum. Para fazer isso, participe com a visualização orders.

Use sql_on ou foreign_key para mesclar users com orders em vez de order_items. Para isso, faça o escopo correto do campo de orders como orders.user_id.

Veja um exemplo usando sql_on:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
  join: users {
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.user_id} = ${users.id} ;;
  }
}

Como participar de uma visualização mais de uma vez

Uma visualização users contém dados de compradores e de vendedores. Para agrupar dados dessa visualização no order_items, mas fazer isso separadamente para compradores e vendedores, é possível mesclar users duas vezes, com nomes diferentes, usando o parâmetro from.

O parâmetro from permite especificar qual visualização usar em uma mesclagem, além de dar um nome exclusivo à mesclagem. Exemplo:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
  }
  join: buyers {
    from: users
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.buyer_id} = ${buyers.id} ;;
  }
  join: sellers {
    from: users
    type: left_outer
    relationship: many_to_one
    sql_on: ${orders.seller_id} = ${sellers.id} ;;
  }
}

Nesse caso, somente os dados de comprador são agregados como buyers, enquanto apenas os dados de vendedor são agregados como sellers.

Observação: a visualização users agora precisa ser chamada pelos nomes com alias buyers e sellers na mesclagem.

Como limitar campos de uma mesclagem

O parâmetro fields permite especificar quais campos são trazidos de uma mesclagem para uma exploração. Por padrão, todos os campos de uma visualização são trazidos quando são mesclados. No entanto, talvez você queira exibir apenas um subconjunto de campos.

Por exemplo, quando orders é associado a order_items, é possível trazer apenas os campos shipping e tax pela mesclagem:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
    fields: [shipping, tax]
  }
}

Também é possível referenciar um conjunto de campos, como [set_a*]. Cada conjunto é definido em uma visualização usando o parâmetro set. Suponha que você tenha o seguinte conjunto definido na visualização orders:

set: orders_set {
  fields: [created_date, shipping, tax]
}

Você pode optar por exibir apenas estes três campos quando mesclar orders com order_items:

explore: order_items {
  join: orders {
    type: left_outer
    relationship: many_to_one
    sql_on: ${order_items.order_id} = ${orders.id} ;;
    fields: [orders_set*]
  }
}

Agregados simétricos

O Looker usa um recurso chamado "agregações simétricas" para calcular as agregações (como somas e médias) corretamente, mesmo quando as mesclagens resultam em um fanout. Os agregados simétricos são descritos em mais detalhes na página Práticas recomendadas de agregados simétricos. O problema de fanout que eles resolvem é explicado na postagem O problema dos fanouts de SQL (em inglês).

Chaves primárias obrigatórias

Para que as medições (agregações) venham das junções, defina as chaves primárias em todas as visualizações envolvidas na junção.

Para isso, adicione o parâmetro primary_key à definição do campo da chave primária em cada visualização:

dimension: id {
  type: number
  primary_key: yes
}

Para processar corretamente as medidas unidas, o Looker depende de você especificar uma chave primária em que os valores são completamente exclusivos e não NULL. Se os dados não tiverem uma chave primária, considere se a concatenação de vários campos resultaria em uma chave primária de valores não NULL totalmente exclusivos. Se a chave primária não for exclusiva ou contiver valores NULL e a consulta incluir dados que revelam esses problemas, o Looker retornará um erro conforme descrito na página Erro: valor/chave primária não exclusiva (ou sql_distinct_key), estouro de valor ou colisão ao calcular a soma das práticas recomendadas.

Dialetos SQL compatíveis

Para que o Looker seja compatível com agregados simétricos no seu projeto, o dialeto do banco de dados também precisa ser compatível com eles. A tabela a seguir mostra quais dialetos são compatíveis com agregações simétricas na versão mais recente do Looker:

Se o dialeto não for compatível com agregações simétricas, tenha cuidado ao executar mesclagens no Looker, já que alguns tipos podem resultar em agregações imprecisas (como somas e médias). Este problema e as soluções alternativas para ele são descritos em detalhes na postagem da comunidade O problema de fanouts do SQL.

Saiba mais sobre mesclagens

Para saber mais sobre parâmetros de mesclagem no LookML, consulte a documentação de Referência de mesclagem.