用量
join: view_name_2 {
关系: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
。例如,包含 dna
联接视图的 user
探索将为 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
。例如,如果视图包含 item
视图,order
探索将为 one_to_many
。
多对多
如果“探索”中的许多行都可以与联接视图中的许多行匹配,则关系为 many_to_many
。例如,如果架构是与下个示例类似的,那么 student
探索与 class
联接视图可能为 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
}
}