Si tratta di un argomento avanzato che presuppone che il lettore abbia una solida conoscenza di LookML.
Panoramica
Man mano che il modello LookML aumenta per dimensioni e complessità, diventa sempre più utile riutilizzarlo in più posizioni. Il parametro extends
consente di riutilizzare il codice, il che ti consente di effettuare le seguenti operazioni:
- Scrivi il codice DRY (non'non ripeterlo) per definire gli elementi in un unico posto, rendendo il codice più coerente e più veloce da modificare
- Gestire insiemi di campi diversi per utenti diversi
- Condividere pattern di progettazione in diverse parti del tuo progetto
- Riutilizza insiemi di join, dimensioni o misure in un progetto
Per estendere un oggetto LookML, devi creare un nuovo oggetto LookML e poi aggiungere il parametro extends
per indicare che il nuovo oggetto è un'estensione di un oggetto esistente. Di conseguenza, il progetto avrà due versioni dell'oggetto LookML. In caso di conflitti, l'oggetto che verrà esteso avrà la precedenza e avrà la precedenza sulle impostazioni dell'oggetto che viene esteso. Per informazioni dettagliate, consulta la sezione Dettagli di implementazione per extends
più avanti in questa pagina.
Scopri i perfezionamenti di LookML.
L'estensione di una vista o di un'esplorazione è ideale per gli scenari in cui vuoi avere più versioni della vista o dell'esplorazione. Tuttavia, se il tuo obiettivo è semplicemente modificare una vista o un'esplorazione senza modificare il file LookML che lo contiene, puoi utilizzare un perfezionamento. Puoi anche utilizzare un parametroextends
all'interno di un perfezionamento. Per ulteriori informazioni e casi d'uso, consulta la pagina della documentazione relativa ai perfezionamenti LookML.
Puoi estendere le dashboard di visualizzazioni, esplorazioni e LookML:
I modelli non possono essere estesi e non puoi includere un file modello in un altro file modello. Se vuoi riutilizzare o estendere le esplorazioni di più modelli, puoi crearne uno separato e poi includerlo in un file del modello.
Leggi i seguenti esempi di estensione di un'esplorazione ed estensione di una dashboard LookML.
Estendere un'esplorazione
Di seguito è riportato un esempio di estensione di un'area di esplorazione:
explore: customer {
persist_for: "12 hours"
}
explore: transaction {
extends: [customer]
persist_for: "5 minutes"
}
In questo esempio abbiamo un'esplorazione denominata Cliente e abbiamo creato una seconda esplorazione denominata Transazione che la estende. Tutto ciò che è presente in Cliente, come i relativi join, sarà incluso in Transazione. Tutto ciò che è in Transazione rimarrà in Transazione.
Tuttavia, tieni presente che c'è un conflitto: la funzionalità Esplorazione cliente afferma che l'impostazione persist_for
deve durare 12 ore, mentre la sezione Esplora transazioni afferma che il tempo previsto è di 5 minuti. Per l'esplorazione Transazione, verrà utilizzata l'impostazione persist_for: "5 minutes"
perché sovrascrive l'impostazione dall'estensione di Esplora.
Estensione di una dashboard LookML
Per estendere una dashboard di LookML, sia la dashboard estesa sia quella estesa devono essere incluse nel file modello. Se una dashboard che utilizza il parametro extends
è inclusa in un file modello senza che la dashboard di base si estenda, verrà visualizzato un errore di convalida LookML che non è possibile trovare nella dashboard di base (tra gli altri errori).
Ecco un file di dashboard di esempio:
File: faa.dashboard.lookml
- dashboard: faa
title: FAA Dashboard
layout: newspaper
elements:
- title: Aircraft Location
name: Aircraft Location
model: e_faa
explore: aircraft
type: looker_map
fields:
- aircraft.zip
- aircraft.count
sorts:
- aircraft.count desc
limit: 500
query_timezone: America/Los_Angeles
series_types: {}
row: 0
col: 0
width: 8
height: 6
Possiamo creare un nuovo file di dashboard LookML ed estendere la dashboard FAA aggiungendo un nuovo riquadro:
File: faa_additional.dashboard.lookml
- dashboard: faa_additional
title: FAA Additional
extends: faa
elements:
- title: Elevation Count
name: Elevation Count
model: e_faa
explore: airports
type: looker_scatter
fields:
- airports.elevation
- airports.count
sorts:
- airports.count desc
limit: 500
query_timezone: America/Los_Angeles
row: 0
col: 8
width: 8
height: 6
Poiché estende la dashboard FAA, la dashboard FAA aggiuntiva includerà tutti i riquadri definiti nel file faa.dashboard.lookml
. Inoltre, la dashboard FAA aggiuntiva avrà tutti i riquadri definiti nel proprio file faa_additional.dashboard.lookml
.
Il modo più semplice per creare una dashboard LookML è recuperare il LookML da una dashboard definita dall'utente. Puoi inoltre utilizzare questa tecnica per ottenere il LookML per i singoli riquadri della dashboard. Se utilizzi questo metodo, assicurati che le posizioni dei riquadri non si sovrappongano. Nell'esempio precedente, i riquadri sono entrambi nella riga superiore della dashboard, indicata da row: 0
:
File: faa.dashboard.lookml
row: 0
col: 0
width: 8
height: 6
Tuttavia, il nuovo riquadro che stiamo aggiungendo alla dashboard FAA aggiuntivo è in col: 8
, per cui viene visualizzato accanto al riquadro della dashboard estesa:
File: faa_additional.dashboard.lookml
row: 0
col: 8
width: 8
height: 6
Si tratta di una cosa facile da perdere, poiché questi elementi si trovano in file di dashboard diversi. Quindi, se stai aggiungendo riquadri a una dashboard estesa, assicurati di verificare la presenza di conflitti di posizionamento tra i riquadri nella dashboard estesa e i riquadri della dashboard.
Richiesta dell'estensione in corso...
Puoi utilizzare il parametro extension: required
per segnalare che un oggetto LookML richiede un'estensione, il che significa che l'oggetto non può essere utilizzato da solo. Un oggetto con extension: required
non è visibile da solo agli utenti; è destinato esclusivamente ad agire come punto di partenza per essere esteso da un altro oggetto LookML. Il parametro extension
è supportato per le esplorazioni, le visualizzazioni e le dashboard LookML.
Un explore
con extension: required
non può essere utilizzato come explore_source
per un test dei dati. Lo strumento di convalida LookML genera un errore che indica che non è stato possibile trovare il explore_source
.
Utilizzo dei metadati per visualizzare le estensioni per un oggetto
Puoi fare clic su un parametro explore
o view
nell'IDE di Looker e utilizzare il riquadro dei metadati per visualizzare le estensioni nell'oggetto o per vedere quale oggetto si estende. Per informazioni, consulta la pagina della documentazione Metadati per oggetti LookML.
Dettagli di implementazione per extends
Di seguito sono riportati i passaggi descritti da Looker per l'estensione di un oggetto LookML:
- Copia l'oggetto in fase di ampliamento: Looker crea una copia della dashboard LookML per la vista, Explore o LookML in fase di ampliamento. Questa nuova copia è l'oggetto di estensioneing.
- Unisci il LookML delle due copie: Looker unisce il LookML dell'oggetto estendeed nell'oggetto estendeing.
- Risolvere i conflitti tra le copie: nella maggior parte dei casi, se un elemento LookML viene definito sia nell'oggetto esteso ed che nell'oggettoing, viene utilizzata la versione nell'oggetto esteso. In altri casi, tuttavia, le estensioni combinano i valori dei parametri anziché eseguire l'override dei valori. Per ulteriori informazioni, consulta la sezione Combinazione di parametri in questa pagina.
- Applica il LookML: una volta risolti tutti i conflitti, Looker interpreta il LookML risultante utilizzando la logica standard. In altre parole, Looker utilizzerà tutte le impostazioni predefinite e le ipotesi standard come in qualsiasi altra dashboard view, Explore o LookML.
Le sezioni seguenti mostrano le specifiche di questi passaggi, estendendo l'esempio a una visualizzazione. Ecco la LookML per la nostra vista di base, la vista User:
view: user {
suggestions: yes
dimension: name {
sql: ${TABLE}.name ;;
}
dimension: status {
sql: ${TABLE}.status ;;
type: number
}
}
Ecco il LookML per la vista User with Age Extensions, che estende la visualizzazione User:
include: "/views/user.view"
view: user_with_age_extensions {
extends: [user]
suggestions: no
dimension: age {
type: number
sql: ${TABLE}.age ;;
}
dimension: status {
type: string
}
}
Passaggio 1: copia il LookML
In questo caso, la vista user
è stata estesa nella vista user_with_age_extensions
. Poiché user
è la vista in fase di estensione, ne viene creata una copia prima dell'unione. Il fatto che una copia sia stata creata non è particolarmente importante da sapere; il fatto che la vista originale user
sia invariata e possa essere utilizzata come di consueto è importante sapere.
Passaggio 2: unisci le copie
Il passaggio successivo consiste nell'unione di tutti i LookML dalla vista estendeed (user
) nell'estensioneing (user_with_age_extensions
. È importante capire la natura di questa unione In pratica, significa che tutti i LookML scritti esplicitamente vengono uniti, ma i valori LookML predefiniti che non hai annotato don't vengono uniti. In un certo senso, è davvero solo il testo del LookML che viene messo insieme, e nessuno del significato di quel testo.
Passaggio 3: risolvi i conflitti
Il terzo passaggio consiste nel risolvere eventuali conflitti tra le viste unite.
Nella maggior parte dei casi, se un elemento LookML viene definito sia nell'oggetto extended e nell'oggetto ing, viene utilizzata la versione nell'oggetto che si estende. In altri casi, tuttavia, le estensioni combinano i valori dei parametri anziché eseguire l'override dei valori. Per ulteriori informazioni, consulta la sezione Combinazione di parametri in questa pagina.
Nel caso dell'esempio user_with_age_extensions
, nessuno dei parametri è additivo, né vengono specificate opzioni di elenco speciali o sql
parole chiave, quindi i valori dei parametri nella vista estesa sostituiranno i valori parametro nella vista estesa:
- L'estensioneing nome visualizzazione (
user_with_age_extensions
) sostituisce l'estensioneed nome visualizzazione (user
). - Il valoreing dell'estensione di
suggestions: no
sostituisce il valoresuggestions: yes
esteso . - L'estensioneing visualizzazione ha una dimensione denominata
age
, che non esiste nella vistaed di estensione (nessun conflitto). - L'estensioneed visualizzazione ha una dimensione denominata
name
, che non esiste nella vistaing di estensione (nessun conflitto). - Il valore
status
della dimensionetype: string
nell'estensione ing sovrascrive il valoretype: number
nell'estensioneed visualizzazione. - La dimensione
status
ha un parametrosql
che non esiste nella vista di estensione ing (nessun conflitto).
Il fatto che i valori LookML predefiniti non siano ancora considerati importanti, perché non bisogna commettere l'errore di pensare che i conflitti tra valori predefiniti vengano risolti. In realtà, vengono ignorati in questo passaggio. Per questo motivo, dobbiamo aggiungere esplicitamente parametri aggiuntivi quando estendiamo gli oggetti:
- Quando estendi una vista, aggiungiamo i parametri
sql_table_name
einclude
. - Quando estendi un'esplorazione, aggiungiamo i parametri
view_name
eview_label
.
In questo particolare esempio non abbiamo aggiunto sql_table_name
alla vista Utente, causando alcuni problemi nel passaggio successivo.
Passaggio 4: interpreta il codice LookML come di consueto
Nel passaggio finale, il codice LookML risultante viene interpretato normalmente, inclusi tutti i valori predefiniti. In questo particolare esempio abbiamo ottenuto un codice LookML che include view: user_with_age_extensions
, ma nessun parametro sql_table_name
. Di conseguenza, Looker presumerà che il valore di sql_table_name
sia uguale al nome della vista:
Il problema è che probabilmente non esiste una tabella nel nostro database chiamata user_with_age_extensions
. Ecco perché dobbiamo aggiungere un parametro sql_table_name
a qualsiasi vista che verrà estesa. L'aggiunta di view_name
e view_label
alle esplorazioni che verranno estese evita problemi simili.
Combinazione di estensioni
Esistono diversi modi per utilizzare gli oggetti LookML con le estensioni:
- Un oggetto può estendere più altri oggetti.
- Un oggetto estensibile può a sua volta essere esteso.
- Le estensioni possono essere utilizzate nei perfezionamenti (consulta la pagina della documentazione relativa ai perfezionamenti LookML per ulteriori informazioni).
Per un esempio di caso d'uso avanzato e leggere suggerimenti per la risoluzione dei problemi, consulta l'articolo del Centro assistenza Risolvere un esempio di caso d'uso avanzato di
extends
.
Estensione di più di un oggetto contemporaneamente
È possibile estendere più di una dashboard, visualizzazione o esplorazioni contemporaneamente. Ad esempio:
explore: orders {
extends: [user_info, marketing_info]
}
# Also works for dashboards and views
La procedura di estensione funziona esattamente come descritto nell'esempio di implementazione, ma esiste una regola aggiuntiva su come vengono risolti i conflitti. In caso di conflitti tra i diversi elementi elencati nel parametro extends
, viene data la priorità agli elementi elencati per ultimi. Pertanto, nell'esempio precedente, se si sono verificati conflitti tra user_info
e marketing_info
, risulta utile l'esplorazione di marketing_info
.
Concatenare più estensioni
Puoi anche concatenare tutte le estensioni che vuoi. Ad esempio:
explore: orders {
extends: [user_info]
...
}
explore: user_info {
extends: [marketing_info]
...
}
Anche in questo caso, il processo di estensione funziona esattamente come descritto nell'esempio di implementazione, con un'ulteriore regola sulla risoluzione dei conflitti. In caso di conflitti, viene data la priorità all'ultimo elemento della catena di estensioni. In questo esempio:
orders
avrà la priorità sia suuser_info
che sumarketing_info
.user_info
avrà la priorità sumarketing_info
.
Combinazione dei parametri
Nella maggior parte dei casi, se un elemento LookML viene definito sia nell'oggetto extended e nell'oggetto ing, viene utilizzata la versione nell'oggetto che si estende. Questa situazione si verifica nell'esempio di implementazione di questa pagina.
Tuttavia, nei seguenti casi, le estensioni combineranno i valori dei parametri anziché sostituirli:
- Per i parametri additivi
- Con la parola chiave elenco
EXTENDED*
- Con la parola chiave
${EXTENDED}
del parametrosql
Alcuni parametri sono additivi
In molti casi, se l'oggetto estendente contiene lo stesso parametro dell'oggetto che viene esteso, i valori dell'oggetto esteso sostituiranno i valori del parametro dell'oggetto esteso. Tuttavia, le estensioni possono essere additive per alcuni parametri, il che significa che i valori dell'oggetto che estende vengono utilizzati insieme ai valori dell'oggetto esteso.
I seguenti parametri sono additivi:
Per dimensioni e misure:
Per le visualizzazioni:
Per le esplorazioni:
Nell'esempio seguente, la vista carriers
ha una dimensione name
con un parametro link
:
view: carriers {
sql_table_name: flightstats.carriers ;;
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Google {{ value }}"
url: "http://www.google.com/search?q={{ value }}"
icon_url: "http://google.com/favicon.ico"
}
}
}
Questa è la vista carriers_extended
, che estende la visualizzazione carriers
. La vista carriers_extended
ha anche una dimensione name
con diverse impostazioni nel parametro link
:
include: "/views/carriers.view.lkml"
view: carriers_extended {
extends: [carriers]
dimension: name {
sql: ${TABLE}.name ;;
type: string
link: {
label: "Dashboard for {{ value }}"
url: "https://docsexamples.dev.looker.com/dashboards/307?Carrier={{ value }}"
icon_url: "https://www.looker.com/favicon.ico"
}
}
}
Nella vista carriers_extended
, i due parametri link
sono cumulative, quindi la dimensione name
avrà entrambi i link. In Esplora, la dimensione è simile a questa:
Opzioni aggiuntive con gli elenchi
Quando lavori con gli elenchi, puoi scegliere di combinarli, invece di vincere l'elenco degli oggetti estesi. Considera questa semplice estensione con un elenco in conflitto denominato animals
:
view: pets {
extends: fish
set: animals {
fields: [dog, cat]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
In questo caso, la vista pets
esegue l'estensione e, di conseguenza, vince, rendendo animals
contenente [dog, cat]
. Tuttavia, utilizzando la serie speciale EXTENDED*
puoi combinare gli elenchi:
view: pets {
extends: fish
set: animals {
fields: [dog, cat, EXTENDED*]
}
}
view: fish {
set: animals {
fields: [goldfish, guppy]
}
}
Ora l'elenco animals
conterrà [dog, cat, goldfish, guppy]
.
Combinazione anziché sostituzione durante la risoluzione dei conflitti
Nella maggior parte dei casi, se ci sono conflitti durante l'estensione, vince l'oggetto che si estende. Ad esempio, prendi questa semplice estensione:
view: product_short_descriptions {
extends: products
dimension: description {
sql: ${TABLE}.short_description ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
Puoi notare un conflitto del parametro sql
all'interno della dimensione description
. In genere, la definizione di product_short_descriptions
sovrascriverà semplicemente la definizione di products
perché sta estendendo questa definizione.
Tuttavia, se vuoi, puoi anche scegliere di combinare le definizioni. A questo scopo, utilizza la parola chiave ${EXTENDED}
nel seguente modo:
view: product_short_descriptions {
extends: products
dimension: description {
sql: LEFT(${EXTENDED}, 50) ;;
}
}
view: products {
dimension: description {
sql: ${TABLE}.full_description ;;
}
}
Ora il conflitto del parametro sql
verrà gestito in modo diverso. Al posto della definizione product_short_descriptions
vincente, prenderà la definizione di products
e la inserirà dove ${EXTENDED}
viene utilizzato. La definizione risultante per description
in questo caso sarà: LEFT(${TABLE}.full_description, 50)
.
Aspetti da considerare
Progetti con localizzazione
Quando estendi un oggetto, tieni presente che le regole di localizzazione si applicano anche alle estensioni. Se estendi un oggetto e poi definisci nuove etichette o descrizioni, devi fornire le definizioni di localizzazione nei file delle stringhe locali del progetto. Per ulteriori informazioni, consulta la pagina Localizzazione del modello LookML.