Questa pagina tratta un argomento avanzato e presuppone una solida conoscenza di LookML da parte del lettore.
Estensioni è una funzionalità di LookML molto utile che consente di mantenere il codice LookML DRY (Don't Repeat Yourself, non ripeterti). In Looker, le esplorazioni, le visualizzazioni e le dashboard di LookML possono essere estese con il parametro extends all'interno di un file del modello, come nell'esempio seguente:
explore: orders {
view_name: orders
join: users {
type: left_outer
sql_on: %{orders.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
explore: transactions {
extends: [orders]
}
In questo esempio, il parametro extends viene utilizzato all'interno della definizione dell'esplorazione transactions per estendere l'esplorazione orders.
In questa pagina l'oggetto che viene esteso è definito oggetto base, mentre l'oggetto che esegue l'estensione è definito oggetto di estensione.
L'estensione di un oggetto LookML è un processo abbastanza semplice, come descritto nella pagina della documentazione Riutilizzo del codice con extends. Tuttavia, esistono alcuni casi d'uso avanzati che possono causare errori di riferimento di LookML e duplicazione indesiderata di oggetti. Questa pagina fornisce un esempio di come l'estensione di un'esplorazione in base a una vista che estende un'altra vista può comportare errori di riferimento di LookML, nonché suggerimenti che possono aiutarti a eliminare questi problemi.
Caso d'uso: estensione di un'esplorazione in base a una visualizzazione espandibile
Supponiamo che tu voglia estendere l'esplorazione events e che la visualizzazione su cui si basa l'esplorazione estesa debba utilizzare i campi di una visualizzazione che espanda la visualizzazione events di base. In questo esempio, l'esplorazione events_extended estende l'esplorazione extends, come mostrato nel seguente esempio di codice LookML:
explore: events {
view_name: events
join: users {
type: left_outer
sql_on: ${events.user_id} = ${users.id} ;;
relationship: many_to_one
}
}
explore: events_extended {
extends: [events]
join: orders {
sql_on: ${events_extended.test_id} = ${orders.id} ;;
relationship: many_to_one
}
In questo esempio, la visualizzazione users è unita all'esplorazione di base events, mentre la visualizzazione orders è unita all'esplorazione di estensione events_extended. Tuttavia, il join definito nell'esplorazione di base events fa riferimento a events.user_id, un campo della visualizzazione di base events. Nel frattempo, il join definito nell'esplorazione events_extended di estensione fa riferimento al campo events_extended.test_id, dove events_extended è il nome di una visualizzazione di estensione basata sulla visualizzazione events. Il campo test_id a cui viene fatto riferimento nella congiunzione nella definizione dell'esplorazione events_extended è definito nella visualizzazione events_extended estesa come segue:
include: "events.view.lkml"
view: events_extended {
extends: [events]
dimension: test_id {}
Poiché la join definita nell'esplorazione events_extended fa riferimento al nome della visualizzazione estesa, events_extended, il validatore LookML mostra un errore inaccessible view.
Per risolvere il problema, puoi aggiungere il parametro from al codice LookML per l'esplorazione estesa e impostarne il valore sul nome della visualizzazione estesa, events_extended. Il parametro from assegna l'alias FROM schema.name AS alias al nome della tabella originale nel codice SQL generato.
Questo è l'unico caso d'uso consigliato per l'applicazione del parametro from a livello di esplorazione.
Per estrarre dati dalla visualizzazione di estensione (events_extended) senza interrompere i riferimenti di join dall'esplorazione di base (events), puoi aggiungere un parametro from che si mappa alla visualizzazione di estensione:
explore: events_extended {
extends: [events]
from: events_extended
join: orders {
relationship: many_to_one
sql_on: ${events.test_id} = ${orders.id} ;;
}
}
In questo esempio, l'applicazione del codice LookML from: events_extended al codice LookML per l'esplorazione estesa ti consente di continuare a fare riferimento alla vista di base (events) nell'esplorazione estesa, reindirizzando al contempo i riferimenti in modo che vengano estratti dalla versione estesa della vista (events_extended).
Con l'utilizzo del parametro from, puoi continuare a fare riferimento al nome della vista di base events nei prefissi di join, ma questi riferimenti verranno estratti dalla vista di estensione events_extended, che contiene tutti i campi in events, oltre al nuovo campo test_id.