关系

用法

explore: view_name {
  join: view_name_2 {
    relationship: 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

如果探索中的一行只能与联接视图中的一行匹配,则关系为 one_to_one。例如,如果 user 探索具有 user_facts 联接视图,则为 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

如果探索中的一行可以与联接视图中的多行匹配,则关系为 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

示例

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