As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
ifelse
avalia um conjunto de pares de expressão if, then e retorna o valor do argumento then para o primeiro argumento if que for verdadeiro. Se nenhum dos argumentos if for verdadeiro, será retornado o valor do argumento else.
Sintaxe
ifelse(
if-expression-1
,then-expression-1
[,if-expression-n
,then-expression-n
...],else-expression
)
Argumentos
ifelse
requer um ou mais pares de expressão if, then e exige exatamente uma expressão para o argumento else.
- if-expression
-
A expressão a ser avaliada como verdadeira ou não. Pode ser um nome de campo, como
address1
, um valor literal, como'Unknown'
, ou outra função, comotoString(salesAmount)
. Um exemplo éisNotNull(FieldName)
.Se você usar vários operadores AND e OR no argumento
if
, coloque parênteses nas instruções para identificar a ordem de processamento. Por exemplo, o argumentoif
a seguir retorna registros com um mês de 1, 2 ou 5 e um ano de 2000.ifelse((month = 5 OR month < 3) AND year = 2000, 'yes', 'no')
O próximo argumento
if
usa os mesmos operadores, mas retorna registros com um mês de 5 e qualquer ano, ou com um mês de 1 ou 2 e um ano de 2000.ifelse(month = 5 OR (month < 3 AND year = 2000), 'yes', 'no')
- then-expression
-
A expressão a ser retornada se o respectivo argumento if for avaliado como verdadeiro. Pode ser um nome de campo, como
address1
, um valor literal, como'Unknown'
, ou uma chamada para outra função. A expressão deve ter o mesmo tipo de dados que os outros argumentosthen
e o argumentoelse
. - else-expression
-
A expressão a ser retornada se nenhum dos argumentos if for avaliado como verdadeiro. Pode ser um nome de campo, como
address1
, um valor literal, como'Unknown'
, ou outra função, comotoString(salesAmount)
. A expressão deve ter o mesmo tipo de dados que todos os argumentosthen
.
Tipo de retorno
ifelse
retorna um valor do mesmo tipo de dados que os valores em then-expression. Todos os dados que retornam as expressões then e else devem ser do mesmo tipo de dados ou ser convertidos no mesmo tipo de dados.
Exemplos
O exemplo a seguir gera uma coluna de aliases para o campo country
.
ifelse(country = "United States", "US", country = "China", "CN", country = "India", "IN", "Others")
Para esses casos de uso, avaliar cada valor em um campo em relação a uma lista de literais e retornar o resultado correspondente ao primeiro valor compatível, a troca de função é recomendada para simplificar seu trabalho. O exemplo anterior pode ser reescrito para a seguinte declaração usando switch:
switch(country,"United States","US","China","CN","India","IN","Others")
O exemplo a seguir categoriza as vendas por cliente em níveis legíveis para humanos.
ifelse(salesPerCustomer < 1000, “VERY_LOW”, salesPerCustomer < 10000, “LOW”, salesPerCustomer < 100000, “MEDIUM”, “HIGH”)
O exemplo a seguir usa E, OU e NÃO para comparar várias expressões usando operadores condicionais para marcar os principais clientes que NÃO são de Washington ou Oregon com uma promoção especial, e que fizeram mais de 10 pedidos. Se nenhum valor for retornado, o valor 'n/a'
será usado.
ifelse(( (NOT (State = 'WA' OR State = 'OR')) AND Orders > 10), 'Special Promotion XYZ', 'n/a')
Os exemplos a seguir usam somente OR para gerar uma nova coluna que contém o nome do continente que corresponde a cada country
.
ifelse(country = "United States" OR country = "Canada", "North America", country = "China" OR country = "India" OR country = "Japan", "Asia", "Others")
O exemplo anterior pode ser simplificado conforme mostrado no próximo exemplo. O exemplo a seguir usa ifelse
e in para criar um valor em uma nova coluna para qualquer linha em que o valor testado esteja em uma lista literal. Você também pode usar ifelse
com notIn.
ifelse(in(country,["United States", "Canada"]), "North America", in(country,["China","Japan","India"]),"Asia","Others")
Os autores podem salvar uma lista literal em um parâmetro de vários valores e usá-la nas funções in ou notIn. O exemplo a seguir é equivalente ao exemplo anterior, exceto que as listas literais são armazenadas em dois parâmetros de vários valores.
ifelse(in(country,${NorthAmericaCountryParam}), "North America", in(country,${AsiaCountryParam}),"Asia", "Others")
O exemplo a seguir atribui um grupo a um registro de vendas com base no total de vendas. A estrutura de cada frase if-then
imita o comportamento de between, uma palavra-chave que atualmente não funciona em expressões de campo calculado. Por exemplo, o resultado da comparação salesTotal >= 0 AND salesTotal < 500
retorna os mesmos valores da comparação salesTotal between 0 and 499
do SQL.
ifelse(salesTotal >= 0 AND salesTotal < 500, 'Group 1', salesTotal >= 500 AND salesTotal < 1000, 'Group 2', 'Group 3')
O exemplo a seguir testa um valor NULL usando coalesce
para retornar o primeiro valor que não é NULL. Em vez de precisar lembrar o significado de um NULL em um campo de data, você pode usar uma descrição legível. Se a data de desconexão for NULL, o exemplo retornará a data de suspensão, a menos que ambas sejam NULL. Em seguida, coalesce(DiscoDate, SuspendDate, '12/31/2491')
retorna '12/31/2491'
. O valor de retorno deve corresponder aos outros tipos de dados. Essa data pode parecer um valor incomum, mas uma data no século XXV simula razoavelmente o “fim dos tempos”, definido como a data mais alta em um data mart.
ifelse ( (coalesce(DiscoDate, SuspendDate, '12/31/2491') = '12/31/2491'), 'Active subscriber', 'Inactive subscriber')
A seguir, você verá um exemplo mais complexo em um formato mais legível, apenas para mostrar que você não precisa compactar todo o código em uma linha longa. Este exemplo fornece várias comparações do valor resultante de uma pesquisa. Ele lida com possíveis valores NULL para esse campo e categoriza dois intervalos aceitáveis. Além disso, rotula um intervalo que precisa de mais testes e outro que não é válido (fora do intervalo). Para todos os valores restantes, ele aplica a condição else
e rotula a linha como precisando de um novo teste três anos após a data dessa linha.
ifelse
(
isNull({SurveyResult}), 'Untested',
{SurveyResult}=1, 'Range 1',
{SurveyResult}=2, 'Range 2',
{SurveyResult}=3, 'Need more testing',
{SurveyResult}=99, 'Out of Range',
concat
(
'Retest by ',
toString
(
addDateTime(3, "YYYY", {Date})
)
)
)
O exemplo a seguir atribui um nome de região criado “manualmente” a um grupo de estados. Ele também usa espaçamento e comentários, agrupados em /* */
, para facilitar a manutenção do código.
ifelse
( /* NE REGION*/
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0,
'Northeast',
/* SE REGION*/
locate('Georgia, Alabama, South Carolina, Louisiana',{State}) > 0,
'Southeast',
'Other Region'
)
A lógica da marcação de regiões é dividida da seguinte forma:
-
Listamos os estados que queremos para cada região, colocando cada lista entre aspas para transformar cada lista em uma string, da seguinte forma:
-
'New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire'
-
'Georgia, Alabama, South Carolina, Louisiana'
-
Você pode adicionar mais conjuntos ou usar países, cidades, províncias ou What3Words, se quiser.
-
-
Perguntamos se o valor de
State
(para cada linha) é encontrado na lista, usando a funçãolocate
para retornar um valor diferente de zero se o estado for encontrado na lista, como mostrado a seguir.locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) and locate('Georgia, Alabama, South Carolina, Louisiana',{State})
-
A função
locate
retorna um número em vez de umTRUE
ouFALSE
, masifelse
requer o valor booleanoTRUE
eFALSE
. Para contornar isso, podemos comparar o resultado delocate
com um número. Se o estado estiver na lista, o valor de retorno será maior que zero.-
Pergunte se o estado está presente.
locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
-
Se a região estiver presente, rotule-a como a região específica, neste caso, uma região Nordeste.
/*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast',
-
-
Como temos estados que não estão em uma lista e porque
ifelse
exige uma única expressãoelse
, fornecemos'Other Region'
como o rótulo para os estados restantes./*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*The else expression:*/ 'Other Region'
-
Agrupamos tudo isso na função
ifelse( )
para obter a versão final. O exemplo a seguir omite os estados da região Sudeste que estavam no original. Você pode adicioná-los novamente no lugar da tag
.<insert more regions here>
Se quiser adicionar mais regiões, você pode criar mais cópias dessas duas linhas e alterar a lista de estados de acordo com sua finalidade. Você pode alterar o nome da região para algo que lhe agrade e mudar o nome do campo de
State
para qualquer coisa que precisar.ifelse ( /*The if expression:*/ locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0, /*The then expression:*/ 'Northeast', /*
<insert more regions here>
*/ /*The else expression:*/ 'Other Region' )nota
Há outras maneiras de fazer a comparação inicial para a expressão IF. Por exemplo, suponha que você faça a pergunta “Quais estados não estão faltando nessa lista?” em vez de “Quais estados estão na lista?” Se você fizer isso, talvez expresse de forma diferente. Você pode comparar a instrução LOCATE com zero para encontrar valores que estão ausentes na lista e, em seguida, usar o operador NOT para classificá-los como “não ausentes”, como mostrado a seguir.
/*The if expression:*/ NOT (locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) = 0),
Ambas as versões estão corretas. A versão escolhida deve fazer mais sentido para você e sua equipe, para que consiga mantê-la facilmente. Se todas as opções parecerem iguais, escolha a mais simples.