Esta página aborda um tópico avançado e pressupõe um conhecimento sólido de LookML por parte do leitor.
Extends são um recurso valioso do LookML que permite manter o código LookML DRY (não se repita). No Looker, Análises, visualizações e painéis do LookerML 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 faz a extensão é chamado de objeto estendendo.
Estender um objeto LookML é um processo bastante simples, conforme detalhado na página de documentação Como reutilizar códigos com extensões. No entanto, há alguns casos de uso avançados que podem causar erros de referência do LookML e duplicação indesejada de objetos. Nesta página, mostramos um exemplo de como a extensão de uma Análise com base em uma visualização que estende outra visualização pode resultar em erros de referência do LookML, além de dicas que podem ajudar a eliminar esses problemas.
Caso de uso: ampliar um Explore com base em uma visualização estendida
Suponha que você queira estender a Análise events
e que a visualização em que a Análise se baseia use campos de uma visualização que estenda a visualização de base events
. Neste exemplo, a Análise events_extended
estende a Análise extends
, conforme mostrado no exemplo do LookML 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 à exploração events
base, enquanto a visualização orders
é unida à Explore, events_extended
. No entanto, a mesclagem definida na Análise de base events
referencia events.user_id
, que é um campo da visualização events
de base. Enquanto isso, a mesclagem definida na Análise de extensão events_extended
faz referência ao campo events_extended.test_id
, em que events_extended
é o nome de uma visualização ampliada com base na visualização events
. O campo test_id
referenciado na mesclagem na definição do Explore 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 LookerML exibe um erro inaccessible view
.
Para resolver isso, adicione o parâmetro from
ao LookML do Explore e defina o valor como o nome da visualização estendida, events_extended
. O parâmetro from
tem como alias 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 corromper as referências de mesclagem do Explore base (events
), adicione um parâmetro from
que é mapeado 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, ao aplicar o from: events_extended
do LookML ao LookML para a exploração estendida, é possível continuar 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 de visualização 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
.