SQL (per i campi)

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 parametro sql (per tabelle derivate).

Utilizzo

view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
Gerarchia
sql
Tipi di campi possibili
Dimensione, gruppo di dimensioni, filtro, misurazione

Accetta
Un'espressione SQL

Regole 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 che SQL_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 con sql che includa un'aggregazione SQL o che faccia riferimento a una misura LookML, utilizza un parametro sql 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 %} ;;
}