# Unless

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

Syntax:

(Unless condition statement | exitstatement Unless condition )

statement eller exitstatement exekveras bara om condition utvärderas till False.

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

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

## Användning

Satsen `Unless` 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 beroende på vissa villkor.

I följande rader visas tre exempel på hur `Unless`-funktionen kan användas:

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

## 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 1 – unless-prefix

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

#### Laddningsskript och resultat

Översikt

Öppn skriptredigeraren och lägg till laddningsskriptet nedan till en ny flik.

Laddningsskriptet innehåller:

* En variabel A skapas, som får värdet 1.

* En datauppsättning som laddas till en tabell som heter transaktioner, såvida inte variabel A = 2.

Laddningsskript

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

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

Eftersom variabel A tilldelas värdet 1 när skriptet startar kommer villkoret som följer efter prefix `Unless` att utvärderas, vilket returnerar resultatet`FALSE`. Som resultat fortsätter skriptet att köra `Load`-satsen. I den här resultattabellen visas alla poster från `Transactions`-tabellen.

Om den här variabelns värde har satts till 2 kommer inga data att laddas till datamodellen.

## Exempel 2 – unless-prefix

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

#### Laddningsskript och resultat

Översikt

Öppna skriptredigeraren och lägg till laddningsskriptet nedan i en ny flik.

Laddningsskriptet startas genom att en initial datauppsättning laddas till en tabell som heter `Transactions`. Skriptet avslutas därefter såvida det inte finns färre än 10 poster i `Transactions`-tabellen.

Om det här villkoret inte resulterar till att skriptet avslutas konkateneras ytterligare en uppsättning transaktioner till `Transactions`-tabellen och den här processen upprepas.

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

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 | 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 |
| 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 poster i vart och ett av de tre datauppsättningarna i laddningsskriptet.

Den första datauppsättningen (med `id`-transaktion 1–7) laddas till applikationen. `Unless`-villkoret utvärderar om det finns färre än 10 rader i `Transactions`-tabellen. Detta utvärderas till `TRUE` och därför laddas den andra uppsättningen (med `id`-transaktion 8–14) laddas till programmet. Det andra `Unless`-villkoret utvärderar om det finns färre än 10 poster i `Transactions`-tabellen. Det här utvärderas till `FALSE`. Skriptet avslutas.

## Exempel 3 – flera unless-prefix

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

#### Laddningsskript och resultat

Översikt

Öppna skriptredigeraren och lägg till laddningsskriptet nedan i en ny flik.

I det här exemplet skapas en datauppsättning som innehåller en transaktion som en tabell som heter `Transactions`. Därefter utlöses en "for"-slinga, där två nästlade unless-satser utvärderas:

1. Såvida inte det finns mer än 100 poster i `Transactions`-tabellen

2. Såvida inte antalet poster i `Transactions`-tabellen är en multipel av 6

Om de här villkoren är `FALSE` genereras ytterligare sju poster som konkateneras till den befintliga `Transactions`-tabellen. Den här processen upprepas tills en eller två transaktioner returnerar ett värde på `TRUE`.

Laddningsskript

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

Resultat

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

Resultattabell

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

De nästlade unless-satserna som finns i "for"-slingan utvärderas till följande:

1. Finns det fler än 100 rader i `Transactions`-tabellen?

2. Är det totala antalet poster i `Transactions`-tabellen en multipel av 6?

När båda unless-satserna returnerar värdet `FALSE` genereras ytterligare sju poster som konkateneras till den befintliga `Transactions`-tabellen.

De här satserna returnerar ett värde på `FALSE` fem gånger. Det finns då totalt 36 rader med data i `Transactions`-tabellen.

Därefter returnerar den andra `Unless`-satsen värdet `TRUE`, och därför kommer den efterföljande load-satsen inte längre att exekveras.