Quando você estiver trabalhando nos arquivos do LookML e satisfeito com as atualizações, a próxima etapa para implantar as mudanças é executar o validador do LookML e 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 a árvore 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
timeframeanexado. - 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 que 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_ordersda 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 a 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 mesclado, 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_factsestá unida sempre que a visualizaçãousersestiver unida em uma Análise. - Exclua o campo que está causando o erro das análises detalhadas se não quiser associar 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}
}
}