# Unless

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

Sintassi:

(Unless condition statement | exitstatement Unless condition )

L'istruzione statement o exitstatement verrà eseguita solo se condition restituisce False.

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

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

## Casi di utilizzo

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

Le righe seguenti mostrano tre esempi di utilizzo della funzione `Unless`:

`exit script 
 unless A=1;` `unless A=1 
 LOAD  * from myfile.csv;` `unless A=1 
 when B=2 drop table Tab1;`

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

## Esempio 1 - Prefisso Unless

[](https://help.qlik.com/en-US/sense/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptPrefixes/Unless.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:

* La creazione della variabile A, alla quale viene assegnato il valore 1.

* Un set di dati che viene caricato in una tabella denominata Transazioni, a meno che la variabile A = 2.

Script di caricamento

```
LET A = 1;

UNLESS A = 2

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 1 all'inizio dello script, la condizione che segue il prefisso `Unless` viene valutata, restituendo un risultato di `FALSE`. Di conseguenza, lo script continua a eseguire l'istruzione `Load`. Nella tabella dei risultati sono visibili tutti i record della tabella `Transactions`.

Se il valore di questa variabile è impostato su 2, non verranno caricati dati nel modello dati.

## Esempio 2 – Suffisso Unless

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

#### Script di caricamento e risultati

Panoramica

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

Lo script di caricamento dati inizia caricando un set di dati iniziale in una tabella denominata `Transactions`. Lo script viene quindi terminato se non vi sono meno di 10 record nella tabella `Transactions`.

Se questa condizione non porta alla chiusura dello script, un altro set di transazioni viene concatenato nella tabella `Transactions` e il processo viene ripetuto.

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

Sono presenti sette record in ciascuno dei tre set di dati dello script di caricamento.

Il primo set di dati (con le transazioni da `id` 1 a 7) viene caricato nell'applicazione. La condizione `Unless` valuta se nella tabella `Transactions` ci sono meno di 10 righe. La valutazione è pari a `TRUE`, quindi il secondo set di dati (con le transazioni `id` da 8 a 14) viene caricato nell'applicazione. La seconda condizione `Unless` viene valutata se nella tabella `Transactions` sono presenti meno di 10 record. La valutazione è pari a `FALSE`, quindi lo script termina.

## Esempio 3 – Prefissi Unless multipli

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

#### Script di caricamento e risultati

Panoramica

Aprire l'editor caricamento dati e aggiungere lo script di caricamento sotto in una nuova scheda.

In questo esempio, un set di dati contenente una transazione viene creato come tabella chiamata `Transactions`. Viene quindi attivato un ciclo "for", in cui vengono valutate due istruzioni "unless" nidificate:

1. A meno che non ci siano più di 100 record nella tabella `Transactions`

2. A meno che il numero di record nella tabella `Transactions` non sia un multiplo di 6

Se queste condizioni sono `FALSE`, vengono generati altri sette record e concatenati alla tabella `Transactions` esistente. Questo processo viene ripetuto finché una delle due transazioni non restituisce un valore di `TRUE`.

Script di caricamento

```
Transactions:
Load
        0 as id
Autogenerate 1;

For i = 1 to 100
        unless NoOfRows('Transactions') > 100 unless mod(NoOfRows('Transactions'),6) = 0
                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`.

Tabella dei risultati

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

Le istruzioni nidificate unless che si verificano nel ciclo 'for' valutano quanto segue:

1. Sono presenti più di 100 righe nella tabella `Transactions`?

2. Il numero totale di record nella tabella `Transactions` è un multiplo di 6?

Ogni volta che entrambe le istruzioni unless restituiscono un valore di `FALSE`, vengono generati altri sette record e concatenati alla tabella `Transactions` esistente.

Queste istruzioni restituiscono un valore di `FALSE` cinque volte, a questo punto è presente un totale di 36 righe di dati nella tabella `Transactions`.

Dopodiché, la seconda istruzione `Unless` restituisce un valore di `TRUE`, pertanto l'istruzione di caricamento successiva non verrà più eseguita.