Résoudre un exemple de cas d'utilisation d'extension avancé

Cette page aborde un sujet avancé et suppose une connaissance approfondie de LookML de votre côté.

Extends (Étendres) est une fonctionnalité LookML intéressante qui vous permet de gérer le 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 à l'aide du 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 base, et l'objet qui effectue l'extension est appelé objet extension.

L'extension d'un objet LookML est un processus assez simple, comme indiqué sur la page de documentation Réutiliser du code avec des extensions. Toutefois, certains cas d'utilisation avancés peuvent entraîner des erreurs de référence LookML et une duplication d'objets non désirée. Cette page montre dans quelle mesure l'extension d'une exploration à partir d'une vue qui étend une autre vue 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 à partir d'une vue d'extension

Supposons que vous souhaitiez étendre l'exploration events et que vous souhaitiez que la vue sur laquelle repose l'exploration étendue 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 events de base, tandis que la vue orders est jointe à l'exploration d'extension, events_extended. Cependant, 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. Pendant ce temps, la jointure définie dans l'exploration events_extended d'extension fait référence au champ events_extended.test_id, où events_extended est le nom d'une vue d'extension 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 d'extension events_extended, 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 d'extension (events_extended), l'outil de validation 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 d'extension, events_extended. Le paramètre from alias le nom de la table d'origine dans le code SQL généré, comme 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 depuis la vue développée (events_extended) sans rompre les références de jointure de l'exploration de base (events), vous pouvez ajouter un paramètre from qui est mappé à la vue d'extension:

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 d'extension vous permet de continuer à référencer la vue de base (events) dans l'exploration d'extension, tout en redirigeant ces références pour extraire de la version étendue de cette vue (events_extended).

Avec le paramètre from, vous pouvez continuer à référencer le nom de la vue de base events dans les préfixes de jointure. Toutefois, ces références seront extraites de la vue étendue events_extended, qui contient tous les champs de events, plus le nouveau champ test_id.