jointure_toujours

Utilisation

explorer: explorer_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 associer une vue à explore avant de l'utiliser dans always_join

Définition

always_join force l'inclusion d'une ou de 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 requises à 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 le SQL pour une requête, il tente de créer le SQL le plus propre possible et n'utilise que les jointures nécessaires aux champs sélectionnés par un utilisateur. Avec always_join, vous pouvez forcer les jointures à se produire dans tous les cas.

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.

Examples

Assurez-vous que member est toujours associé à event, même si l'utilisateur ne choisit pas de champ dans member. Cela permet de limiter les résultats aux seuls é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 pas de champ dans l'une de ces vues. Cela permet de limiter les résultats aux seuls é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 pour qu'elle puisse être référencée dans always_join

Pour placer une vue dans always_join, assurez-vous qu'elle est associée à l'explorateur dans lequel always_join est utilisée. Par exemple, cela ne fonctionnera pas:

explore: event {
  always_join: [member]
}

Ici, la vue member n'a pas été associée à event. Vous ne pouvez donc pas l'utiliser dans always_join.

Bon à savoir

Si possible, n'appliquez pas de logique métier dans les jointures

L'approche Looker standard pour la jointure consiste à utiliser un LEFT JOIN dans la mesure du possible. Dans les exemples ci-dessus, nous évitons de LEFT JOIN afin que la logique métier puisse être appliquée à la jointure elle-même. Dans l'un des exemples que nous avons créés, 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 privilégiée pour exécuter cette fonction dans Looker consiste à utiliser un LEFT JOIN pour obtenir les données d'événement et les données de membre ensemble:

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

Ensuite, vous pouvez créer une dimension que vous pouvez définir sur "yes" (oui) ou "no" (non) pour ne consulter que les événements des membres:

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

Cette approche permet aux utilisateurs de regarder tous les événements, ou uniquement les membres. Vous n'avez pas forcé les utilisateurs à consulter uniquement les événements des membres via la jointure.