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 になります。たとえば、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 になります。たとえば、結合されたビューが userorder 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 は必要ありません。

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