case

Uso

view: view_name {
dimension: field_name {
case: {
when: {
sql: SQL condition ;;
Hierarquia
case
Tipos de campo possíveis
Dimensão

Aceita
Uma condição e uma string SQL

Regras especiais
Use um parâmetro alpha_sort se você quiser os valores em ordem alfabética.

Definição

case permite agrupar os resultados com lógica de caso. Embora seja possível escrever instruções SQL CASE brutas, o uso de case criará um menu suspenso para seus usuários na IU do Looker. Uma instrução CASE do SQL não criará esse menu.

A forma geral de case é:

dimension: status {
  case: {
    when: {
      sql: condition ;;
      label: "Label of Condition"
    }
    # possibly more when statements
    else: "Label If No Condition Met"
  }
}

Esses parâmetros funcionam da seguinte maneira:

  • when: você pode usar quantas instruções when quiser para representar cada condição que vai receber um rótulo. As instruções when são avaliadas em ordem decrescente da primeira até a última listada, e a primeira instrução when avaliada como verdadeira atribui o rótulo associado.
  • sql: o parâmetro sql aceita uma condição SQL que é avaliada como verdadeira ou falsa.
  • label: se a condição SQL for verdadeira, este será o rótulo que será atribuído. O rótulo atribuído tem um tipo de dados de string. O valor de cada label em uma instrução case precisa ser exclusivo. Se você usar o mesmo valor label para várias condições SQL, somente a última condição SQL na instrução case receberá o valor label. Veja exemplos nesta página.
  • else: se nenhuma condição for atendida, este é o rótulo que será usado.

As sugestões apresentadas a um usuário comercial para uma dimensão case não serão restritas ao usar full_suggestions. Todas as opções incluídas em um parâmetro case ficarão visíveis a todos os usuários.

Como escolher a ordem de classificação dos rótulos com alpha_sort

Normalmente, os valores case aparecem na ordem em que são gravados. Se preferir uma classificação alfabética, use alpha_sort: yes desta forma:

dimension: status {
  alpha_sort: yes
  case: { ... }
}

Examples

Atribua vários rótulos legíveis a diferentes números de status:

dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 2 ;;
      label: "returned"
    }
    else: "unknown"
  }
}

Quando a mesma condição é repetida e avaliada como rótulos diferentes, o LookML usa a primeira condição avaliada como verdadeira. No exemplo a seguir, ${TABLE}.status = 0 é avaliado como pending, não returned, já que a condição pending é avaliada primeiro.

dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "returned"
    }
    else: "unknown"
  }
}

Quando várias condições são avaliadas no mesmo rótulo, o LookML usa apenas a primeira. No exemplo a seguir, o Looker usará ${TABLE}.status = 0 em vez de ${TABLE}.status = 2 para gerar a instrução SQL CASE avaliada como pending. Quando ${TABLE}.status = 2, a instrução CASE é interpretada como unknown.

view: orders
dimension: status {
  case: {
    when: {
      sql: ${TABLE}.status = 0 ;;
      label: "pending"
    }
    when: {
      sql: ${TABLE}.status = 1 ;;
      label: "complete"
    }
    when: {
      sql: ${TABLE}.status = 2 ;;
      label: "pending"
    }
    else: "unknown"
  }
}