relationship

用途

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 ビューのように、ビューが Explore に直接結合されている場合、関係は Explore から結合されたビューになります。ここでは、1 人のユーザーに対して複数の注文が存在する可能性があることを示しています。

ビューが別のビューを介して Explore に結合される場合(この例では user_factsuser を介して 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 は必要ありません。

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