Pour écrire un code LookML efficace, vous devez pouvoir faire référence à des dimensions, mesures, vues ou tables dérivées existantes, même si elles sont en dehors de la portée actuelle. Vous devez également référencer des colonnes dans la table sous-jacente et utiliser les appels de fonction du dialecte de la base de données pour manipuler ces valeurs.
Opérateur de substitution ($)
L'opérateur de substitution $
rend le code LookML plus réutilisable et modulaire. Vous pouvez ainsi référencer d'autres vues et tables dérivées, colonnes dans une table SQL, ou dimensions et mesures LookML. Cette méthode présente deux avantages : Tout d'abord, vous avez peut-être déjà dû définir une dimension ou une mesure très complexe, et vous n'aurez pas besoin d'écrire à nouveau la complexité. Deuxièmement, si vous modifiez une dimension ou une mesure, vous pouvez reporter ces changements sur tous les éléments reposant sur cette dimension ou mesure.
Vous pouvez vous servir de l'opérateur de substitution de plusieurs façons :
${TABLE}.column_name
fait référence à une colonne de la table associée à la vue sur laquelle vous travaillez. Exemple :
dimension: customer_id {
type: number
sql: ${TABLE}.customer_id ;;
}
${field_name}
fait référence à une dimension ou à une mesure dans la vue sur laquelle vous travaillez. Exemple :
measure: total_population {
type: sum
sql: ${population} ;;
}
${view_name.field_name}
fait référence à une dimension ou à une mesure à partir d'une autre vue. Exemple :
dimension: lifetime_orders {
type: number
sql: ${user_order_facts.lifetime_orders} ;;
}
${view_name.SQL_TABLE_NAME}
fait référence à une autre vue ou à une table dérivée. Notez que dans cette référence, SQL_TABLE_NAME
est une chaîne littérale. Vous n'avez pas besoin de la remplacer par quoi que ce soit. Exemple :
explore: trips {
view_label: "Long Trips"
# This will ensure that we only see trips that are longer than average!
sql_always_where: ${trips.trip_duration}>=(SELECT tripduration FROM ${average_trip_duration.SQL_TABLE_NAME});;
}
${view_name.SQL_TABLE_NAME}
ne fonctionne pas avec le paramètresql_trigger
utilisé avec les groupes de données.
Portée et appellation
Vous pouvez nommer des explorations, des vues, des champs et des ensembles, ces identifiants Looker étant écrits sans guillemets.
Les champs et ensembles LookML ont des noms complets et des noms courts:
- Les noms complets sont au format
<view>.<field-name | set-name>
. La partie gauche indique la portée, c'est-à-dire la vue contenant le champ ou l'ensemble. La partie droite correspond au nom du champ ou de l'ensemble à proprement parler. - Les noms courts se présentent simplement au format
<field-name | set-name>
, sans point de séparation. Looker développe les noms abrégés en noms complets en utilisant la portée dans laquelle ils sont employés.
Voici un exemple illustrant plusieurs formes de nom et de portée. Ce groupe de champs, quoique peu réaliste, est représentatif des différentes expressions de portée possibles.
view: orders { # "orders" becomes the containing scope
measure: count { # short name, equivalent to orders.count
type: count
}
dimension: customer_id { # short name, equivalent to orders.customer_id
type: number
sql: ${TABLE}.customer_id ;;
}
dimension: customer_address { # short name, equivalent to orders.customer_address
sql: ${customer.address} ;; # full name, references a field defined in the "customer" view
}
set: drill_fields { # short name, equivalent to orders.drill_fields
fields: [
count, # short name, equivalent to orders.count
customer.id # full name, references a field defined in the "customer" view
]
}
}
Dans la déclaration dimension: customer_address
ci-dessus, notez que la vue sous-jacente du bloc SQL (customer
) est différente de la vue englobante (orders
). Cela peut s'avérer utile lorsque vous devez comparer des champs entre deux vues différentes.
Lorsqu'une vue (vue "A") fait référence à un champ défini dans une autre vue (vue "B"), vous devez tenir compte des points suivants:
- Le fichier de vue B doit être inclus dans le même modèle que la vue A, à l'aide du paramètre
include
. - La vue B doit être jointe à la vue A dans une ou plusieurs explorations. Consultez la page Utiliser des jointures dans LookML pour en savoir plus sur les jointures.
Dialecte SQL
Looker est compatible avec de nombreux types de bases de données tels que MySQL, Postgres, Redshift, BigQuery, etc. Chaque base de données accepte un ensemble de fonctionnalités légèrement différent avec des noms de fonction différents, appelés dialecte SQL.
LookML est compatible avec tous les dialectes SQL, sans distinction. Toutefois, vous devez inclure des expressions de code SQL (appelées blocs SQL) dans certains paramètres LookML. En effet, avec ces paramètres, Looker transmet directement l'expression SQL à la base de données, de sorte que vous devez utiliser le dialecte SQL correspondant à cette dernière. Par exemple, si vous utilisez une fonction SQL, il doit s'agir d'une fonction prise en charge par votre base de données.
Blocs SQL
Certains paramètres LookML imposent de fournir des expressions SQL brutes afin que Looker puisse comprendre comment extraire des données de la base.
Les paramètres LookML qui commencent par sql_
s'attendent à une expression SQL. Par exemple: sql_always_where
, sql_on
et sql_table_name
. Le paramètre LookML le plus courant pour les blocs SQL est sql
. Il est utilisé dans les définitions des champs de dimensions et de mesures pour spécifier l'expression SQL qui définit la dimension ou la mesure.
Le code spécifié dans un bloc SQL peut être un simple nom de champ ou une instruction de sous-sélection corrélée sophistiquée. Le contenu peut être relativement complexe et répondre à pratiquement tous vos besoins pour exprimer une logique de requête personnalisée en SQL brut. Notez que le code que vous utilisez dans les blocs SQL doit correspondre au dialecte SQL utilisé par la base de données.
Exemples de blocs SQL de dimensions et de mesures
Vous trouverez ci-dessous plusieurs exemples de blocs SQL de dimensions et de mesures. Contrairement à SQL, l'opérateur de substitution LookML ($) peut faire apparaître ces déclarations sql
de manière trompeuse. Cependant, une fois la substitution effectuée, la chaîne qui en résulte est du code SQL pur, que Looker injecte dans la clause SELECT
de la requête.
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;; # Specify the primary key, id
}
measure: average_cost {
type: average
value_format: "0.00"
sql: ${order_items.cost} ;; # Specify the field that you want to average
}
dimension: name {
sql: CONCAT(${first_name}, ' ', ${last_name}) ;;
}
dimension: days_in_inventory {
type: int
sql: DATEDIFF(${sold_date}, ${created_date}) ;;
}
Comme indiqué dans les deux dernières dimensions ci-dessus, les blocs SQL peuvent utiliser des fonctions compatibles avec la base de données sous-jacente (telles que les fonctions MySQL CONCAT
et DATEDIFF
dans cet exemple).
Exemple de bloc SQL contenant une sous-sélection corrélée
Vous pouvez placer n'importe quelle instruction SQL dans le bloc SQL d'un champ, y compris dans une sous-sélection corrélée. En voici un exemple :
view: customers {
dimension: id {
primary_key: yes
sql: ${TABLE}.id ;;
}
dimension: first_order_id {
sql: (SELECT MIN(id) FROM orders o WHERE o.customer_id=customers.id) ;;
# correlated subselect to derive the value for "first_order_id"
}
}
Exemple de bloc SQL destiné à des tables dérivées
Les tables dérivées utilisent le bloc SQL pour spécifier la requête déduite de la table. En voici un exemple :
view: user_order_facts {
derived_table: {
sql: # Get the number of orders for each user
SELECT
user_id
, COUNT(*) as lifetime_orders
FROM orders
GROUP BY 1 ;;
}
# later, dimension declarations reference the derived column(s)
dimension: lifetime_orders {
type: number
}
}
Références des types de champs LookML
Lorsque vous référencez un champ LookML existant dans un autre champ, vous pouvez demander à Looker de traiter le champ référencé comme un type de données spécifique à l'aide du double point (::
), suivi du type souhaité. Par exemple, si vous référencez la dimension orders.created_date
dans un autre champ, vous pouvez utiliser la syntaxe ${orders.created_date::date}
pour que le champ created_date
soit traité comme un champ de date dans le langage SQL généré par Looker, au lieu d'être converti en chaîne.
Le type de données que vous pouvez utiliser dans une référence dépend de celui utilisé dans le champ d'origine que vous référencez actuellement. Par exemple, si vous faites référence à un champ de chaîne, le seul type de données que vous pouvez spécifier est ::string
. Voici la liste complète des références de types de champs autorisés et que vous pouvez utiliser pour chaque type de champ :
- Dans une référence à un champ de chaîne, vous pouvez utiliser
::string
. - Dans une référence à un champ numérique, vous pouvez utiliser
::string
et::number
. - Dans une référence à un champ de date ou d'heure, vous pouvez utiliser
::string
,::date
et::datetime
.
Les références utilisant::string
et::date
renvoient des données dans le fuseau horaire de la requête, tandis que les références utilisant::datetime
renvoient des données dans le fuseau horaire de la base de données. - Dans une référence à un champ "yesno", vous pouvez utiliser
::string
,::number
et::boolean
.
Les références de champs utilisant le type::boolean
ne sont pas disponibles pour les dialectes de base de données qui ne sont pas compatibles avec le type de données booléen. - Dans une référence à un champ de zone géographique, vous pouvez utiliser
::latitude
et::longitude
.
Utilisation des références des types de champs LookML avec les champs de date
Par exemple, supposons que vous ayez une dimension enrollment_month
et une dimension graduation_month
, qui ont toutes les deux été créées dans des groupes de dimensions de type: time
. Dans cet exemple, la dimension enrollment_month
est produite par le groupe de dimensions suivant (type: time
) :
dimension_group: enrollment {
type: time
timeframes: [time, date, week, month, year, raw]
sql: ${TABLE}.enrollment_date ;;
}
De même, la dimension graduation_month
est créée par le groupe de dimensions type: time
suivant:
dimension_group: graduation {
type: time
timeframes: [time, date, week, month, year, raw]
sql: ${TABLE}.graduation_date ;;
}
Les dimensions enrollment_month
et graduation_month
vous permettent de calculer le nombre de mois ou d'années entre l'inscription de l'élève et l'obtention du diplôme en créant un groupe de dimensions type: duration
. Toutefois, étant donné que certains champs de date sont castés en chaînes SQL dans Looker, la définition des dimensions enrollment_month
et graduation_month
en tant que valeurs pour sql_start
et sql_end
peut entraîner une erreur.
Pour éviter une erreur résultant du cast de ces champs de temps en tant que chaînes, vous pouvez créer un groupe de dimensions type: duration
, en référençant les délais raw
à partir des groupes de dimensions enrollment
et graduation
dans les paramètres sql_start
et sql_end
:
dimension_group: enrolled {
type: duration
intervals: [month, year]
sql_start: ${enrollment_raw} ;;
sql_end: ${graduation_raw} ;;
}
Dans l'interface utilisateur de l'onglet "Explorer", vous générez un groupe de dimensions appelé Durée d'inscription, avec les dimensions individuelles Mois d'inscription et Années d'enregistrement.
Une alternative plus simple à l'utilisation de la période raw
dans un groupe de dimensions type: duration
consiste à spécifier le type de référence ::date
ou ::datetime
pour les champs référencés dans les paramètres sql_start
et sql_end
.
dimension_group: enrolled {
type: duration
intervals: [month, year]
sql_start: ${enrollment_month::date} ;;
sql_end: ${graduation_month::date} ;;
}
Dans cet exemple, le LookML crée également un groupe de dimensions Durée d'inscription, mais la référence ::date
permet d'utiliser les dimensions enrollment_month
et graduation_month
sans utiliser de période raw
ni les caster en tant que chaînes avec SQL.
Pour voir un autre exemple d'utilisation des références de type LookML pour créer des groupes de dimensions personnalisées de type: duration
, consultez la page de documentation sur les paramètres dimension_group
.
Cette syntaxe n'est pas disponible avec les mesures de
type: list
, qui ne peuvent pas être référencées à partir de Looker 6.8.
Constantes LookML
Le paramètre constant
vous permet de spécifier une constante que vous pouvez utiliser dans un projet LookML. Avec les constantes LookML, vous pouvez définir une valeur une fois et la référencer à n'importe quel endroit de votre projet qui accepte les chaînes et ainsi, limiter les répétitions dans votre code LookML.
Les constantes doivent être déclarées dans un manifeste de projet et la valeur de la constante doit être une chaîne. Par exemple, vous pouvez définir une constante city
avec la valeur "Okayama"
comme suit:
constant: city {
value: "Okayama"
}
La constante city
peut ensuite être référencée dans l'ensemble du projet à l'aide de la syntaxe @{city}
. Par exemple, vous pouvez utiliser la constante city
avec le paramètre label
dans users
:
explore: users {
label: "@{city} Users"
}
Looker affiche ensuite Okayama Users (Utilisateurs d'Okayama) dans le menu Explore (Explorer) et dans le titre de l'exploration, plutôt que l'option par défaut Users (Utilisateurs).
Pour en savoir plus et voir des exemples d'utilisation des constantes LookML pour écrire du code réutilisable, consultez la page de documentation sur les paramètres constant
.