Questa pagina si riferisce al parametro
sql
che fa parte di un campo.
sql
può essere utilizzato anche come parte di una tabella derivata, come descritto nella pagina della documentazione relativa al parametrosql
(per tabelle derivate).
Utilizzo
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
Gerarchia
sql |
Tipi di campi possibili
Dimensione, gruppo di dimensioni, filtro, misurazioneAccetta
Un'espressione SQLRegole speciali
Un'espressione SQL che varia in base al type del campo (vedi di seguito per ulteriori dettagli).
|
Definizione
Il parametro sql
utilizza diversi tipi di espressioni SQL che definiscono una dimensione, una misurazione o un filtro. L'espressione da scrivere varia in base al tipo di campo che stai creando. Per ulteriori dettagli sui tipi di dimensioni e filtri, consulta la pagina della documentazione Tipi di dimensioni, filtri e parametri, mentre ulteriori dettagli sui tipi di misurazioni sono disponibili alla pagina della documentazione Tipi di misurazioni. Consulta anche la pagina della documentazione Incorporamento di SQL e riferimento agli oggetti LookML.
sql
per le dimensioni
Il blocco sql
per le dimensioni può in genere assumere qualsiasi SQL valido che andrebbe in una singola colonna di un'istruzione SELECT
. Queste istruzioni si basano generalmente sull'operatore di sostituzione di Looker, che presenta diverse forme:
${TABLE}.column_name
fa riferimento a una colonna nella tabella collegata alla vista su cui stai lavorando.${dimension_name}
fa riferimento a una dimensione all'interno della vista su cui stai lavorando.${view_name.dimension_name}
fa riferimento a una dimensione in un'altra visualizzazione.${view_name.SQL_TABLE_NAME}
fa riferimento a un'altra visualizzazione o tabella derivata. Tieni presente cheSQL_TABLE_NAME
in questo riferimento è una stringa letterale e non è necessario sostituirla con altro.
Se sql
non viene specificato, Looker presume che nella tabella sottostante sia presente una colonna con lo stesso nome del campo. Ad esempio, la selezione di un campo denominato city
senza un parametro sql
equivale a specificare sql: ${TABLE}.city
.
Il parametro
sql
di una dimensione non può includere aggregazioni. Ciò significa che non può contenere aggregazioni SQL o riferimenti a misure LookML. Se vuoi creare un campo consql
che includa un'aggregazione SQL o che faccia riferimento a una misura LookML, utilizza un parametrosql
in una misura, non in una dimensione.
Una dimensione molto semplice che recupera il valore direttamente da una colonna denominata revenue
potrebbe avere il seguente aspetto:
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Una dimensione che si basa su un'altra dimensione nella stessa vista potrebbe avere il seguente aspetto:
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Una dimensione che si basa su un'altra dimensione in una vista diversa potrebbe avere il seguente aspetto:
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Una dimensione che si basa su un'altra dimensione in una tabella derivata potrebbe avere il seguente aspetto:
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Gli utenti SQL più avanzati possono eseguire calcoli relativamente avanzati, comprese le sotto-query correlate (nota: non tutte le query correlate per il dialetto del database):
dimension: user_order_sequence_number {
type: number
sql:
(
SELECT COUNT(*)
FROM orders AS o
WHERE o.id <= ${TABLE}.id
AND o.user_id = ${TABLE}.user_id
) ;;
}
Per ulteriori dettagli, consulta la documentazione per un tipo di dimensione specifico.
sql
per i gruppi di dimensioni
Il parametro sql
per dimension_group
prende qualsiasi espressione SQL valida contenente i dati in formato timestamp, data/ora, data, epoca o aaaammgg.
sql
per Misure
Il blocco sql
per le misure ha in genere due formati:
- L'SQL su cui verrà eseguita una funzione aggregata (come
COUNT
,SUM
,AVG
), utilizzando di nuovo l'operatore di sostituzione di Looker, come descritto sopra - Un valore basato su diverse altre misure.
Ad esempio, per calcolare le entrate totali in dollari, potremmo utilizzare:
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Per calcolare il nostro profitto totale, potremmo utilizzare:
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Per ulteriori dettagli, consulta la documentazione per un tipo di misura specifico.
Per un tipo di misurazione count
, puoi tralasciare il parametro sql
.
Per altri tipi di misure, se sql
non viene specificato, Looker presume che nella tabella sottostante sia presente una colonna con lo stesso nome del campo. Poiché una misura deve avere un nome che indica che si tratta di un insieme di valori sottostanti, in pratica dovresti sempre includere un parametro sql
.
Verifiche matematiche di SQL
Il parametro sql
presenta due sfide frequenti.
In primo luogo, se utilizzi la divisione nel calcolo, ti conviene impedire la divisione per zero, causando un errore SQL. Per farlo, utilizza la funzione SQL NULLIF
. Ad esempio, se il denominatore è zero, consideralo come NULL:
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Un altro problema è il modo in cui SQL gestisce la matematica dei numeri interi. Se dividi 5 per 2, la maggior parte delle persone si aspetta che il risultato sia 2,5. Tuttavia, molti dialetti SQL restituiranno il risultato come solo 2, perché quando divide due numeri interi, viene restituito anche un numero intero. Per risolvere il problema, puoi moltiplicare il numeratore per un numero decimale per forzare SQL a restituire un risultato decimale. Ad esempio:
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Variabili a liquido con sql
Puoi anche utilizzare le variabili Liquid con il parametro sql
. Le variabili Liquid consentono di accedere a dati come i valori in un campo, i dati sul campo e i filtri applicati al campo.
Ad esempio, questa dimensione maschera una password del cliente in base a un attributo utente di Looker:
dimension: customer_password {
sql:
{% dynamic if _user_attributes['pw_access'] == 'yes' %}
${password}
{% dynamic else %}
"Password Hidden"
{% dynamic endif %} ;;
}