# When

Il prefisso e suffisso when viene utilizzato per creare una clausola condizionale che determina se eseguire o meno un'istruzione oppure una clausola exit. Può essere considerato come un'alternativa compatta all'istruzione completa if..end if.

Sintassi:

(when condition statement | exitstatement when condition )

Tipo di dati restituiti: Boolean

In Qlik Sense, il valore booleano vero è rappresentato da -1 e il valore falso è rappresentato da 0.

Le istruzioni statement o exitstatement vengono eseguite solamente se la condizione viene valutata essere TRUE.

Il prefisso `When` può essere utilizzato con istruzioni che presentano già almeno un’altra istruzione, inclusi i prefissi addizionali `When` o `Unless`.

Quando utilizzare il prefisso When

L'istruzione `When` restituisce un risultato booleano. In genere, questo tipo di funzione viene utilizzata come condizione quando l'utente desidera caricare o escludere parti di uno script.

Argomenti

| Argomento | Descrizione |
| --- | --- |
| condition | Un'espressione logica che restituisce un valore TRUE o FALSE |
| statement | Qualsiasi istruzione dello script di Qlik Sense, ad eccezione delle istruzioni di controllo. |
| exitstatement | Una clausola exit for, exit do o exit sub oppure un'istruzione exit script. |

## Impostazioni locali

Se non diversamente specificato, gli esempi di questo argomento utilizzano il seguente formato di data: MM/DD/YYYY. Il formato della data viene specificato nell'istruzione `SET DateFormat` nello script di caricamento dei dati. La formattazione predefinita della data potrebbe essere diversa nel proprio sistema, a causa delle impostazioni regionali e di altri fattori. È possibile modificare i formati degli esempi seguenti in base alle proprie esigenze. In alternativa, è possibile modificare i formati nel proprio script di caricamento per adattarli a questi esempi. Per ulteriori informazioni, vedere [Modifica delle impostazioni internazionali per applicazioni e script](https://help.qlik.com/it-IT/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm).

Le impostazioni regionali predefinite nelle applicazioni si basano sul profilo utente. Queste impostazioni di formato regionale non riguardano la lingua visualizzata nell'interfaccia utente Qlik Cloud. Qlik Cloud verrà visualizzato nella stessa lingua del browser utilizzato.

