Esta página aborda um tópico avançado e pressupõe um conhecimento sólido do LookML da parte do leitor.
Extends é um recurso útil do LookML que permite manter o código do LookML com DRY (não se repita). No Looker, as análises detalhadas, as visualizações e os painéis do LookML podem ser estendidos com o parâmetro extends
em um arquivo de modelo, como no exemplo a seguir:
explore: orders { view_name: orders join: users { type: left_outer sql_on: %{orders.user_id} = ${users.id} ;; relationship: many_to_one } } explore: transactions { extends: [orders] }
Neste exemplo, o parâmetro extends
é usado na definição da Análise transactions
para estender a Análise orders
.
Esta página se refere ao objeto que está sendo estendido como o objeto base, e o objeto que está fazendo a extensão é referido como o objeto extending.
Este é um processo bastante simples, conforme detalhado na página de documentação Como reutilizar código com extensões. No entanto, há alguns casos de uso avançados que podem causar erros de referência do LookML e duplicação de objetos indesejada. Esta página fornece um exemplo de como estender uma Análise com base em uma visualização que estende outra pode resultar em erros de referência do LookML, bem como dicas que podem ajudar a eliminar esses problemas.
Caso de uso: estender uma Análise com base em uma visualização estendida
Suponha que você queira estender a Análise events
e queira a visualização em que ela se baseia para usar campos de uma visualização que estende a events
básica. Neste exemplo, a Análise events_extended
estende a extends
, como mostrado no LookML de exemplo a seguir:
explore: events { view_name: events join: users { type: left_outer sql_on: ${events.user_id} = ${users.id} ;; relationship: many_to_one } } explore: events_extended { extends: [events] join: orders { sql_on: ${events_extended.test_id} = ${orders.id} ;; relationship: many_to_one }
Nesse exemplo, a visualização users
é unida à Análise básica events
, enquanto a visualização orders
é unida à Análise estendida, events_extended
. No entanto, a junção definida na Análise básica events
faz referência a events.user_id
, que é um campo da visualização events
básica. Enquanto isso, a mesclagem definida na análise events_extended
de extensão faz referência ao campo events_extended.test_id
, em que events_extended
é o nome de uma visualização de extensão com base na visualização events
. O campo test_id
referenciado na mesclagem na definição de análise detalhada events_extended
é definido na visualização events_extended
estendida da seguinte maneira:
include: "events.view.lkml" view: events_extended { extends: [events] dimension: test_id {}
Como a mesclagem definida na análise events_extended
faz referência ao nome da visualização estendida, events_extended
, o Validador do LookML mostra um erro inaccessible view
.
Para resolver isso, adicione o parâmetro from
ao LookML para a Análise estendida e defina o valor dele como o nome da visualização estendida, events_extended
. O parâmetro from
cria um alias para o nome da tabela original no SQL gerado, como FROM schema.name AS alias
.
Esse é o único caso de uso recomendado para aplicar o parâmetro from
no nível da Análise.
Para extrair da visualização estendida (events_extended
) sem quebrar as referências de mesclagem da Análise básica (events
), você pode adicionar um parâmetro from
que mapeia para a visualização estendida:
explore: events_extended { extends: [events] from: events_extended join: orders { relationship: many_to_one sql_on: ${events.test_id} = ${orders.id} ;; } }
Neste exemplo, aplicar o from: events_extended
do LookML ao LookML para a extensão de uma Análise permite que você continue referenciando a visualização base (events
) na Análise estendida, redirecionando essas referências para extrair da versão estendida dessa visualização (events_extended
).
Com o uso do parâmetro from
, é possível continuar referenciando o nome da visualização de base events
nos prefixos de mesclagem, mas essas referências vão ser extraídas da visualização estendida events_extended
, que contém todos os campos em events
, além do novo campo test_id
.