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
timeframe
anexado. - 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 do 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 o cartã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_facts
é unida sempre que a visualização de propriedadeusers
é unida numa exploração. - 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 análises detalhadas 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 erro. Pode fazê-lo excluindo o campo que está a causar o erro, ou seja, users.lifetime_orders
, da orders
Exploraçã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} } }