

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
<a name="ifelse-function"></a>

`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
<a name="ifelse-function-syntax"></a>

```
ifelse(if-expression-1, then-expression-1 [, if-expression-n, then-expression-n ...], else-expression)
```

## Argumentos
<a name="ifelse-function-arguments"></a>

`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, como `toString(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 argumento `if` 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 argumentos `then` e o argumento `else`. 

 *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, como `toString(salesAmount)`. A expressão deve ter o mesmo tipo de dados que todos os argumentos `then`. 

## Tipo de retorno
<a name="ifelse-function-return-type"></a>

`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
<a name="ifelse-function-example"></a>

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 [https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html](https://docs.aws.amazon.com/quicksight/latest/user/switch-function.html):

```
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 [https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html) 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 [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html).

```
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 [https://docs.aws.amazon.com/quicksight/latest/user/in-function.html](https://docs.aws.amazon.com/quicksight/latest/user/in-function.html) ou [https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html](https://docs.aws.amazon.com/quicksight/latest/user/notIn-function.html). 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:

1. 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. 

1. Perguntamos se o valor de `State` (para cada linha) é encontrado na lista, usando a função `locate` 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})
   ```

1. A função `locate` retorna um número em vez de um `TRUE` ou `FALSE`, mas `ifelse` requer o valor booleano `TRUE` e `FALSE`. Para contornar isso, podemos comparar o resultado de `locate` com um número. Se o estado estiver na lista, o valor de retorno será maior que zero.

   1. Pergunte se o estado está presente.

      ```
      locate('New York, New Jersey, Connecticut, Vermont, Maine, Rhode Island, New Hampshire',{State}) > 0
      ```

   1. 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',
      ```

1. Como temos estados que não estão em uma lista e porque `ifelse` exige uma única expressão `else`, 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'
   ```

1. 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.