Cette page fait référence au paramètre
sqlqui fait partie d'un champ.
sqlpeut également être utilisé dans une table dérivée, comme décrit sur la page de documentation du paramètresql(pour les tables dérivées).
Utilisation
view: view_name {
dimension: field_name {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
}
}
|
Hiérarchie
sql |
Types de champs possibles
Dimension, groupe de dimensions, filtre, mesure
Acceptation
Expression SQL
Règles spéciales
Expression SQL qui varie en fonction de la type du champ (comme décrit en détail sur cette page de documentation)
|
Définition
Le paramètre sql accepte plusieurs types d'expressions SQL qui définiront une dimension, une mesure ou un filtre. L'expression que vous devez écrire varie en fonction du type de champ que vous créez. Pour en savoir plus sur les types de dimensions et de filtres, consultez la page de documentation Types de dimensions, de filtres et de paramètres. Pour en savoir plus sur les types de mesures, consultez la page de documentation Types de mesures. Consultez également la page de documentation Intégrer des objets SQL et faire référence à des objets LookML.
sql pour les dimensions
Le bloc sql pour les dimensions peut généralement accepter n'importe quelle expression SQL valide qui serait placée dans une colonne unique d'une instruction SELECT. Ces instructions s'appuient généralement sur l'opérateur de substitution de Looker, qui se présente sous plusieurs formes :
${TABLE}.column_namefait référence à une colonne de la table reliée à la vue sur laquelle vous travaillez.${dimension_name}fait référence à une dimension de la vue sur laquelle vous travaillez.${view_name.dimension_name}fait référence à une dimension d'une autre vue.${view_name.SQL_TABLE_NAME}fait référence à une autre vue ou table dérivée. (Notez queSQL_TABLE_NAMEdans cette référence est une chaîne littérale, qu'il est donc inutile de remplacer.)
Si sql n'est pas spécifié, Looker suppose qu'il existe une colonne dans la table sous-jacente portant le même nom que le champ. Par exemple, sélectionner un champ appelé city sans paramètre sql équivaudrait à spécifier sql: ${TABLE}.city.
Le paramètre
sqld'une dimension ne peut inclure aucune agrégation. Cela signifie qu'elle ne peut pas contenir d'agrégations SQL ni de références à des mesures LookML. Si vous souhaitez créer un champ avecsqlqui inclut une agrégation SQL ou qui fait référence à une mesure LookML, utilisez un paramètresqldans une mesure, et non dans une dimension.
Voici un exemple de dimension très simple qui prend la valeur directement à partir d'une colonne appelée revenue :
dimension: revenue_in_cents {
sql: ${TABLE}.revenue ;;
type: number
}
Voici un exemple de dimension qui s'appuie sur une autre dimension dans la même vue :
dimension: revenue_in_dollars {
sql: ${revenue_in_cents} / 100 ;;
type: number
}
Voici un exemple de dimension qui s'appuie sur une autre dimension dans une vue différente :
dimension: profit_in_dollars {
sql: ${revenue_in_dollars} - ${inventory_item.cost_in_dollars} ;;
type: number
}
Une dimension qui repose sur une autre dimension dans une table dérivée peut se présenter comme suit :
dimension: average_margin {
sql: (SELECT avg(${gross_margin} FROM ${order_facts.SQL_TABLE_NAME})) ;;
type: number
}
Les utilisateurs SQL plus avancés peuvent effectuer des calculs relativement complexes, y compris des sous-requêtes corrélées (remarque : tous les dialectes de base de données ne sont pas compatibles avec les sous-requêtes corrélées) :
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
) ;;
}
Pour en savoir plus, consultez la documentation sur un type de dimension spécifique.
sql pour les groupes de dimensions
Le paramètre sql d'un dimension_group accepte toute expression SQL valide contenant des données au format timestamp, datetime, date, epoch ou yyyymmdd.
sql pour les mesures
Le bloc sql pour les mesures prend généralement l'une des deux formes suivantes :
- Le code SQL sur lequel une fonction d'agrégation (telle que
COUNT,SUMouAVG) sera exécutée, en utilisant à nouveau l'opérateur de substitution de Looker, comme décrit dans la section SQL pour les dimensions - Valeur basée sur plusieurs autres mesures
Par exemple, pour calculer le revenu total en dollars, nous pouvons utiliser :
measure: total_revenue_in_dollars {
sql: ${revenue_in_dollars} ;;
type: sum
}
Pour calculer notre bénéfice total, nous pouvons utiliser la formule suivante :
measure: total_revenue_in_dollars {
sql: ${total_revenue_in_dollars} - ${inventory_item.total_cost_in_dollars} ;;
type: number
}
Pour en savoir plus, consultez la documentation sur un type de mesure spécifique.
Pour un type de mesure count, vous pouvez omettre le paramètre sql.
Pour les autres types de mesures, si sql n'est pas spécifié, Looker suppose qu'il existe une colonne dans la table sous-jacente portant le même nom que le champ. Étant donné qu'une mesure doit avoir un nom indiquant qu'il s'agit d'un agrégat d'un ensemble de valeurs sous-jacent, vous devez toujours inclure un paramètre sql en pratique.
Défis mathématiques SQL
Deux problèmes fréquents se posent avec la division dans le paramètre sql.
Tout d'abord, si vous utilisez la division dans votre calcul, vous devez vous prémunir contre la possibilité de diviser par zéro, ce qui entraînera une erreur SQL. Pour ce faire, utilisez la fonction SQL NULLIF. Par exemple, l'exemple suivant signifie "si le dénominateur est nul, traitez-le comme NULL" :
measure: active_users_percent {
sql: ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Un autre problème concerne la façon dont SQL gère les calculs avec des nombres entiers. Si vous divisez 5 par 2, la plupart des gens s'attendent à obtenir 2,5. Toutefois, de nombreux dialectes SQL renverront le résultat 2, car lorsqu'ils divisent deux entiers, ils renvoient également le résultat sous forme d'entier. Pour résoudre ce problème, vous pouvez multiplier le numérateur par un nombre décimal afin de forcer SQL à renvoyer un résultat décimal. Exemple :
measure: active_users_percent {
sql: 100.00 * ${active_users} / NULLIF(${users}, 0) ;;
type: number
}
Variables Liquid avec sql
Vous pouvez également utiliser des variables Liquid avec le paramètre sql. Les variables Liquid vous permettent d'accéder à des données telles que les valeurs d'un champ, des informations sur le champ et les filtres appliqués au champ.
Par exemple, cette dimension masque un mot de passe client en fonction d'un attribut utilisateur Looker :
dimension: customer_password {
sql:
{% if _user_attributes['pw_access'] == 'yes' %}
${password}
{% else %}
"Password Hidden"
{% endif %} ;;
}