用法
explore: view_name {
join: view_name_2 {
relationship: one_to_one
}
}
|
层次结构
relationship |
默认值
many_to_one
接受
关系(many_to_one、many_to_many、one_to_many、one_to_one)
|
定义
relationship 可用于描述联接视图之间的 join 关系。请务必正确定义关系类型,以便 Looker 计算出准确的度量。
为了解所定义的关系,请参考以下示例:
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
}
}
当视图直接联接到探索时(例如本例中的 user 视图),关系是从探索到联接的视图。我们在这里表示,一个用户可以有多个订单。
当视图通过另一个视图联接到探索时(例如,在此示例中,user_facts 通过 user 联接到 order),所定义的关系是从中间视图 (user) 到最终视图 (user_facts)。在此示例中,我们表示一个用户事实记录对应一个用户。
如需了解 relationship 的可能值,请参阅本页面的以下部分:
one_to_one
如果探索中的一行只能与联接视图中的一行匹配,则关系为 one_to_one。例如,如果 user 探索具有 user_facts 联接视图,则为 one_to_one,因为这两个表都包含每位用户一行数据。
one_to_one关系要求表的主键中不得有 null 值。如果表的主键中有一个或两个都包含 null 值,则关系为many_to_many或many_to_one。
many_to_one(默认值)
如果探索中的多行可以与联接视图中的一行匹配,则关系为 many_to_one。例如,具有 user 联接视图的 order 探索将为 many_to_one,因为每个用户可能有多个订单。

one_to_many
如果探索中的一行可以与联接视图中的多行匹配,则关系为 one_to_many。例如,具有 item 联接视图的 order 探索将为 one_to_many,因为一个订单可以包含多个商品。

many_to_many
如果“探索”中的多行可以与联接视图中的多行匹配,则关系为 many_to_many。例如,如果学生有多门课程,而一门课程有多个学生,则具有 class 联接视图的 student 探索可能为 many_to_many。在实践中,SQL 数据库设计通常会避免 many-to-many 关系,因此大多数模型不需要 many_to_many。

示例
将 user 与 dna 之间的关系声明为 one_to_one:
explore: user {
join: dna {
sql_on: ${user.dna_id} = ${dna.id} ;;
relationship: one_to_one
}
}
将 order 与 user 之间的关系声明为 many_to_one:
explore: order {
join: user {
sql_on: ${order.user_id} = ${user.id} ;;
relationship: many_to_one
}
}
将 order 与 item 之间的关系声明为 one_to_many:
explore: order {
join: item {
sql_on: ${order.order_id} = ${item.order_id} ;;
relationship: one_to_many
}
}
将 student 与 class 之间的关系声明为 many_to_many:
explore: student {
join: class {
sql_on: ${student.student_id} = ${class.student_id} ;;
relationship: many_to_many
}
}
将 user 与 user_type 之间的关系声明为 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
}
}