# When

O prefixo e o sufixo when são utilizados para criar uma cláusula condicional que determina se um comando ou uma cláusula exit deve ser executada. Pode ser considerado como uma alternativa compacta do comando if..end if.

Sintaxe:

(when condition statement | exitstatement when condition )

Tipo de dados de retorno: Booleano

No Qlik Sense, o valor booleano “true” é representado por -1, e o valor falso é representado por 0.

A instrução ou a instrução de saída apenas será executada se a condição for avaliada como TRUE.

O prefixo `Unless` pode ser utilizado em comandos que já possuem um ou vários outros comandos, inclusive prefixos adicionais `When` ou `When`.

Quando usar

A instrução `When` retorna um resultado booleano. Normalmente, esse tipo de função será usado como uma condição quando o usuário quiser carregar ou excluir partes de um script.

Argumentos

| Argumento | Descrição |
| --- | --- |
| condition | Uma expressão lógica que é avaliada como TRUE ou FALSE |
| statement | Qualquer comando de script do Qlik Sense, exceto os de controle. |
| exitstatement | Uma cláusula exit for, exit do ou exit sub ou um comando exit script. |

## Configurações regionais

A menos que especificado de outra forma, os exemplos neste tópico usam o seguinte formato de data: MM/DD/AAAA. O formato de data é especificado na instrução `SET DateFormat` no seu script de carregamento de dados. A formatação de data padrão pode ser diferente no seu sistema devido às suas configurações regionais e outros fatores. Você pode alterar os formatos nos exemplos abaixo para atender às suas necessidades. Ou pode alterar os formatos no seu script de carregamento para corresponder a esses exemplos.

As configurações regionais padrão nos aplicativos são baseadas nas configurações regionais do sistema do computador ou servidor em que o Qlik Sense está instalado. Se o servidor Qlik Sense que você está acessando estiver definido como Suécia, o Editor de carregamento de dados usará as configurações regionais suecas para datas, horas e moedas. Essas configurações de formato regional não estão relacionadas ao idioma exibido na interface do usuário do Qlik Sense. O Qlik Sense será exibido no mesmo idioma do navegador que você está usando.

Exemplos de funções

| Exemplo | Resultado |
| --- | --- |
| ` exit script when A=1;  ` | Quando a instrução `A=1` for avaliada como TRUE, o script será interrompido. |
| `when A=1 LOAD * from myfile.csv;` | Quando a instrução `A=1` for avaliada como TRUE, o `myfile.csv` será carregado. |
| `when A=1 unless B=2 drop table Tab1;` | Quando a instrução `A=1` for avaliada como TRUE e `B=2` for avaliada como FALSE, a tabela `Tab1` será descartada. |

## Exemplo 1: prefixo “when”

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados com datas e valores que é enviado para uma tabela denominada "`Transactions`".

* A instrução `Let` que afirma que a variável `A` foi criada e tem o valor de `1`.

* A condição `When` que fornece a condição de que, se `A` for igual `1`, o script continuará sendo carregado.

Script de carregamento

```
LET A = 1; 

WHEN A = 1 
 
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `id`
* `date`
* `amount`

Tabela de resultados

| id | data | quantidade |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |

Como a variável `A` recebe o valor de `1` no início do script, a condição após o prefixo `When` é avaliada e retorna o resultado TRUE. Como ela retorna um resultado TRUE, o script continua executando a instrução de carregamento. Todos os registros da tabela de resultados podem ser vistos.

Se esse valor de variável fosse definido como qualquer valor diferente de `1`, nenhum dado seria carregado no modelo de dados.

## Exemplo 2: sufixo “when”

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Três conjuntos de dados com datas e valores enviados para uma tabela denominada “`Transactions`”.

  * O primeiro conjunto de dados contém transações de 1 a 7.

  * O segundo conjunto de dados contém transações de 8 a 14.

  * O terceiro conjunto de dados contém transações de 15 a 21.

* Uma condição `When` que determina se a tabela “`Transactions`” contém mais de dez linhas. Se alguma das instruções `When` for avaliada como TRUE, o script de carregamento será interrompido. Essa condição é colocada no final de cada um dos três conjuntos de dados.

Script de carregamento

```
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 

