Ulteriori nozioni di base su LookML

Questa pagina illustra i pattern più comuni in LookML.

Etichettatura dei campi (e dei nomi nell'interfaccia utente)

Looker converte i nomi dei campi LookML nelle stringhe visualizzate nell'interfaccia utente combinando il nome della vista in caratteri regolari con il nome breve del campo in grassetto. Ad esempio, un campo chiamato Importo nella visualizzazione Ordini viene visualizzato nell'interfaccia utente come Importo degli ordini. In questa pagina, sono entrambi in grassetto e il nome della visualizzazione è in maiuscolo (ORDERS Amount) per rendere più chiara la discussione.

Se vuoi che un campo abbia un nome diverso rispetto al nome della colonna in una tabella, modifica semplicemente il nome del campo e dichiara il relativo collegamento sql:. Nell'esempio riportato di seguito è presente una tabella airports con una colonna cntrl_twr. Looker genera 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
  }
}

Chiameremo la dimensione cntrl_twr 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

Raggruppare i dati per dimensione e conteggiare le entità è piuttosto semplice. Se scegli il raggruppamento per UTENTI Paese, Numero ORDINI ti indicherà da dove provengono i tuoi ordini in base al paese. Tuttavia, spesso è utile creare un conteggio filtrato in base a un valore dimensionale. Ad esempio, potresti creare una nuova misura 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 conteggiasse gli utenti dell'UE, potresti utilizzare qualcosa di simile a questo:

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 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 articoli restituiti", "la percentuale di email che hanno generato una vendita" o altre istanze della "percentuale di X che Y". In LookML, il pattern di progettazione prevede la creazione di conteggi per le due condizioni e un terzo campo che calcola la percentuale tra le due condizioni.

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 seguente per calcolare le percentuali. In Postgres, i conteggi sono numeri interi, e la divisione tra numeri interi genera numeri interi. Moltiplicando per 100,0 il primo conteggio viene convertito 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 nullo il risultato ed evitando un errore.

100.0 * ${returned_count} / NULLIF(${count}, 0)

Utilizzare gli insiemi per la visualizzazione in dettaglio dei dettagli

Una delle funzionalità più potenti di Looker è la possibilità di visualizzare in dettaglio i dati per vedere 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 il set di dati che lo costituisce. Ogni valore di ogni dimensione nella riga della tabella viene aggiunto ai filtri correnti.

Per mostrare i dettagli, Looker ha bisogno di un elenco specificato di campi drill da mostrare quando è stato fatto clic sul valore della misura. Quando generi un modello, il generatore di solito crea alcuni campi drill iniziali per te. Inoltre, puoi aggiungere autonomamente i campi drill. Ad esempio, supponiamo che misuriamo il numero di ORDINI per stato degli utenti nell'ultima settimana. In Looker, la query sarà simile alla seguente:

Stato USERSNumero ORDERS
California24
Texas5
Colorado4
Florida4
Illinois4

Se facciamo clic su 24 nella riga California, notiamo il comportamento previsto dei 24 ordini provenienti dalla California.

Looker gestisce l'aggiunta del filtro UTENTI Stato: California, ma non sa quali campi vuoi mostrare nell'ordine. Per dichiarare questi campi nel modello, devi utilizzare un set.

In LookML, un set è un elenco di nomi di campi (dimensioni, misura e filtro). I set vengono utilizzati per indicare a Looker quali campi:

  • Da mostrare quando visualizzi in dettaglio un conteggio o un'altra misura
  • Come importare durante l'unione a una vista
  • Sono indicizzate in un'esplorazione

Poiché lo stesso set può essere utilizzato in molte posizioni all'interno di un modello, Looker offre diversi modi per creare i set.

Insiemi letterali

La forma più semplice di un insieme è un insieme letterale. Un set di valore letterale viene creato semplicemente dichiarando il set come un array. Puoi dichiarare i set di valori letterali utilizzando "[]".

Considerato 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 gli insiemi che vengono utilizzati una sola volta, dichiararli letteralmente è semplice e facilmente comprensibile.

Insiemi denominati

Supponiamo di avere due valori: CUSTOMERS Count e CUSTOMERS In California Count. Se visualizziamo in dettaglio uno di questi conteggi, vorremmo visualizzare 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 volessimo aggiungere un nuovo campo (ad esempio il campo customers.state), dobbiamo modificare entrambi gli elenchi. LookML fornisce invece un modo per creare set denominati che possiamo conservare in una sola posizione e utilizzare in più posizioni.

Il codice seguente crea un insieme di customers.detail e punta entrambi al conteggio dello 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 ricertificazione 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 gruppi in altri gruppi digitandone il nome, seguito da un asterisco, ad esempio setname*.
  • Puoi anche rimuovere elementi dagli insiemi posizionando un trattino prima del nome del campo, ad esempio -fieldname.

Leggi il riferimento completo dei set

Personalizzazione delle visualizzazioni dei dettagli

Se l'amministratore di Looker ha abilitato la funzionalità di Labs Visualizzazione dettagliata, le visualizzazioni in dettaglio di Look ed esplorazione non sempre mostreranno una tabella di dati per impostazione predefinita. In questo caso, puoi personalizzare la visualizzazione mostrata utilizzando le variabili Liquid nel parametro link, come mostrato nella pagina della documentazione relativa al parametro link e nella pagina Best practice per il drill dei dati più potenti.

Le dashboard supportano il drill-down visivo utilizzando il parametro link senza la necessità di abilitare la funzionalità di Labs Visualizzazione dettagliata.

Filtro set di risultati

LookML fornisce un insieme di operazioni di filtro che possono essere applicate a campi ed esplorazioni per filtrare i set di risultati prima che vengano restituiti all'utente.

always_filter nell'esplorazione

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, nonostante gli utenti possano modificare il valore predefinito del filtro da te specificato, non possono rimuoverli. In genere, questi filtri vengono utilizzati per rimuovere i dati che normalmente non vuoi includere. Ad esempio, supponi di voler visualizzare solo gli ordini completati o in attesa nell'esplorazione Ordini. 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 lo stato ORDINI su % nell'interfaccia utente.

sql_always_where nell'esplorazione

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 alle dashboard, ai Look pianificati e alle informazioni incorporate che si basano su quell'esplorazione. Una condizione sql_always_where non viene mostrata all'utente, a meno che non esamini l'SQL sottostante delle query che crea.

L'esempio seguente impedisce agli utenti di esaminare gli ordini prima del 1° gennaio 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 nell'esplorazione

Le tabelle molto grandi richiedono una certa riflessione durante l'esecuzione di query, poiché le query illimitate possono diventare rapidamente troppo gravose per il database. LookML fornisce un modo per risolvere questo problema sotto forma di conditionally_filter.

Puoi utilizzare 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 modificherà alcuna modifica alla query dell'utente se quest'ultimo ha applicato un filtro a uno o più di questi campi: created_date, shipped_time, shipped_date, orders.id o customer.name. Se l'utente non ha applicato alcun filtro in base a 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]
}