always_join

Utilisation


explore: explore_name {
  always_join: [
    view_name,
    view_name,
    ...
  ]
}
Hiérarchie
always_join
Valeur par défaut
Aucun

Acceptation
Crochets contenant une liste de noms de vues séparés par une virgule

Règles spéciales
Vous devez joindre une vue à explore avant de l'utiliser dans always_join.

Définition

always_join force l'inclusion d'une ou plusieurs jointures dans le code SQL généré par Looker, même si l'utilisateur n'a pas sélectionné de champ dans cette vue jointe. Plusieurs jointures peuvent être nécessaires à l'aide d'une liste d'éléments séparés par une virgule, comme [view_name_a, view_name_b, etc].

Lorsque Looker génère du code SQL pour une requête, il tente de créer le code SQL le plus propre possible et n'utilise que les jointures nécessaires pour les champs qu'un utilisateur sélectionne. En utilisant always_join, vous pouvez forcer les jointures à se produire quoi qu'il arrive.

always_join peut être utile lorsqu'une jointure est exécutée avec le paramètre type et que la jointure n'est pas une LEFT JOIN. Dans ce cas, la jointure peut être essentielle pour limiter correctement les lignes renvoyées.

Exemples

Assurez-vous que member est toujours associé à event, même si l'utilisateur ne choisit pas de champ dans member. Cela limite les résultats aux événements générés par les membres :

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

Assurez-vous que member et payment sont toujours associés à event, même si l'utilisateur ne choisit aucun champ dans ces vues. Cela limite les résultats aux événements générés par les membres pour lesquels ils ont déjà payé :

explore: event {
  always_join: [member, payment]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
  join: payment {
    sql_on: ${member.payment_id} = ${payment.id} ;;
    type: inner
  }
}

Difficultés courantes

Une vue doit être jointe à une exploration avant de pouvoir être référencée dans always_join.

Pour placer une vue dans always_join, assurez-vous qu'elle est jointe à l'explorationalways_join est utilisé. Par exemple, ceci ne fonctionnera pas :

explore: event {
  always_join: [member]
}

Ici, la vue member n'a pas été jointe à event. Elle n'est donc pas disponible dans always_join.

Bon à savoir

Évitez d'appliquer la logique métier dans les jointures si possible

L'approche standard de Looker pour les jointures consiste à utiliser un LEFT JOIN chaque fois que cela est possible. Dans les exemples précédents, nous évitons un LEFT JOIN afin que la logique métier puisse être appliquée dans la jointure elle-même. Dans l'un des exemples, nous avons créé une exploration qui n'incluait que les événements associés aux membres :

explore: event {
  always_join: [member]
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
    type: inner
  }
}

La méthode recommandée pour exécuter cette opération dans Looker consiste à utiliser un LEFT JOIN pour obtenir les données d'événement et les données de membre associées de manière simple :

explore: event {
  join: member {
    sql_on: ${event.member_id} = ${member.id} ;;
  }
}

Vous pouvez ensuite créer une dimension que vous pouvez définir sur "oui" ou "non" pour n'examiner que les événements des membres :

dimension: is_member_event {
  type: yesno
  sql: ${member.id} IS NOT NULL ;;
}

Cette approche permet aux utilisateurs d'examiner tous les événements ou uniquement les événements des membres. Vous n'avez pas forcé les utilisateurs à ne regarder que les événements des membres via la jointure.

Lorsqu'une exploration inclut always_join, la valeur par défaut de full_suggestions passe à yes.

Lorsqu'une exploration inclut le paramètre always_join, la valeur par défaut de full_suggestions passe à yes. La requête de suggestions s'exécute alors à l'aide de la logique Explorer, ce qui signifie que always_join est appliqué pour affiner les suggestions renvoyées. La liste de suggestions est ainsi limitée aux données auxquelles l'utilisateur est censé avoir accès.

Si vous définissez manuellement full_suggestions sur no, la requête de suggestion de filtre ne s'exécutera pas.