Quando você estiver trabalhando nos arquivos do LookML e estiver satisfeito com as atualizações, a próxima etapa para implantar as mudanças do LookML será executar o validador do LookML para realizar 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 seguinte árvore de decisão para resolver problemas comuns do Liquid:
As seções a seguir descrevem os cenários na árvore com mais detalhes.
Por que esse erro ocorre?
Há alguns motivos para esse erro ocorrer:
- O campo a que você está se referindo 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 anexado
timeframe. - O campo está inacessível para algumas Análises 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 em si, você vai receber o erro unknown or inaccessible field.
Para resolver o erro, adicione o campo que está acionando o erro (neste exemplo, user_order_facts.lifetime_orders) à visualização que contém o campo em questão. 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. type: time grupos de dimensões representam um grupo de dimensões de período que são definidas no timeframe parâmetro. Ao referenciar grupos de dimensões no LookML, você precisa
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 referenciar o grupo de dimensões created em outro campo do LookML, será necessário referenciar uma dimensão timeframe 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 mesclagem ausente
A seguir está 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 referenciar o campo do LookMLuser_order_facts.lifetime_orders.
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 é mesclada a uma análise sem que user_order_facts também tenha sido mesclada.
Para ver quais análises estão causando o problema, expanda as ocorrências destacadas na mensagem de erro:
Essas ocorrências mostram que as análises order_items e orders no modelo ecommerce estão causando o erro. Essas Análises têm muitas junções e são definidas como as seguintes no arquivo 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, a visualização users é mesclada sem também mesclar a visualização user_order_facts. Portanto, nenhuma das análises 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 análise, 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 a que user_order_facts também está mesclada.
Por exemplo, considere a análise users:
explore: users {
join: user_order_facts {
sql_on: ${users.id} = ${user_order_facts.users_id}
}
}
Aqui, user_order_facts é mesclada. Portanto, consultar users.lifetime_orders não vai acionar um erro.
Como posso corrigir o erro quando ele é causado por uma mesclagem ausente?
Se o erro for causado por uma mesclagem ausente, você poderá corrigi-lo de algumas maneiras:
-
Mescle a visualização ausente em todos os casos. Para o exemplo usado nesta página, verifique se a visualização
user_order_factsestá mesclada sempre que a visualizaçãousersestiver mesclada em uma análise. - Exclua o campo que está causando o erro das análises se não quiser mesclar a visualização ausente.
Mesclar a visualização ausente
No exemplo anterior, o erro pode ser resolvido mesclando user_order_facts a todas as análises em que users também está mesclada. Isso garante que as análises possam acessar user_order_facts.lifetime_orders quando users.lifetime_orders for usado em uma consulta.
Você pode usar o painel de metadados no ambiente de desenvolvimento integrado para conferir todas as análises que usam a visualização users.
O exemplo a seguir mescla 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
Talvez você não queira mesclar a visualização user_order_facts a todas as análises em que users está mesclada. Por exemplo, talvez você não queira que os usuários acessem os campos da visualização user_order_facts na análise orders, mas você quer que os usuários acessem os campos da visualização users sem erro. Para fazer isso, exclua o campo que está causando o erro —
users.lifetime_orders — da análise orders usando o
fields parâmetro.
O parâmetro fields para análises permite incluir ou excluir campos específicos de uma análise. Nesse caso, você pode excluir o campo users.lifetime_orders da análise 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}
}
}