Como trabalhar com mesclagens no LookML

Com as mesclagens, você pode conectar vistas diferentes para explorar dados de mais de uma visualização ao mesmo tempo e ver como diferentes partes dos dados se relacionam.

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

As mesclas começam com a guia 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 exploração, seja diretamente ou por outra visualização mesclada.

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

explore: order_items { ... }

Quando você executa uma consulta no order_items Explorar, o order_items aparece na cláusula FROM do SQL gerado:

SELECT ...
FROM order_items

Saiba mais em order_items. Por exemplo, para adicionar dados sobre a order de que o 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} &#59;&#59;
  }
}

O LookML acima realiza duas tarefas. Primeiro, você pode ver os campos de orders e order_items na IU:

Em segundo lugar, o LookML descreve como mesclar orders e order_items. O 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 mais sobre o erro de validação, que pode ser causado por uma mesclagem ausente. Consulte o artigo da Central de Ajuda sobre esse erro para ver mais informações.

Parâmetros de mesclagem

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

Etapa 1: começar a explorar

Primeiro, crie o order_items Explore:

explore: order_items { ... }

Etapa 2: join

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

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

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

Etapa 3: type

Considere qual type de mesclagem precisa ser realizada. O Looker oferece suporte a 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. A relação é definida da visualização order_items para da visualização orders. As opções possíveis são one_to_one, many_to_one, one_to_many e many_to_many.

Nesse exemplo, pode haver várias order_items para um único order. A relação de order_items com 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á many_to_one por padrão.

Veja mais dicas sobre como definir o parâmetro relationship corretamente para uma mesclagem no artigo Corrigir o parâmetro relationship da Central de Ajuda.

Etapa 5: sql_on

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

sql_on é equivalente à cláusula ON no SQL gerado para uma consulta. Com esse parâmetro, podemos declarar quais campos serão correspondidos para realizar a mesclagem:

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

Também é possível gravar mesclagens mais complexas. Por exemplo, talvez você queira mesclar 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 &#59;&#59;
  }
}

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

Etapa 6: fazer testes

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

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

Como participar usando outra visualização

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

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

Veja um exemplo com sql_on:

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

Participar de uma visualização mais de uma vez

Uma visualização users contém dados de compradores e vendedores. Para unir os dados dessa visualização ao order_items, mas fazer isso separadamente para compradores e vendedores, é possível mesclar o 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 do comprador são agregados como buyers, enquanto apenas os dados do 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 um "Explorar". Por padrão, todos os campos de uma visualização são inseridos quando integrados. No entanto, talvez você queira exibir somente 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 escolher levar apenas esses três campos ao 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*]
  }
}

Agregadores simétricos

O Looker usa um recurso chamado "agregados simétricos" para calcular as agregações (como somas e médias) corretamente, mesmo quando as mesclas resultam em um fanout. Os agregamentos simétricos são descritos em mais detalhes no artigo Uma explicação simples dos dados agregados simétricos da Central de Ajuda, e o problema de fanout que eles resolvem é explicado no artigo O problema dos fanouts do SQL.

Chaves primárias obrigatórias

Para que as medidas (agregações) apareçam nas junções, você precisa definir as chaves primárias em todas as visualizações envolvidas na mesclagem.

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

dimension: id {
  type: number
  primary_key: yes
}

Para processar corretamente as medidas de junção, o Looker depende de você especificar uma chave primária em que os valores são valores totalmente exclusivos e não NULL. Caso seus dados não tenham uma chave primária, considere se a concatenação de vários campos resultaria em uma chave primária de valores completamente exclusivos e não NULL. Se a chave primária não for exclusiva ou tiver valores NULL e a consulta incluir dados que revelam esses problemas, o Looker retornará um erro conforme descrito neste artigo da Central de Ajuda.

Dialetos SQL compatíveis

Para que o Looker ofereça suporte a agregações simétricas no seu projeto do Looker, seu dialeto do banco de dados também precisará apoiá-los. 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 de mesclagens 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 no artigo 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.