Quando estiver a trabalhar nos seus ficheiros LookML e estiver satisfeito com as atualizações, o passo seguinte para implementar as alterações do LookML é executar o validador de LookML para fazer uma validação completa do modelo.
Ocasionalmente, pode ver um erro como o seguinte:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
Neste exemplo, o erro refere-se ao campo lifetime_orders na visualização users. O erro indica que users.lifetime_orders não consegue aceder ao campo user_order_facts.lifetime_orders ao qual faz referência.
Árvore de depuração
Use a seguinte árvore de decisão para resolver problemas comuns do Liquid:
As secções seguintes descrevem os cenários na árvore mais detalhadamente.
Por que motivo ocorre este erro?
Existem alguns motivos pelos quais este erro pode ocorrer:
- O campo ao qual está a fazer referência não existe.
-
O campo ao qual está a fazer referência é um grupo de dimensões completo, por exemplo, um grupo de dimensões é referenciado sem um
timeframeanexado. - O campo é inacessível por algumas explorações porque existe uma junção em falta.
O campo não existe
Se o campo user_order_facts.lifetime_orders for referenciado em campos LookML, mas não existir como um campo em si, recebe o erro unknown or inaccessible field.
Pode resolver o erro adicionando o campo que está a acionar o erro (neste exemplo, user_order_facts.lifetime_orders) à vista que contém o campo em questão. Neste caso, pode certificar-se de que o campo está definido na vista user_order_facts. Se não existir, pode adicioná-lo.
O campo faz referência a um grupo de dimensões completo
Os grupos de dimensões representam um grupo de dimensões. Os grupos de dimensões type: time representam um grupo de dimensões do período que são definidas no parâmetro timeframe. Quando faz referência a grupos de dimensões no LookML, tem de anexar a dimensão adequada, neste caso, timeframe, 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 quiser fazer referência ao grupo de dimensões created noutro campo LookML, tem de fazer referência a uma dimensão de intervalo de tempo específica no grupo, como uma das seguintes:
-
date:${created_date} -
week:${created_week} -
month:${created_month}
Se tentar usar apenas o nome do grupo de dimensões, ${created}, o Looker não sabe a que período se refere e gera o erro.
Existe uma junção em falta
Segue-se a definição do LookML de users.lifetime_orders:
dimension: lifetime_orders {
type: number
sql: ${user_order_facts.lifetime_orders};;
}
Tenha em atenção a utilização dos operadores de substituição${}para fazer referência ao campo do LookMLuser_order_facts.lifetime_orders.
A dimensão lifetime_orders na vista users faz referência ao campo lifetime_orders da vista user_order_facts. Neste caso, o erro é acionado porque existem instâncias no ficheiro de modelo em que a vista users está associada a uma exploração sem que o conjunto de dados user_order_facts também tenha sido associado.
Para ver que análises detalhadas estão a causar o problema, pode expandir as ocorrências realçadas na mensagem de erro:
Estas ocorrências mostram que os elementos Explorar order_items e orders no modelo ecommerce estão a causar o erro. Estas explorações têm muitas junções e são definidas da seguinte forma no ficheiro do 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 opções Explorar, a vista users é unida sem unir também a vista user_order_facts. Como tal, nenhuma das opções Explorar pode aceder ao campo user_order_facts.lifetime_orders. Se tentasse consultar o campo users.lifetime_orders, que faz referência a user_order_facts.lifetime_orders, em qualquer uma das funções Explorar, acionaria o erro.
O validador de LookML está a avisá-lo de que os utilizadores vão receber o erro quando consultarem users_order_facts.lifetime_orders. O campo users.lifetime_orders não aciona o erro numa exploração à qual user_order_facts também está associado.
Por exemplo, considere a opção users Explorar:
explore: users {
join: user_order_facts {
sql_on: ${users.id} = ${user_order_facts.users_id}
}
}
Aqui, user_order_facts is está associado, pelo que a consulta de users.lifetime_orders não aciona um erro.
Como posso corrigir o erro quando é causado por uma junção em falta?
Se o erro for causado por uma junção em falta, pode corrigi-lo de algumas formas:
-
Junte a vista em falta em todos os casos. Para o exemplo usado ao longo desta página, certifique-se de que a visualização de propriedade
user_order_factsestá associada sempre que a visualização de propriedadeusersestiver associada numa análise detalhada. - Exclua o campo que está a causar o erro das explorações se não quiser juntar a vista em falta.
Junte-se à vista em falta
No exemplo anterior, o erro pode ser resolvido juntando user_order_facts a todas as explorações onde users também está associado. Isto garante que as explorações podem aceder a user_order_facts.lifetime_orders quando users.lifetime_orders é usado numa consulta.
Pode usar o painel de metadados no IDE para ver todas as explorações que usam a vista users.
O exemplo seguinte junta as visualizações em falta:
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 executar novamente o validador do LookML, este erro não deve ser apresentado.
Exclua o campo que está a causar o erro das explorações
Pode não querer associar a vista user_order_facts a todas as opções Explorar onde users está associado. Por exemplo, talvez não queira que os utilizadores acedam aos campos da vista user_order_facts na vista orders Explorar, mas quer que os utilizadores acedam aos campos da vista users sem erros. Pode fazê-lo excluindo o campo que está a causar o erro, ou seja, users.lifetime_orders, da ordersExploração, usando o parâmetro fields.
O parâmetro fields para explorações permite-lhe incluir ou excluir campos específicos de uma exploração. Neste caso, pode excluir o campo users.lifetime_orders da opção orders Explorar semelhante a isto:
explore: orders {
fields: [-users.lifetime_orders] # exclude users.lifetime_orders
join: users {
relationship: many_to_one
sql_on: ${orders.user_id} = ${users.id}
}
}