Utilisation
explore: view_name {
join: view_name_2 {
relationship: one_to_one
}
}
|
Hiérarchie
relationship |
Valeur par défaut
many_to_one
Acceptation
Une relation (many_to_one, many_to_many, one_to_many, one_to_one)
|
Définition
relationship vous permet de décrire la relation join entre les vues jointes. Il est important de définir correctement le type de relation pour que Looker puisse calculer des mesures précises.
Pour comprendre la relation qui est définie, prenons l'exemple suivant :
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
join: user_facts {
sql_on: ${user.id} = ${user_facts.user_id} ;;
relationship: one_to_one
}
}
Lorsqu'une vue est jointe directement à une exploration, comme la vue user dans cet exemple, la relation est de l'exploration vers la vue jointe. Nous indiquons ici qu'il peut y avoir plusieurs commandes pour un utilisateur.
Lorsqu'une vue est jointe à une exploration via une autre vue (par exemple, user_facts est joint à order via user dans cet exemple), la relation définie est de la vue intermédiaire (user) à la vue finale (user_facts). Dans cet exemple, nous indiquons qu'il existe un utilisateur pour un enregistrement de fait utilisateur.
Les valeurs possibles pour relationship sont décrites dans les sections suivantes de cette page :
one_to_one
Si une ligne de l'exploration ne peut correspondre qu'à une seule ligne de la vue jointe, la relation est one_to_one.
Par exemple, une exploration user avec une vue jointe user_facts serait one_to_one, car les deux tables comportent une ligne par utilisateur.
Une relation
one_to_onenécessite qu'il n'y ait aucune valeur nulle dans les clés primaires des tables. S'il existe des valeurs nulles dans l'une ou les deux clés primaires des tables, la relation estmany_to_manyoumany_to_one.
many_to_one (valeur par défaut)
Si plusieurs lignes de l'exploration peuvent correspondre à une ligne de la vue jointe, la relation est many_to_one. Par exemple, une exploration order avec une vue associée user serait many_to_one, car il peut y avoir plusieurs commandes par utilisateur.

one_to_many
Si une ligne de l'exploration peut correspondre à plusieurs lignes de la vue jointe, la relation est one_to_many. Par exemple, une exploration order avec une vue jointe item serait one_to_many, car une commande peut contenir plusieurs articles.

many_to_many
Si de nombreuses lignes de l'exploration peuvent correspondre à de nombreuses lignes de la vue jointe, la relation est many_to_many. Par exemple, une exploration student avec une vue associée class peut être many_to_many si un élève suit plusieurs cours et qu'un cours compte plusieurs élèves. En pratique, les relations many-to-many sont souvent évitées dans la conception des bases de données SQL. La plupart des modèles n'ont donc pas besoin de many-to-many.many_to_many

Exemples
Déclarez la relation user à dna comme one_to_one :
explore: user {
join: dna {
sql_on: ${user.dna_id} = ${dna.id} ;;
relationship: one_to_one
}
}
Déclarez la relation order à user comme many_to_one :
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
}
Déclarez la relation order à item comme one_to_many :
explore: order {
join: item {
sql_on: ${order.order_id} = ${item.order_id} ;;
relationship: one_to_many
}
}
Déclarez la relation student à class comme many_to_many :
explore: student {
join: class {
sql_on: ${student.student_id} = ${class.student_id} ;;
relationship: many_to_many
}
}
Déclarez la relation user à user_type comme many_to_one :
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
join: user_type {
sql_on: ${user.type_id} = ${user_type.id} ;;
relationship: many_to_one
}
}