# When

Prefixet eller suffixet when används för att skapa en villkorssats, som bestämmer om en sats eller ett exit-tillägg ska exekveras eller ej. Det kan ses som ett kompakt alternativ till en fullständig if..end if-sats.

Syntax:

(when condition statement | exitstatement when condition )

Returnerad datatyp: Booleansk

I Qlik Sense, representeras det booleska sanna värdet av -1, och det falska värdet representeras av 0.

statement eller exitstatement exekveras bara om villkoret utvärderas till TRUE.

Prefixet `When` får användas även om satsen redan har en eller flera andra satser, inklusive ytterligare `When`- eller `Unless`-prefix.

Användning

Satsen `When` returnerar ett booleskt resultat. Den här typen av funktion används typiskt som ett villkor när användaren vill ladda eller utesluta delar av skriptet.

Argument

| Argument | Beskrivning |
| --- | --- |
| condition | Ett logiskt uttryck som utvärderas till TRUE eller FALSE |
| statement | Alla Qlik Sense-skriptsatser utom kontrollsatser. |
| exitstatement | Ett exit for-, exit do- eller exit sub-tillägg eller en exit script-sats. |

## Lokala inställningar

Om inget annat anges använder exemplen i detta ämne följande datumformat: MM/DD/ÅÅÅÅ. Datumformatet anges i `SET DateFormat`-satsen i datainläsningsskriptet. Förvald datumformatering kan vara annorlunda i ditt system, på grund av dina regionala inställningar och andra faktorer. Du kan ändra formaten i exemplen nedan så att det passar dina krav. Eller så kan du ändra formaten i ditt laddningsskript så att de matchar dessa exempel.

Standardregionalinställningar i appar baseras på de regionala systeminställningarna för datorn eller servern där Qlik Sense är installerad. Om Qlik Sense-servern du ansluter till är inställd på Sverige så kommer skriptredigeraren använda regionala inställningar för Sverige för datum, tid och valuta. Dessa regionala formatinställningar är inte relaterade till språket som visas i Qlik Sense användargränssnittet. Qlik Sense kommer att visas på samma språk som webbläsaren du använder.

Exempel på funktioner

| Exempel | Resultat |
| --- | --- |
| ` exit script when A=1;  ` | När satsen `A=1` utvärderas till TRUE stannar skriptet. |
| `when A=1 LOAD * from myfile.csv;` | När satsen `A=1` utvärderas till TRUE körs `myfile.csv`. |
| `when A=1 unless B=2 drop table Tab1;` | När satsen `A=1` utvärderas till TRUE och om `B=2` utvärderas till FALSE kommer `Tab1`-tabellen att släppas. |

## Exempel 1 – when-prefix

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

#### Laddningsskript och resultat

Översikt

Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.

Laddningsskriptet innehåller:

* En datauppsättning med datum och belopp som skickas till en tabell som heter `Transactions`.

* `Let`-satsen som anger att variabeln `A` skapas och har värdet `1`.

* `When`-villkoret som tillhandahåller villkoret att om `A` är lika med `1` kommer skriptet att fortsätta att laddas.

Laddningsskript

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

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

Resultattabell

| id | datum | belopp |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556,31 |
| 3 | 09/16/2018 | 5,75 |
| 4 | 2018-09-22 | 125,00 |
| 5 | 22/09/2018 | 484,21 |
| 6 | 22/09/2018 | 59,18 |
| 7 | 23/09/2018 | 177,42 |

Eftersom variabel `A` tilldelas värdet `1` när skriptet startar kommer villkoret som följer efter prefix `When` utvärderas, vilket returnerar resultatet TRUE. Eftersom den returnerar resultatet TRUE kommer skriptet att fortsätta att köra laddningssatsen. Alla poster från resultattabellen visas.

Om den här variabelns värde har satts till något värde som inte är `1` kommer inga data att laddas till datamodellen.

## Exempel 2 – when-prefix

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

#### Laddningsskript och resultat

Översikt

Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.

Laddningsskriptet innehåller:

* Tre datauppsättningar med datum och belopp som skickas till en tabell som heter `Transactions`.

  * Den första datauppsättningen innehåller transaktionerna 1–7.

  * Den första datauppsättningen innehåller transaktionerna 8–14.

  * Den första datauppsättningen innehåller transaktionerna 15–21.

* Ett `When`-villkor som avgör om `Transactions`-tabellen innehåller fler än tio rader. Om någon av `When`-satserna utvärderas till TRUE stannar laddningsskriptet. Villkoret placeras på slutet av var och en av de tre datauppsättningarna.

Laddningsskript

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till dessa fält som dimensioner:

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

Resultattabell

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

Det finns sju transaktioner i var och en av de tre datauppsättningarna. Den första datauppsättningen innehåller transaktion 1–7 och laddas till applikationen. `When`-villkoret som följer efter denna laddningssats utvärderas som FALSE eftersom det finns färre än tio rader i `Transactions`-tabellen. Laddningsskriptet fortsätter till nästa datauppsättning.

Den andra datauppsättningen innehåller transaktion 8–14 och laddas till applikationen. Det andra `When`-villkoret utvärderas som TRUE eftersom det finns fler än tio rader i `Transactions`-tabellen. Därför avslutas skriptet.

## Exempel 3 – flera when-prefix

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

#### Laddningsskript och resultat

Översikt

Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.

Laddningsskriptet innehåller:

* En datauppsättning som innehåller en enda transaktion skaps som en tabell som heter `Transactions`.

* En `For`-slinga som utlöses innehåller två nästlade `When`-villkor som utvärderar huruvida:

  1. Det finns färre än `100` poster i `Transactions`-tabellen.

  2. Antalet poster i `Transactions`-tabellen är inte en multipel av `6`.

Laddningsskript

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

Resultat

Ladda data och öppna ett ark. Skapa en ny tabell och lägg till det här fältet som en dimension:

* `id`

I resultattabellen visas bara de fem första transaktions-ID, men laddningsskriptet skapar 36 rader och avslutas sedan när `When`-villkoret är uppfyllt.

Resultattabell

| id |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| ytterligare 30+ rader |

De nästlade `When`-villkoren i `For`-loopen utvärderar följande frågor:

* Finns det färre än 100 rader i `Transactions`-tabellen?

* Är det totala antalet poster i `Transactions`-tabellen inte en multipel av sex?

När båda `When`-villkoren returnerar värdet TRUE genereras ytterligare sju poster som konkateneras till den befintliga `Transactions`-tabellen.

`When`-villkoren returnerar ett TRUE-värde fem gånger. Det finns nu 36 rader med data i `Transactions`-tabellen.

När 36 rader med data har skapats i `Transactions`-tabellen returnerar den andra `When`-satsen värdet FALSE, och därför kommer den efterföljande load-satsen inte längre att exekveras.