caso

Uso

view: view_name {
  dimension: field_name {
    case: {
      when: {
        sql: SQL condition ;;
        label: "value"
      }
      # Possibly more when statements
      else: "value"
    }
    alpha_sort:  yes
  }
}
Hierarquia
case
Tipos de campo possíveis
Dimensão

Aceita
Uma condição SQL e uma string

Regras especiais
Use um parâmetro alpha_sort se quiser que os valores sejam organizados em ordem alfabética.

Definição

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

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 em que quer fornecer um rótulo. As instruções when são avaliadas em ordem, da primeira à última, e a primeira instrução when avaliada como verdadeira vai atribuir 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 atribuído. O rótulo atribuído tem um tipo de dados string. O valor de cada label em uma instrução case precisa ser exclusivo. Se você usar o mesmo valor de label para várias condições SQL, apenas a última condição SQL na instrução case vai receber o valor de label. Confira os exemplos nesta página.
  • else: se nenhuma das suas condições for atendida, este será o rótulo usado.

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

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

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

Exemplos

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 com rótulos diferentes, a LookML usa a primeira condição que é avaliada como verdadeira. No exemplo a seguir, ${TABLE}.status = 0 é avaliado como pending e 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 com o mesmo rótulo, o LookML usa apenas a primeira condição. No exemplo a seguir, o Looker vai usar ${TABLE}.status = 0 em vez de ${TABLE}.status = 2 para gerar a instrução SQL CASE que resulta em pending. Quando ${TABLE}.status = 2, a instrução CASE é avaliada 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"
  }
}

Informações importantes

Quando uma dimensão contém um parâmetro case que faz referência a outro campo, esse campo adicional pode ser adicionado ao SQL subjacente de uma consulta em que a dimensão é usada. Se o campo referenciado não estiver presente na visualização da consulta e a visualização for um gráfico de tabela com colunas reorganizadas manualmente, a ordem das colunas em alguns formatos baixados poderá ser afetada.