Exemple de dépannage d'un cas d'utilisation d'extension avancée

Cette page aborde un sujet avancé et suppose une connaissance solide de LookML du côté du lecteur.

Extends 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 extending.

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 souhaitiez que la vue sur laquelle l'exploration étendue se base 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 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 étendue, events_extended. 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 dans 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, LookML Validator 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. Dans le code SQL généré, le paramètre from crée un alias du nom de la table d'origine, sous la forme 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.