用途
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
}
}
この例の user ビューのように、ビューが Explore に直接結合されている場合、関係は Explore から結合されたビューになります。ここでは、1 人のユーザーに対して複数の注文が存在する可能性があることを示しています。
ビューが別のビューを介して Explore に結合される場合(この例では user_facts が user を介して order に結合される場合など)、定義されるリレーションシップは、中間ビュー(user)から最終ビュー(user_facts)へのリレーションシップです。この例では、1 つのユーザー事実レコードに 1 人のユーザーが存在すると定義しています。
relationship に指定できる値については、このページの次のセクションで説明します。
one_to_one
Explore の 1 つの行が結合されたビューの 1 つの行にのみ一致する場合、関係は one_to_one です。たとえば、user_facts 結合ビューを含む user Explore は one_to_one になります。これは、両方のテーブルにユーザーごとに 1 つの行があるためです。
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 になります。これは、1 つの注文に複数のアイテムを含めることができるためです。

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