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 é 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
que ele referencia.
Por que esse erro ocorre?
Esse erro pode ocorrer por alguns motivos:
- O campo mencionado não existe.
-
O campo que você está referenciando é 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 mesclagem ausente.
Opção 1: o campo não existe
Se o campo user_order_facts.lifetime_orders
for referenciado nos campos do LookML, mas não existir como um campo em si, você receberá o erro unknown or inaccessible field
.
Para resolver o problema, adicione o campo que está causando 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.
Opção 2: 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 fazer referência a grupos de dimensões no LookML, você precisa
anexe 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 do LookML, faça referência a uma dimensão timeframe específica no grupo, como uma das seguintes opções:
-
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.
Opção 3: falta uma mesclagem
Esta é a definição de users.lifetime_orders
no LookML:
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
do LookML.
A dimensão lifetime_orders
na visualização users
faz referência ao campo lifetime_orders
na 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 a user_order_facts
.
Para saber quais guias de descobertas estão causando o problema, abra 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 mesclagens e são definidas da seguinte forma 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
é mesclada sem mesclar a visualização user_order_facts
. Portanto, nenhuma das análises detalhadas pode acessar o campo user_order_facts.lifetime_orders
. Se você tentar consultar o campo users.lifetime_orders
, que faz referência a user_order_facts.lifetime_orders
, em qualquer uma das opções "Explorar", o erro será acionado.
O validador do LookML está avisando que os usuários receberão o erro ao consultar users_order_facts.lifetime_orders
. O campo users.lifetime_orders
não vai acionar o erro em uma Análise em que user_order_facts
também está associado.
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
é unido, então a consulta de users.lifetime_orders
não vai acionar um erro.
Como posso corrigir o erro quando ele for causado por uma mesclagem ausente?
Se o erro for causado por uma mesclagem ausente, você poderá corrigi-lo de duas maneiras:
-
Junte a visualização ausente em todos os casos. No exemplo usado nesta página, verifique se a visualização
user_order_facts
é unida em todos os lugares em que a visualizaçãousers
é mesclada em uma Análise. - Exclua o campo que está causando o erro em "Análises" se você não quiser mesclar a visualização que está faltando.
Mesclar a visualização que está faltando
No exemplo anterior, o erro pode ser resolvido mesclando user_order_facts
a todas as Análises em que users
também faz parte. Isso garante que as Análises 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 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 deverá aparecer.
Exclua o campo que está causando o erro em "Análises"
Talvez você não queira mesclar a visualização user_order_facts
a todas as análises em que users
é 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 quer 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 orders
, usando o
fields
.
O parâmetro fields
para as análises detalhadas permite incluir ou excluir campos específicos de uma análise detalhada. Nesse caso, é possível excluir users.lifetime_orders
da análise detalhada orders
desta forma:
explore: orders { fields: [ALL_FIELDS*, -users.lifetime_orders] # exclude users.lifetime_orders join: users { relationship: many_to_one sql_on: ${orders.user_id} = ${users.id} } }