# 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: Booleano

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

Casi di utilizzo

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/GG/AAAA. 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.

Le impostazioni regionali predefinite delle app si basano sulle impostazioni regionali del sistema del computer o del server in cui risulta installato Qlik Sense. Se il server Qlik Sense a cui si accede è impostato in Svezia, l'editor caricamento dati utilizzerà le impostazioni regionali svedesi per date, ora e valuta. Queste impostazioni di formato regionale non riguardano la lingua visualizzata nell'interfaccia utente Qlik Sense. Qlik Sense verrà visualizzato nella stessa lingua del browser utilizzato.

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/sense/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 scheda.

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

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/sense/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 scheda.

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

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/sense/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 scheda.

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.