Cette page aborde un sujet avancé et suppose que le lecteur possède une connaissance solide de LookML.
Extends (Étend) est une fonctionnalité LookML utile qui vous permet de gérer un code LookML DRY (ne vous répétez pas). Dans Looker, les explorations, les vues et les tableaux de bord LookML peuvent tous être étendus avec le paramètre extends
dans un fichier de modèle, comme dans l'exemple suivant:
explore: orders { view_name: orders join: users { type: left_outer sql_on: %{orders.user_id} = ${users.id} ;; relationship: many_to_one } } explore: transactions { extends: [orders] }
Dans cet exemple, le paramètre extends
est utilisé dans la définition de l'exploration transactions
pour étendre l'exploration orders
.
Cette page fait référence à l'objet étendu en tant qu'objet de base, et à l'objet qui effectue l'extension en tant qu'objet étendu.
L'extension d'un objet LookML est un processus assez simple, comme indiqué sur la page de documentation Réutiliser du code avec extends. Toutefois, certains cas d'utilisation avancés peuvent entraîner des erreurs de référence LookML et une duplication d'objets indésirables. Cette page présente un exemple d'extension d'une exploration basée sur une vue qui étend une autre vue et qui peut entraîner des erreurs de référence LookML. Elle fournit également des conseils pour éliminer ces problèmes.
Cas d'utilisation: Étendre une exploration en fonction d'une vue extensible
Supposons que vous souhaitiez étendre l'exploration events
et que vous vouliez que la vue sur laquelle l'exploration étendue s'appuie utilise les champs d'une vue qui étend la vue events
de base. Dans cet exemple, l'exploration events_extended
étend l'exploration extends
, comme illustré dans l'exemple de code LookML suivant:
explore: events { view_name: events join: users { type: left_outer sql_on: ${events.user_id} = ${users.id} ;; relationship: many_to_one } } explore: events_extended { extends: [events] join: orders { sql_on: ${events_extended.test_id} = ${orders.id} ;; relationship: many_to_one }
Dans cet exemple, la vue users
est jointe à l'exploration de base events
, tandis que la vue orders
est jointe à l'exploration events_extended
qui l'étend. Toutefois, la jointure définie dans l'exploration events
de base fait référence à events.user_id
, qui est un champ de la vue events
de base. En revanche, la jointure définie dans l'exploration events_extended
étendue fait référence au champ events_extended.test_id
, où events_extended
est le nom d'une vue étendue basée sur la vue events
. Le champ test_id
référencé dans la jointure de la définition de l'exploration events_extended
est défini dans la vue events_extended
étendue comme suit:
include: "events.view.lkml" view: events_extended { extends: [events] dimension: test_id {}
Étant donné que la jointure définie dans l'exploration events_extended
fait référence au nom de la vue étendue, events_extended
, le validateur LookML affiche une erreur inaccessible view
.
Pour résoudre ce problème, vous pouvez ajouter le paramètre from
au code LookML de l'exploration étendue et définir sa valeur sur le nom de la vue étendue, events_extended
. Le paramètre from
remplace le nom de la table d'origine dans le code SQL généré par FROM schema.name AS alias
.
Il s'agit du seul cas d'utilisation recommandé pour appliquer le paramètre from
au niveau de l'exploration.
Pour extraire des données de la vue étendue (events_extended
) sans interrompre les références de jointure de l'exploration de base (events
), vous pouvez ajouter un paramètre from
qui correspond à la vue étendue:
explore: events_extended { extends: [events] from: events_extended join: orders { relationship: many_to_one sql_on: ${events.test_id} = ${orders.id} ;; } }
Dans cet exemple, l'application du from: events_extended
LookML au code LookML de l'exploration étendue vous permet de continuer à faire référence à la vue de base (events
) dans l'exploration étendue, tout en redirigeant ces références pour les extraire de la version étendue de cette vue (events_extended
).
Avec le paramètre from
, vous pouvez continuer à faire référence au nom de la vue de base events
dans les préfixes de jointure, mais ces références seront extraites de la vue events_extended
étendue, qui contient tous les champs de events
, ainsi que le nouveau champ test_id
.