relationship

用量

探索:view_name {
join: view_name_2 {
关系one_to_one
}
}
层次结构
relationship
默认值
many_to_one

接受
关系(many_to_onemany_to_manyone_to_manyone_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_manymany_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

示例

userdna 的关系声明为 one_to_one

explore: user {
  join: dna {
    sql_on: ${user.dna_id} = ${dna.id} ;;
    relationship: one_to_one
  }
}

orderuser 的关系声明为 many_to_one

explore: order {
  join: user {
    sql_on: ${order.user_id} = ${user.id} ;;
    relationship: many_to_one
  }
}

orderitem 的关系声明为 one_to_many

explore: order {
  join: item {
    sql_on: ${order.order_id} = ${item.order_id} ;;
    relationship: one_to_many
  }
}

studentclass 的关系声明为 many_to_many

explore: student {
  join: class {
    sql_on: ${student.student_id} = ${class.student_id} ;;
    relationship: many_to_many
  }
}

useruser_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
  }
}