關係

用量

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 關係要求資料表的主鍵不得有空值。如果資料表的主鍵中有一或多個空值,則關係為 many_to_manymany_to_one

many_to_one (預設值)

如果探索中的多個資料列可以與已彙整檢視區塊中的一個資料列相符,則關係為 many_to_one。舉例來說,如果 order 探索包含 user 聯結檢視區塊,則會變成 many_to_one,因為每位使用者可能有多筆訂單。

one_to_many

如果「探索」中的一個資料列可以比對已彙整檢視區塊中的多個資料列,則關係為 one_to_many。舉例來說,如果 order 探索檢視區塊與 item 聯結,則會是 one_to_many,因為一筆訂單可能包含多個項目。

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