sql (per i campi)

Questa pagina si riferisce al parametro sql che fa parte di un campo.

sql può essere utilizzato anche nell'ambito di una tabella derivata, come descritto nella pagina della documentazione dedicata al parametro sql (per le 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, Misura

Accetta
Un'espressione SQL

Regole speciali
Un'espressione SQL che varia in base a type del campo (come descritto in dettaglio in questa pagina della documentazione)

Definizione

Il parametro sql accetta diversi tipi di espressioni SQL che definiranno una dimensione, una misura o un filtro. L'espressione che devi scrivere varia in base al tipo di campo che stai creando. Per maggiori dettagli sui tipi di dimensioni e filtri, consulta la pagina della documentazione Tipi di dimensioni, filtri e parametri, mentre per maggiori dettagli sui tipi di misure, consulta la pagina della documentazione Tipi di misure. Consulta anche la pagina della documentazione Incorporare SQL e fare riferimento agli oggetti LookML.

sql per le dimensioni

Il blocco sql per le dimensioni può generalmente accettare qualsiasi espressione SQL valida che deve essere inserita in una singola colonna di un'istruzione SELECT. Queste istruzioni si basano in genere sull'operatore di sostituzione di Looker, che ha diverse forme:

  • ${TABLE}.column_name fa riferimento a una colonna della tabella collegata alla visualizzazione su cui stai lavorando.
  • ${dimension_name} fa riferimento a una dimensione all'interno della visualizzazione su cui stai lavorando.
  • ${view_name.dimension_name} fa riferimento a una dimensione di un'altra vista.
  • ${view_name.SQL_TABLE_NAME} fa riferimento a un'altra visualizzazione o a una tabella derivata. Tieni presente che SQL_TABLE_NAME in questo riferimento è una stringa letterale; non devi sostituirla con nient'altro.

Se sql non è specificato, Looker presuppone che nella tabella sottostante esista una colonna con lo stesso nome del campo. Ad esempio, selezionare 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 prende il valore direttamente da una colonna chiamata 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 visualizzazione 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 visualizzazione diversa potrebbe avere questo 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ù esperti possono eseguire calcoli relativamente avanzati, incluse le subquery correlate (nota: non tutti i dialetti del database supportano le subquery correlate):

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 relativa a un tipo di dimensione specifico.

sql per i gruppi di dimensioni

Il parametro sql per un dimension_group accetta qualsiasi espressione SQL valida che contenga dati in formato timestamp, datetime, data, epoca o aaaammgg.

sql per le misure

Il blocco sql per le misure in genere assume una delle due forme seguenti:

  • Il codice SQL su cui verrà eseguita una funzione di aggregazione (ad esempio COUNT, SUM, AVG), utilizzando di nuovo l'operatore di sostituzione di Looker come descritto nella sezione SQL per le dimensioni
  • 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 relativa a un tipo di metrica specifico.

Per un tipo di misura count, puoi omettere il parametro sql.

Per altri tipi di misure, se sql non è specificato, Looker presuppone che nella tabella sottostante esista una colonna con lo stesso nome del campo. Poiché una misura deve avere un nome che indichi che si tratta di un'aggregazione di un insieme di valori sottostanti, in pratica devi sempre includere un parametro sql.

Sfide di matematica SQL

Esistono due sfide frequenti che si presentano con la divisione nel parametro sql.

Innanzitutto, se utilizzi la divisione nel calcolo, devi proteggerti dalla possibilità di dividere per zero, il che causerà un errore SQL. Per farlo, utilizza la funzione SQL NULLIF. Ad esempio, questo esempio significa "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 degli 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 2, perché quando divide due numeri interi, il risultato è un numero intero. Per risolvere questo 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 Liquid con sql

Puoi anche utilizzare le variabili Liquid con il parametro sql. Le variabili Liquid consentono di accedere a dati come i valori di un campo, i dati sul campo e i filtri applicati al campo.

Ad esempio, questa dimensione maschera la password di un cliente in base a un attributo utente di Looker:

dimension: customer_password {
  sql:
    {% if _user_attributes['pw_access'] == 'yes' %}
      ${password}
    {% else %}
      "Password Hidden"
    {% endif %} ;;
}