relação

Uso

explore: view_name {
  join: view_name_2 {
    relationship: one_to_one
  }
}
Hierarquia
relationship
Valor padrão
many_to_one

Aceita
Um relacionamento (many_to_one, many_to_many, one_to_many, one_to_one)

Definição

Com relationship, é possível descrever a relação join entre as visualizações unidas. É importante definir corretamente o tipo de relacionamento para que o Looker calcule medidas precisas.

Para entender a relação que está sendo definida, considere este exemplo:

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

Quando uma visualização é unida diretamente a uma Análise, como a visualização user neste exemplo, a relação é da Análise para a visualização unida. Estamos dizendo que pode haver muitos pedidos para um usuário.

Quando uma visualização é unida a uma análise detalhada por outra visualização (como user_facts se une por user a order neste exemplo), a relação definida é de a visualização intermediária (user) para a visualização final (user_facts). Neste exemplo, estamos dizendo que há um usuário para um registro de fato do usuário.

Os valores possíveis para relationship estão descritos nestas seções desta página:

one_to_one

Se uma linha na análise só puder corresponder a uma linha na visualização unida, a relação será one_to_one. Por exemplo, uma análise detalhada user com uma visualização mesclada user_facts seria one_to_one, já que ambas as tabelas têm uma linha por usuário.

Um relacionamento one_to_one exige que não haja valores nulos nas chaves primárias das tabelas. Se houver valores nulos em uma ou nas duas chaves primárias das tabelas, a relação será many_to_many ou many_to_one.

many_to_one (valor padrão)

Se muitas linhas na Análise puderem corresponder a uma linha na visualização unida, a relação será many_to_one. Por exemplo, uma Análise order com uma visualização unida user seria many_to_one, porque pode haver vários pedidos por usuário.

one_to_many

Se uma linha na análise detalhada puder corresponder a muitas linhas na visualização unida, a relação será one_to_many. Por exemplo, uma análise order com uma visualização unida item seria one_to_many, porque um pedido pode conter vários itens.

many_to_many

Se muitas linhas na Análise puderem corresponder a muitas linhas na visualização unida, a relação será many_to_many. Por exemplo, uma análise detalhada student com uma visualização combinada class pode ser many_to_many se um estudante tiver várias turmas e uma turma tiver vários estudantes. Na prática, as relações many-to-many são evitadas no design de bancos de dados SQL. Por isso, a maioria dos modelos não precisa de many_to_many.

Exemplos

Declare a relação de user para dna como one_to_one:

explore: user {
  join: dna {
    sql_on: ${user.dna_id} = ${dna.id} ;;
    relationship: one_to_one
  }
}

Declare a relação de order para user como many_to_one:

explore: order {
  join: user {
    sql_on: ${order.user_id} = ${user.id} ;;
    relationship: many_to_one
  }
}

Declare a relação de order para item como one_to_many:

explore: order {
  join: item {
    sql_on: ${order.order_id} = ${item.order_id} ;;
    relationship: one_to_many
  }
}

Declare a relação de student para class como many_to_many:

explore: student {
  join: class {
    sql_on: ${student.student_id} = ${class.student_id} ;;
    relationship: many_to_many
  }
}

Declare a relação de user para user_type como 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
  }
}