Função CASE

A função CASE permite que você execute vários testes condicionais em um conjunto de expressões dentro de uma única instrução. Quando um teste é avaliado como true, uma saída correspondente é gerada. As saídas podem ser uma literal ou uma expressão.

Para mais informações sobre a função IF, consulte Função IF.

Uso básico

Exemplo:

derive type:single value:CASE([ Qty <= 10, 'low_qty', Qty >=100, 'high_qty', 'med_qty']) as:'Qty_Eval'

Resultado: gera uma nova coluna Qty_Eval. Cada linha contém uma string de texto com base na avaliação da coluna Qty:

Sintaxe

No exemplo abaixo, se a expressão testX for avaliada como true, o valor resultX será a saída.

  • As expressões de teste são avaliadas na ordem listada.
  • Expressões e resultados de texto são valores pareados em uma matriz.
  • Você precisa incluir uma ou mais expressões de teste.
  • Cada teste precisa incluir uma expressão de resultado. A expressão de resultado pode ser um valor literal ou uma expressão que avalie um valor de um tipo de dados compatível.
  • Se um valor entre aspas for incluído como uma expressão de teste, ele será avaliado como o valor a ser gravado para todos os valores que ainda não corresponderem a um teste (outra expressão).
CASE([test1, 'result1',test2, 'result2', testn, 'resultn','result_else'])
ArgumentoObrigatório?Tipo de dadosDescrição
test1, test2, testnSexpressãoExpressão que é avaliada. Precisa ser resolvida como true ou false
result1, result2, result2, result_elseSstringString entre aspas que é gravada se a expressão de teste correspondente é avaliada como true.

Todas essas expressões podem ser constantes (strings, números inteiros ou qualquer outro valor literal aceito) ou elementos sofisticados de lógica, mas a expressão de teste precisa ser avaliada como um valor booleano.

Para mais informações sobre os padrões de sintaxe, consulte Notas de sintaxe da documentação da linguagem.

test1, test2, testn

Esses parâmetros contêm as expressões a serem avaliadas. Essa expressão precisa ser resolvida com um valor booleano (true ou false).

OBSERVAÇÃO: a sintaxe de uma expressão de teste segue a mesma sintaxe da função IF. Por exemplo, você precisa usar os sinais de duplo igual para comparar valores (status == 'Ok').

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimExpressão avaliada como true ou false(OrderAge > 90)

result1, result2, result2, result_else

Se a expressão de teste correspondente for avaliada como true, esse valor será gravado como o resultado.

Essas expressões podem ser literais de qualquer tipo de dados ou expressões que avaliem para literais de qualquer tipo de dados.

Observações sobre o uso:

Obrigatório?Tipo de dadosValor de exemplo
SimValor literal ou expressão

Consulte os exemplos abaixo.

Exemplos

Exemplo - uso básico

Os dados abaixo representam pedidos recebidos durante a semana. Os descontos são aplicados aos pedidos com base nestas regras:

  • O desconto padrão é de 5%.
  • Se um pedido for inferior a 10 unidades, o desconto é reduzido em 5%.
  • Se um pedido for de mais de 20 unidades, o desconto é aumentado em 5%.
  • O desconto especial de sexta-feira é de 2% a mais do que o desconto padrão.
OrdDateCustIdQtyStd_Disc
5/8/17C00140,05
5/9/17C002110,05
5/10/17C00340,05
5/11/17C001250,05
5/12/17C002190,05


Transformações:

Para determinar o dia da semana, você pode usar esta transformação:

derive type:single value:WEEKDAY(Date)

Você pode criar as regras de desconto na transformação a seguir, que gera a coluna Disc:

derive type:single value:CASE([Qty<10, Std_Disc - 0.05, Qty>=20, Std_Disc + 0.05, weekday_Date == 5, Std_Disc + 0.02, Std_Disc]) as:'Disc'

Resultados:

OrdDateCustIdQtyStd_DiscDisc
5/8/17C00140,050
5/9/17C002110,050,05
5/10/17C00340,050
5/11/17C001250,050,1
5/12/17C002190,050,07

Esta página foi útil? Conte sua opinião sobre:

Enviar comentários sobre…

Documentação do Google Cloud Dataprep
Precisa de ajuda? Acesse nossa página de suporte.