Quando lavori sui file LookML e sei soddisfatto dei tuoi aggiornamenti, il passaggio successivo per eseguire il deployment delle modifiche LookML consiste nell'eseguire lo strumento di convalida 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, riceverai 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, assicurati che il campo sia definito nella vista user_order_facts
. Se non esiste, puoi aggiungerla.
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 del periodo di tempo definite 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 intervallo 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 ti riferisci 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 campouser_order_facts.lifetime_orders
di LookML.
La dimensione lifetime_orders
nella vista users
fa riferimento al campo lifetime_orders
nella vista 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 nel seguente modo 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 vista users
è unita senza anche dalla vista user_order_facts
; pertanto, 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 entrambe le esplorazioni, attiveresti l'errore.
Lo strumento di convalida 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, prendi in considerazione l'esplorazione users
:
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 un join mancante, puoi correggerlo in due modi:
-
Partecipa alla 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 partecipare alla vista mancante.
Unisciti alla visualizzazione mancante
Nell'esempio precedente, l'errore può essere risolto unendo user_order_facts
a tutte le esplorazioni in 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 usare il riquadro dei metadati nell'IDE per vedere tutte le esplorazioni che utilizzano la vista users
.
L'esempio seguente unisce le viste 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 LookML, questo errore non dovrebbe essere visualizzato.
Escludi il campo che causa l'errore dalle esplorazioni
Potresti non voler partecipare alla visualizzazione user_order_facts
a tutte le esplorazioni a cui partecipa users
. Ad esempio, forse non vuoi che gli utenti accedano ai campi dalla vista user_order_facts
nell'esplorazione orders
, ma vuoi che gli utenti accedano ai campi dalla vista 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
in questo 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} } }