Questa pagina illustra i pattern più comuni in LookML.
Campi di etichettatura (e nomi nell'interfaccia utente)
Looker converte i nomi dei campi LookML nelle stringhe visualizzate nell'interfaccia utente, combinando il nome della visualizzazione in caratteri regolari con spessore normale e il nome breve del campo in grassetto. Ad esempio, un campo denominato Importo nella visualizzazione Ordini verrà visualizzato nell'interfaccia utente come Importo Ordini. In questa pagina sono entrambi in grassetto e il nome della visualizzazione è in maiuscolo (Importo ORDINI) per rendere la discussione più chiara.
Se vuoi che un nome di un campo sia diverso da quello della colonna di una tabella, è sufficiente modificarlo e dichiarare il collegamento a sql:
. Nell'esempio seguente, è presente una tabella airports
con una colonna cntrl_twr
. Looker genererà la seguente dichiarazione:
view: airports {
dimension: cntrl_twr { # full name: airports.cntrl_twr
type: yesno # default name: AIRPORT Cntrl Twr (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
La dimensione cntrl_twr
verrà rinominata in modo che sia leggibile.
view: airports {
dimension: has_control_tower { # full name: airports.has_control_tower
type: yesno # aliased name: AIRPORTS Has Control Tower (Yes/No)
sql: ${TABLE}.cntrl_twr ;; # the sql expression for this field
}
}
Filtrare i conteggi in base a una dimensione
È abbastanza facile raggruppare per dimensione e conteggiare le entità: il raggruppamento per UTENTI Paese, Numero ORDINI ti indica la provenienza degli ordini. Tuttavia, è spesso utile creare un conteggio filtrato in base a un valore dimensionale. Ad esempio, puoi eseguire una nuova misurazione, ORDERS France Count:
view: users {
dimension: country {}
}
view: orders {
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
measure: count {
type: count
drill_fields: [detail]
}
measure: france_count {
type: count # COUNT(CASE WHEN users.country = 'France' THEN 1 ELSE NULL END)
filters: [users.country: "France"]
}
}
I filtri possono utilizzare qualsiasi espressione. Se volessi un campo che includesse gli utenti dell'UE, potresti utilizzare il seguente codice:
measure: eu_count {
type: count # COUNT(CASE WHEN users.countrycode IN 'UK','FR','ES' THEN 1 ELSE NULL END)
drill_fields: [detail]
filters: [users.countrycode: "UK,FR,ES"]
}
Se vuoi filtrare con un'espressione matematica, assicurati di racchiuderla tra virgolette doppie:
measure: total_orders_above_100_dollars {
type: sum # SUM(CASE WHEN order.value > 100 THEN order.value ELSE NULL END)
sql: ${order.value} ;;
drill_fields: [detail]
filters: [order.value: ">100"]
}
Percentuali
Molti indicatori chiave di prestazione sono espressi sotto forma di percentuali, ad esempio "la percentuale di elementi restituiti", "la percentuale di email che hanno generato una vendita" o altri casi di "la percentuale di X che è uguale a". In LookML, il pattern di progettazione consiste nel creare conteggi per le due condizioni e in un terzo campo che calcola la percentuale tra i due.
dimension: returned {
type: yesno
}
measure: count { # total count of items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
}
measure: returned_count { # count of returned items
type: count_distinct
sql: ${TABLE}.id ;;
drill_fields: [detail]
filters: [returned: "Yes"]
}
measure: percent_returned {
type: number
sql: 100.0 * ${returned_count} / NULLIF(${count}, 0) ;;
value_format: "0.00"
}
Utilizza il modulo in basso per calcolare le percentuali. In Postgres, i conteggi sono numeri interi e la divisione tra numeri interi risulta in numeri interi. Moltiplicando per 100,0 si converte il primo conteggio in un numero in virgola mobile, convertendo così il resto dell'espressione in un numero in virgola mobile. Per evitare errori di divisione per zero, NULLIF(value, 0)
convertirà un valore zero in null, rendendo il risultato nullo ed evitando un errore.
100.0 * ${returned_count} / NULLIF(${count}, 0)
Utilizzare i set per i dettagli della visualizzazione in dettaglio
Una delle funzionalità più potenti di Looker è la possibilità di visualizzare in dettaglio i dati per visualizzare le entità sottostanti che costituiscono un conteggio o un'altra misura.
Quando viene fatto clic su una misura nell'interfaccia utente di Looker, viene creata una nuova query che localizza l'insieme di dati che compongono la misura. Ogni valore per ogni dimensione sulla riga della tabella viene aggiunto ai filtri correnti.
Per mostrare i dettagli, Looker ha bisogno di un elenco specificato di campi di drill per mostrare quando è stato fatto clic sul valore della misura. Quando generi un modello, in genere il generatore crea alcuni campi di drill iniziali. Inoltre, puoi aggiungere campi di drill. Ad esempio, supponi di misurare Numero di ordini in base allo Stato UTENTI nell'ultima settimana. In Looker, la query avrebbe il seguente aspetto:
Stato UTENTI | Numero ORDINI |
---|---|
California | 24 |
Texas | 5 |
Colorado | 4 |
Florida | 4 |
Illinois | 4 |
Se facciamo clic su 24 nella riga California, il comportamento previsto è che verrebbero visualizzati i 24 ordini provenienti dalla California.
Looker gestisce l'aggiunta del filtro USERS State: California, ma Looker non sa quali campi vuoi mostrare nell'ordine. Devi utilizzare un set per dichiarare i campi nel modello.
In LookML, un set è un elenco di nomi di campi (dimensioni, misure e filtri). I set vengono utilizzati per indicare a Looker quali campi:
- Vuoi mostrare quando visualizzi in dettaglio un conteggio o un'altra misura
- Da importare quando si unisce una vista
- Vengono indicizzate in un'esplorazione
Lo stesso set può essere utilizzato in molte parti di un modello, quindi Looker offre diversi modi per crearli.
Set letterali
La forma più semplice di un insieme è un insieme letterale. Un set letterale viene creato semplicemente dichiarando l'insieme come un array. Puoi dichiarare i set di valori letterali utilizzando "[]".
Considerando questo esempio:
view: customers {
dimension: id {
primary_key: yes
}
measure: count {
type: count
}
dimension: city {}
dimension: state {}
dimension: name {}
}
I campi da mostrare sono id
, name
e city
.
Nella misura, potremmo semplicemente dichiarare un array letterale.
measure: count {
type: count
drill_fields: [id, name, city]
}
Per i set che vengono utilizzati una sola volta, dichiararli letteralmente è semplice e facile da capire.
Set con nome
Supponiamo di avere due conteggi: CUSTOMERS Count e CUSTOMERS In California Count. Quando visualizziamo in dettaglio uno di questi valori, vorremmo mostrare i campi id
, name
e city
. Se dichiariamo letteralmente i campi, potremmo:
view: customers {
measure: count {
type: count
drill_fields: [id, name, city]
}
measure: in_california_count {
type: count
filters: [state: "California"]
}
}
Se vuoi aggiungere un nuovo campo (ad esempio, il campo customers.state
), dobbiamo modificare entrambi gli elenchi. Invece, LookML fornisce un modo per creare set denominati che possiamo conservare in un unico posto e utilizzare in più luoghi.
Il codice seguente crea un set customers.detail
e punta entrambi allo stesso insieme di campi.
view: customers {
set: detail {
fields: [id, name, city] # creates named set customers.detail
}
measure: count {
type: count
drill_fields: [detail*] # show fields in the set "customers.detail"
}
measure: in_california_count {
type: count
filters: [state: "California"]
}
}
I set LookML sono piuttosto potenti:
- La riformulazione degli insiemi è cumulativa: se dichiari un insieme in più posizioni, Looker include tutti i campi dichiarati per l'insieme in tutte le località.
- Puoi incorporare insiemi in altri insiemi digitando il nome dell'altro set, seguito da un asterisco, come
setname*
. - Puoi anche rimuovere elementi dagli insiemi inserendo un trattino prima del nome del campo, ad esempio
-fieldname
.
Leggi il riferimento completo dei set
Personalizzazione delle visualizzazioni del drill
Se l'amministratore Looker ha abilitato la funzionalità di Drilling visivo di Labs, le visualizzazioni del drill Look ed Esplora non verranno sempre impostate su una tabella di dati. In questo caso, puoi personalizzare la visualizzazione visualizzata utilizzando le variabili liquide nel parametro link
, come mostrato nella pagina della documentazione del parametro link
e nella pagina delle best practice per la perforazione dei dati più efficace.
Le dashboard supportano il drill-down visivo con il parametro link
senza dover attivare la funzionalità dei lab Visualizzazione dettagliata dei lab.
Applicazione di filtri a insiemi di risultati
LookML fornisce un insieme di operazioni di filtro che possono essere applicate ai campi e di Esplorazioni per filtrare i set di risultati prima che vengano restituiti all'utente.
always_filter
nella sezione Esplora
Utilizza always_filter
per applicare sempre un insieme di filtri a qualsiasi query eseguita all'interno di un'esplorazione. I filtri verranno visualizzati nell'interfaccia utente di Looker e, sebbene gli utenti possano modificare il valore predefinito fornito dal filtro, non possono rimuoverli. In genere, questi filtri vengono utilizzati per rimuovere i dati che normalmente non vuoi includere. Ad esempio, supponiamo che nell'esplorazione Ordini volevamo vedere solo gli ordini che erano completati o in attesa. Potremmo aggiungere:
explore: orders {
view_name: order
filters: [status: "complete,pending"]
}
}
Se l'utente vuole visualizzare gli ordini con altri valori di stato, può impostare STATO ORDINI su % nella UI.
sql_always_where
nella sezione Esplora
Se vuoi applicare una limitazione delle query che gli utenti non possono modificare, puoi utilizzare sql_always_where
. Oltre alle query eseguite da utenti umani, la limitazione verrà applicata a dashboard, Look pianificati e informazioni incorporate basate su quella Esplora. Una condizione sql_always_where
non viene mostrata all'utente, a meno che non esamini l'SQL sottostante per eventuali query che crea.
L'esempio seguente impedisce agli utenti di esaminare gli ordini precedenti al 01/01/2012:
# Using Looker references
explore: order {
sql_always_where: ${created_date} >= '2012-01-01' ;;
}
# Using raw SQL
explore: order {
sql_always_where: DATE(created_time) >= '2012-01-01' ;;
}
conditionally_filter
nella sezione Esplora
Le tabelle molto grandi richiedono un po' di riflessione durante l'esecuzione di query, poiché le query illimitate possono diventare rapidamente troppo pesanti sul database. LookML fornisce un modo per risolvere questo problema sotto forma di conditionally_filter
.
Utilizza il parametro conditionally_filter
per applicare un filtro alla query, a meno che l'utente non abbia già aggiunto un filtro per uno dei campi elencati nella sezione unless
.
L'esempio seguente non apporterà alcuna modifica alla query dell'utente se quest'ultimo ha applicato un filtro a uno o più dei seguenti campi: created_date
, shipped_time
, shipped_date
, orders.id
o customer.name
. Se l'utente non ha applicato filtri su nessuno di questi campi, Looker aggiungerà automaticamente un filtro di 1 giorno il giorno orders.created_time
.
filters: [orders.created_time: "1 day"]
unless: [created_date, shipped_time, shipped_date, orders.id, customer.name]
}