Concatenate
LOAD 
*  
Inline [ 
id, date, amount 
8, 10/01/2018, 164.27 
9, 10/03/2018, 384.00 
10, 10/06/2018, 25.82 
11, 10/09/2018, 312.00 
12, 10/15/2018, 4.56 
13, 10/16/2018, 90.24 
14, 10/18/2018, 19.32 
]; 

exit script when NoOfRows('Transactions') > 10 ; 
 
Concatenate 
LOAD 
*  
Inline [ 
id, date, amount 
15, 10/01/2018, 164.27 
16, 10/03/2018, 384.00 
17, 10/06/2018, 25.82 
18, 10/09/2018, 312.00 
19, 10/15/2018, 4.56 
20, 10/16/2018, 90.24 
21, 10/18/2018, 19.32 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esses campos como dimensões:

* `id`
* `date`
* `amount`

Tabela de resultados

| id | data | quantidade |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |
| 8 | 10/01/2018 | 164.27 |
| 9 | 10/03/2018 | 384.00 |
| 10 | 10/06/2018 | 25.82 |
| 11 | 10/09/2018 | 312.00 |
| 12 | 10/15/2018 | 4.56 |
| 13 | 10/16/2018 | 90.24 |
| 14 | 10/18/2018 | 19.32 |

Há sete transações em cada um dos três conjuntos de dados. O primeiro conjunto de dados contém a transação de 1 a 7 e é carregado no aplicativo. A condição `When` após essa instrução de carregamento é avaliada como FALSE, porque há menos de dez linhas na tabela “`Transactions`”. O script de carregamento continua até o próximo conjunto de dados.

O segundo conjunto de dados contém a transação de 8 a 14 e é carregado no aplicativo. A segunda condição `When` é avaliada como TRUE porque há mais de dez linhas na tabela “`Transactions`”. Portanto, o script é encerrado.

## Exemplo 3: vários prefixos “when”

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/When.htm)

#### Script de carregamento e resultados

Visão geral

Abra o editor da carga de dados e adicione o script de carregamento abaixo em uma nova guia.

O script de carregamento contém:

* Um conjunto de dados contendo uma única transação é criado como uma tabela denominada “`Transactions`”.

* Um loop `For` que é acionado contém duas condições `When` aninhadas que avaliam se:

  1. Há menos de `100` registros na tabela “`Transactions`”.

  2. O número de registros na tabela “`Transactions`” não é múltiplo de `6`.

Script de carregamento

```
RowsCheck = NoOfRows('Transactions') < 100 or mod(NoOfRows('Transactions'),6) <> 0;
Transactions: 
Load 
	0 as id 
Autogenerate 1; 
For i = 1 to 100 
	when(RowsCheck)
		Concatenate 
	Load 
		if(isnull(Peek(id)),1,peek(id)+1) as id 
	Autogenerate 7;     
next i 
```

Resultados

Carregue os dados e abra uma pasta. Crie uma nova tabela e adicione esse campo como uma dimensão:

* `id`

A tabela de resultados mostra apenas os primeiros cinco IDs de transação, mas o script de carregamento cria 36 linhas e depois termina quando a condição `When` é atendida.

Tabela de resultados

| id |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| Mais de 30 linhas |

As condições `When` aninhadas no loop `For` avaliam as seguintes perguntas:

* Há menos de 100 linhas na tabela “`Transactions`”'?

* O número total de registros na tabela “`Transactions`” não é múltiplo de seis?

Sempre que ambas as condições `When` retornam um valor TRUE, mais sete registros são gerados e concatenados na tabela “`Transactions`” existente.

As condições `When` retornam um valor TRUE cinco vezes. Nesse ponto, há um total de 36 linhas de dados na tabela “`Transactions`”.

Quando 36 linhas de dados são criadas na tabela “`Transactions`”, a segunda instrução `When` retorna um valor FALSE e, portanto, a instrução de carregamento seguinte não será mais executada.