קשר

Usage

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

כשמצטרפים לתצוגה ישירות מ-Explore, כמו התצוגה user בדוגמה הזו, הקשר הוא מ-Explore אל התצוגה שהצטרפה. המשמעות כאן היא שיכולות להיות הרבה הזמנות של משתמש אחד.

כשמצטרפים לתצוגה ב-Explore דרך תצוגה אחרת – כמו במקרה שבו user_facts מצטרף דרך user אל order בדוגמה הזו – הקשר שמוגדר הוא מ התצוגה המתווכת (user) אל התצוגה הסופית (user_facts). בדוגמה הזו, אנחנו אומרים שיש משתמש אחד לכל רשומה של עובדות על משתמש אחד.

הערכים האפשריים של relationship מפורטים בקטעים הבאים בדף הזה:

one_to_one

אם שורה אחת ב-Explore יכולה להתאים רק לשורה אחת בתצוגה המצורפת, הקשר הוא 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. לדוגמה, ניתוח ב-order Explore עם תצוגה מצורפת של user יהיה many_to_one, כי יכול להיות שיש כמה הזמנות לכל משתמש.

one_to_many

אם שורה אחת בניתוח יכולה להתאים להרבה שורות בתצוגה המצורפת, הקשר הוא one_to_many. לדוגמה, דוח Explore עם תצוגה משולבת של order וitem יהיה one_to_many, כי הזמנה אחת יכולה לכלול כמה פריטים.

many_to_many

אם הרבה שורות בתצוגה 'ניתוח נתונים' יכולות להתאים להרבה שורות בתצוגה המצורפת, סוג הקשר הוא many_to_many. לדוגמה, student Explore עם class תצוגה משולבת יכול להיות many_to_many אם לתלמיד יש כמה כיתות ובכיתה יש כמה תלמידים. בפועל, בדרך כלל נמנעים מיצירת קשרים מסוג many-to-many בעיצוב מסדי נתונים של SQL, ולכן ברוב המודלים אין צורך בקשרים מסוג 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
  }
}