Erro: campo desconhecido ou inacessível

Quando você estiver trabalhando nos arquivos do LookML e ficar satisfeito com as atualizações, a próxima etapa para implantar as mudanças do LookML será executar o validador do LookML para 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 o diagrama 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:

  1. O campo que você está referenciando não existe.
  2. O campo a que você está se referindo é um grupo de dimensões inteiro. Por exemplo, um grupo de dimensões é referenciado sem um timeframe anexado.
  3. 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 qual 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 campo user_order_facts.lifetime_orders da 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:

Mensagem de erro expandida mostrando as visualizações, linhas de código de visualização e análises detalhadas de duas causas: users:79 (ecommerce:order_items) e users:79 (ecommerce:orders).

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 em 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 joined, 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:

  1. Junte-se à visualização ausente em todos os casos. Para o exemplo usado nesta página, verifique se a visualização user_order_facts está unida sempre que a visualização users estiver unida em uma Análise.
  2. Exclua o campo que está causando o erro das análises detalhadas se não quiser fazer a junção com 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}
    }
  }