Quando lavori sui file LookML e ritieni che gli aggiornamenti siano soddisfacenti, il passaggio successivo per eseguire il deployment delle modifiche di LookML consiste nell'eseguire lo strumento Convalida di LookML per eseguire una convalida completa del modello.
A volte potresti visualizzare un errore simile al seguente:
Unknown or inaccessible field "user_order_facts.lifetime_orders" referenced in "users.lifetime_orders". Check for typos and missing joins.
In questo esempio, l'errore si riferisce al campo lifetime_orders
nella visualizzazione users
. L'errore indica che users.lifetime_orders
non può accedere al campo user_order_facts.lifetime_orders
a cui fa riferimento.
Perché si verifica questo errore?
Questo errore può verificarsi per diversi motivi:
- Il campo a cui fai riferimento non esiste.
-
Il campo a cui fai riferimento è un intero gruppo di dimensioni, ad esempio un gruppo di dimensioni a cui viene fatto riferimento senza un valore aggiunto
timeframe
. - Il campo non è accessibile da alcune esplorazioni perché manca un join.
Opzione 1: il campo non esiste
Se il campo user_order_facts.lifetime_orders
viene fatto riferimento nei campi LookML, ma non esiste come campo, verrà visualizzato l'errore unknown or inaccessible field
.
Puoi risolvere l'errore aggiungendo il campo che lo attiva, in questo caso user_order_facts.lifetime_orders
, alla visualizzazione che contiene il campo in questione. In questo caso, puoi assicurarti che il campo sia definito nella visualizzazione user_order_facts
. Se non esiste, puoi aggiungerlo.
Opzione 2: il campo fa riferimento a un intero gruppo di dimensioni
I gruppi di dimensioni rappresentano un gruppo di dimensioni. I gruppi di dimensioni type: time
rappresentano un gruppo di dimensioni relative a periodi di tempo definiti nel parametro timeframe
. Quando fai riferimento ai gruppi di dimensioni in LookML, devi
accodare la dimensione appropriata, in questo caso timeframe
, al nome del gruppo di dimensioni.
Ad esempio, considera il seguente gruppo di dimensioni:
dimension_group: created { type: time timeframes: [date, week, month] sql: ${TABLE}.created_at ;; }
Se vuoi fare riferimento al gruppo di dimensioni created
in un altro campo LookML, devi fare riferimento a una dimensione periodo di tempo specifica all'interno del gruppo, ad esempio una delle seguenti:
-
date
:${created_date}
-
week
:${created_week}
-
month
:${created_month}
Se provi a utilizzare solo il nome del gruppo di dimensioni, ${created}
, Looker non saprà a quale periodo di tempo fai riferimento e genererà l'errore.
Opzione 3: manca un join
Di seguito è riportata la definizione di users.lifetime_orders
in LookML:
dimension: lifetime_orders { type: number sql: ${user_order_facts.lifetime_orders};; }
Tieni presente l'utilizzo degli operatori di sostituzione${}
per fare riferimento al campo LookMLuser_order_facts.lifetime_orders
.
La dimensione lifetime_orders
nella visualizzazione users
fa riferimento al campo lifetime_orders
della visualizzazione user_order_facts
. In questo caso, l'errore si verifica perché nel file del modello sono presenti istanze in cui la vista users
è unita a un'esplorazione senza che sia stata unita anche user_order_facts
.
Per vedere quali esplorazioni causano il problema, puoi espandere le occorrenze evidenziate nel messaggio di errore:
Queste occorrenze mostrano che le esplorazioni order_items
e orders
nel modello ecommerce
stanno causando l'errore. Queste esplorazioni hanno molti join e sono definite come segue nel file del modello:
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} } }
In entrambe le esplorazioni, la visualizzazione users
viene unita senza unire anche la visualizzazione user_order_facts
. Di conseguenza, nessuna delle due esplorazioni può accedere al campo user_order_facts.lifetime_orders
. Se provi a eseguire una query sul campo users.lifetime_orders
, che fa riferimento a user_order_facts.lifetime_orders
, in una delle due esplorazioni, viene attivato l'errore.
Lo strumento di convalida di LookML ti avvisa che gli utenti riceveranno l'errore quando eseguono query su users_order_facts.lifetime_orders
. Il campo users.lifetime_orders
non attiverà l'errore in un'esplorazione a cui è unito anche user_order_facts
.
Ad esempio, considera la scheda users
Esplora:
explore: users { join: user_order_facts { sql_on: ${users.id} = ${user_order_facts.users_id} } }
In questo caso user_order_facts
è unito, quindi la query su users.lifetime_orders
non attiverà un errore.
Come faccio a correggere l'errore quando è causato da una join mancante?
Se l'errore è causato da una join mancante, puoi risolverlo in due modi:
-
Unisci la visualizzazione mancante in tutte le richieste. Per l'esempio utilizzato in questa pagina, assicurati che la vista
user_order_facts
venga unita ovunque venga unita la vistausers
in un'esplorazione. - Escludi il campo che causa l'errore dalle esplorazioni se non vuoi unire la vista mancante.
Unisciti alla visualizzazione mancante
Nell'esempio precedente, l'errore può essere risolto unendo user_order_facts
a tutte le esplorazioni a cui è unito anche users
. In questo modo, le esplorazioni potranno accedere a user_order_facts.lifetime_orders
quando users.lifetime_orders
viene utilizzato in una query.
Puoi utilizzare il riquadro dei metadati nell'IDE per visualizzare tutte le esplorazioni che utilizzano la visualizzazione users
.
Il seguente esempio unisce le visualizzazioni mancanti:
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} } }
Ora, se esegui di nuovo lo strumento di convalida di LookML, questo errore non dovrebbe essere visualizzato.
Escludi il campo che causa l'errore dalle esplorazioni
Potresti non voler unire la vista user_order_facts
a tutte le esplorazioni a cui è unita users
. Ad esempio, potresti non volere che gli utenti accedano ai campi dalla visualizzazione user_order_facts
nell'esplorazione orders
, ma vuoi che accedano ai campi dalla visualizzazione users
senza errori. Per farlo, escludi il campo che causa l'errore (users.lifetime_orders
) dall'esplorazione orders
utilizzando il parametro
fields
.
Il parametro fields
per le esplorazioni ti consente di includere o escludere campi specifici da un'esplorazione. In questo caso, puoi escludere users.lifetime_orders
dall'esplorazione orders
nel seguente modo:
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} } }