使用状況
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
}
}
この例の user
ビューのように、ビューが Explore に直接結合されている場合、その関係は Explore から結合ビューまでリレーションです。ここでは、1 人のユーザーに対する多数の注文が存在する可能性があります。
あるビューと別のビューを介して Explore に結合する場合(この例では、user_facts
が user
から order
にどのように結合するか)、中間ビュー(user
)から最終ビュー(user_facts
)までの関係が定義されます。この例では、1 つのユーザー ファクト レコードに対して 1 人のユーザーがいます。
relationship
に指定できる値については、このページの次のセクションで説明します。
one_to_one
Explore 内の 1 行が結合ビュー内の 1 行のみと一致する場合、関係は one_to_one
になります。たとえば、dna
の結合ビューを含む user
Explore は one_to_one
になります。
one_to_one
関係では、テーブルの主キーに null 値が含まれないようにする必要があります。テーブルの主キーまたは両方に null 値がある場合、その関係はmany_to_many
またはmany_to_one
です。
many_to_one(デフォルト値)
Explore の多数の行が、結合されたビューの 1 行と一致する場合、関係は many_to_one
になります。たとえば、結合されたビューが user
の order
Explore は many_to_one
になります。
one_to_many
Explore 内の 1 行が結合ビュー内の複数の行と一致する場合、関係は one_to_many
になります。たとえば、item
の結合ビューを含む order
Explore は one_to_many
になります。
many_to_many
Explore の多数の行が、結合されたビューの多数の行と一致する場合、関係は many_to_many
です。たとえば、class
の結合ビューを含む student
Explore は、スキーマが次のように設計されている場合は 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
}
}