Se si è un creatore di applicazioni, è possibile impostare la regione predefinita per le applicazioni che si creano. Per ulteriori informazioni, vedere [Regolazione delle impostazioni internazionali preferite per la creazione di app e script in Qlik Cloud Analytics](https://help.qlik.com/it-IT/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting).

Esempi di funzioni

| Esempio | Risultato |
| --- | --- |
| ` exit script when A=1;  ` | Quando l'istruzione `A=1` viene valutata come TRUE, lo script si interrompe. |
| `when A=1 LOAD * from myfile.csv;` | Quando l'istruzione `A=1` viene valutata come TRUE, viene caricato `myfile.csv`. |
| `when A=1 unless B=2 drop table Tab1;` | Quando l'istruzione `A=1` viene valutata come TRUE e se `B=2` viene valutato come FALSE, la tabella `Tab1` viene eliminata. |

## Esempio 1 – Prefisso When

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

#### Script di caricamento e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* Un set di dati con date e importi che viene inviato a una tabella denominata '`Transactions`'.

* L'istruzione `Let` che afferma che la variabile `A` è stata creata e ha il valore di `1`.

* La condizione `When` che fornisce la condizione che se `A` è uguale a `1`, allora lo script continuerà a essere caricato.

Script di caricamento

```
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 
]; 
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

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

Tabella dei risultati

| id | date | importo |
| --- | --- | --- |
| 1 | 30/08/2018 | 23,56 |
| 2 | 09/07/2018 | 556,31 |
| 3 | 16/09/2018 | 5,75 |
| 4 | 22/09/2018 | 125,00 |
| 5 | 22/09/2018 | 484,21 |
| 6 | 22/09/2018 | 59,18 |
| 7 | 09/23/2018 | 177.42 |

Poiché alla variabile `A` viene assegnato il valore di `1` all'inizio dello script, la condizione che segue il prefisso `When` viene valutata e restituisce un risultato di TRUE. Poiché il risultato è TRUE, lo script continua a eseguire l'istruzione LOAD. È possibile visualizzare tutti i record della tabella dei risultati.

Se il valore di questa variabile fosse impostato su un valore diverso da `1`, non verrebbero caricati dati nel modello dati.

## Esempio 2 – Suffisso When

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

#### Script di caricamento e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* Tre set di dati con date e importi che vengono inviati a una tabella denominata '`Transactions`'.

  * Il primo set di dati contiene le transazioni 1-7.

  * Il secondo set di dati contiene le transazioni 8-14.

  * Il terzo set di dati contiene le transazioni 15-21.

* Una condizione `When` che determina se la tabella '`Transactions`' contiene più di dieci righe. Se una qualsiasi delle istruzioni `When` viene valutata come TRUE, lo script di caricamento si interrompe. Questa condizione è posta alla fine di ciascuno dei tre set di dati.

Script di caricamento

```
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 ; 
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere tali campi come dimensioni:

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

Tabella dei risultati

| id | date | importo |
| --- | --- | --- |
| 1 | 30/08/2018 | 23,56 |
| 2 | 09/07/2018 | 556,31 |
| 3 | 16/09/2018 | 5,75 |
| 4 | 22/09/2018 | 125,00 |
| 5 | 22/09/2018 | 484,21 |
| 6 | 22/09/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 |

Ciascuno dei tre set di dati contiene sette transazioni. Il primo set di dati contiene le transazioni 1-7 e viene caricato nell'applicazione. La condizione `When` che segue l'istruzione di caricamento viene valutata come FALSE perché nella tabella '`Transactions`' sono presenti meno di dieci righe. Lo script di caricamento continua con il set di dati successivo.

Il secondo set di dati contiene le transazioni 8-14 e viene caricato nell'applicazione. La seconda condizione `When` viene valutata come TRUE perché ci sono più di dieci righe nella tabella '`Transactions`'. Pertanto, lo script termina.

## Esempio 3 - Prefissi When multipli

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

#### Script di caricamento e risultati

Panoramica

Aprire l'Editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova sezione.

Lo script di caricamento contiene:

* Un set di dati contenente una singola transazione viene creato come tabella chiamata '`Transactions`'.

* Un ciclo `For` che viene attivato contiene due condizioni nidificate `When` che valutano se:

  1. Vi sono meno di `100` record nella tabella '`Transactions`'.

  2. Il numero di record nella tabella '`Transactions`' non sia un multiplo di `6`

Script di caricamento

```
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 
```

Risultati

Caricare i dati e aprire un foglio. Creare una nuova tabella e aggiungere questo campo come dimensione:

* `id`

La tabella dei risultati mostra solo i primi cinque ID di transazione, ma lo script di caricamento crea 36 righe e termina una volta soddisfatta la condizione `When`.

Tabella dei risultati

| id |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| +30 righe in più |

Le condizioni `When` nidificate nel ciclo `For` valutano le seguenti domande:

* Sono presenti meno di 100 righe nella tabella '`Transactions`'?

* Il numero totale di record nella tabella '`Transactions`' non è un multiplo di sei?

Ogni volta che entrambe le condizioni `When` restituiscono un valore TRUE, vengono generati altri sette record e concatenati alla tabella '`Transactions`' esistente.

Le condizioni `When` restituiscono un valore TRUE per cinque volte. A questo punto, nella tabella '`Transactions`' vi è un totale di 36 righe di dati.

Quando vengono create 36 righe di dati nella tabella '`Transactions`', la seconda istruzione `When` restituisce il valore FALSE, pertanto l'istruzione LOAD successiva non viene più eseguita.