Quando você estiver trabalhando nos arquivos do LookML e ficar satisfeito com as atualizações, a próxima etapa para implantar as mudanças do LookML será executar o validador do LookML para fazer uma validação completa do modelo.
Às vezes, você pode encontrar um erro como este:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
Neste exemplo, o erro se refere ao campo lifetime_orders
na visualização users
. O erro indica que users.lifetime_orders
não pode acessar o campo user_order_facts.lifetime_orders
a que se refere.
Árvore de depuração
Use o diagrama de decisão a seguir para resolver problemas comuns do Liquid:
As seções a seguir descrevem os cenários na árvore em mais detalhes.
Por que esse erro ocorre?
Esse erro pode ocorrer por alguns motivos:
- O campo que você está referenciando não existe.
-
O campo a que você está se referindo é um grupo de dimensões inteiro. Por exemplo, um grupo de dimensões é referenciado sem um
timeframe
anexado. - O campo não pode ser acessado por algumas análises detalhadas porque há uma junção ausente.
O campo não existe
Se o campo user_order_facts.lifetime_orders
for referenciado em campos do LookML, mas não existir como um campo, você vai receber o erro unknown or inaccessible field
.
Para resolver o erro, adicione o campo que está causando o problema (neste exemplo, user_order_facts.lifetime_orders
) à visualização que o contém. Nesse caso, verifique se o campo está definido na visualização user_order_facts
. Se ele não existir, adicione-o.
O campo faz referência a um grupo de dimensões inteiro
Os grupos de dimensões representam um grupo de dimensões. Os grupos de dimensões type: time
representam um grupo de dimensões de período definidas no parâmetro timeframe
. Ao referenciar grupos de dimensões na LookML, é obrigatório anexar a dimensão apropriada (timeframe
, neste caso) ao nome do grupo de dimensões.
Por exemplo, considere o seguinte grupo de dimensões:
dimension_group: created { type: time timeframes: [date, week, month] sql: ${TABLE}.created_at ;; }
Se você quiser fazer referência ao grupo de dimensões created
em outro campo da LookML, é preciso referenciar uma dimensão de período específica no grupo, como uma das seguintes:
-
date
:${created_date}
-
week
:${created_week}
-
month
:${created_month}
Se você tentar usar apenas o nome do grupo de dimensões — ${created}
—, o Looker não saberá a qual período você está se referindo e vai gerar o erro.
Há uma junção ausente
Confira a definição do LookML de users.lifetime_orders
:
dimension: lifetime_orders { type: number sql: ${user_order_facts.lifetime_orders};; }
Observe o uso dos operadores de substituição${}
para fazer referência ao campouser_order_facts.lifetime_orders
da LookML.
A dimensão lifetime_orders
na visualização users
faz referência ao campo lifetime_orders
da visualização user_order_facts
. Nesse caso, o erro é acionado porque há instâncias no arquivo de modelo em que a visualização users
é unida a uma análise sem que o user_order_facts
também tenha sido unido.
Para saber quais análises detalhadas estão causando o problema, expanda as ocorrências destacadas na mensagem de erro:
Essas ocorrências mostram que as análises detalhadas order_items
e orders
no modelo ecommerce
estão causando o erro. Essas análises detalhadas têm muitas junções e são definidas da seguinte maneira no arquivo de modelo:
explore: orders { join: users { # users joined without user_order_facts relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } } explore: order_items { join: inventory_items { relationship: many_to_one sql_on: ${order_items.inventory_item_id} = ${inventory_items.id} } join: orders { relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} } join: users { # users joined without user_order_facts relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }
Em ambas as análises detalhadas, a visualização users
é unida sem unir também a visualização user_order_facts
. Portanto, nenhuma das análises detalhadas pode acessar o campo user_order_facts.lifetime_orders
. Se você tentasse consultar o campo users.lifetime_orders
, que faz referência a user_order_facts.lifetime_orders
, em qualquer uma das opções de análise detalhada, o erro seria acionado.
O validador do LookML está avisando que os usuários vão receber o erro ao consultar users_order_facts.lifetime_orders
. O campo users.lifetime_orders
não vai acionar o erro em uma análise detalhada em que user_order_facts
também está associado.
Por exemplo, considere a análise detalhada users
:
explore: users { join: user_order_facts { sql_on: ${users.id} = ${user_order_facts.users_id} } }
Aqui, user_order_facts
is joined, então consultar users.lifetime_orders
não vai gerar um erro.
Como posso corrigir o erro quando ele é causado por uma junção ausente?
Se o erro for causado por uma junção ausente, você poderá corrigi-lo de algumas maneiras:
-
Junte-se à visualização ausente em todos os casos. Para o exemplo usado nesta página, verifique se a visualização
user_order_facts
está unida sempre que a visualizaçãousers
estiver unida em uma Análise. - Exclua o campo que está causando o erro das análises detalhadas se não quiser fazer a junção com a visualização ausente.
Participar da visualização ausente
No exemplo anterior, o erro pode ser resolvido unindo user_order_facts
a todas as análises detalhadas em que users
também está unido. Isso garante que as análises detalhadas possam acessar user_order_facts.lifetime_orders
quando users.lifetime_orders
for usado em uma consulta.
Use o painel de metadados no ambiente de desenvolvimento integrado para conferir todas as análises detalhadas que usam a visualização users
.
O exemplo a seguir une as visualizações ausentes:
explore: order_items { join: inventory_items { relationship: many_to_one sql_on: ${inventory_items.id} = ${order_items.inventory_item_id} } join: orders { relationship: many_to_one sql_on: ${order_items.order_id} = ${orders.id} } join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } join: user_order_facts { # join user_order_facts through users relationship: many_to_one sql_on: ${users.id} = ${user_order_facts.users_id} } }
Agora, se você executar o validador do LookML novamente, esse erro não vai aparecer.
Excluir o campo que está causando o erro das análises detalhadas
Talvez você não queira unir a visualização user_order_facts
a todas as Análises em que users
está unido. Por exemplo, talvez você não queira que os usuários acessem os campos da visualização user_order_facts
na análise detalhada orders
, mas queira que eles acessem os campos da visualização users
sem erros. Para isso, exclua o campo que está causando o erro — users.lifetime_orders
— da análise detalhada orders
usando o parâmetro fields
.
O parâmetro fields
para análises detalhadas permite incluir ou excluir campos específicos de uma análise. Nesse caso, você pode excluir o campo users.lifetime_orders
da análise detalhada orders
desta forma:
explore: orders { fields: [-users.lifetime_orders] # exclude users.lifetime_orders join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }