# When

Der Zusatz when definiert eine Bedingung für die Ausführung eines Befehls bzw. eines exit-Befehls. Es kann somit als Kurzform des vollständigen Befehls if..end if betrachtet werden.

Syntax:

(when condition statement | exitstatement when condition )

Rückgabe Datentyp: Boolesch

In Qlik Sense wird der boolesche Wert „wahr“ durch -1 dargestellt, der Wert „falsch“ durch 0.

statement oder exitstatement wird nur ausgeführt, wenn die Bedingung TRUE ergibt.

Der Zusatz `When` kann auch für Befehle verwendet werden, die bereits einen oder mehrere andere Befehle aufweisen, einschließlich zusätzlicher `When`- oder `Unless`-Zusätze.

Verwendung

Der Befehl `When` gibt einen booleschen Wert zurück. In der Regel wird diese Art Funktion als Bedingung verwendet, wenn der Benutzer Teile des Skripts laden oder ausschließen möchte.

Argumente

| Argument | Beschreibung |
| --- | --- |
| condition | Eine logische Formel, die TRUE oder FALSE ergibt. |
| statement | Ein beliebiger Qlik Sense-Skriptbefehl mit Ausnahme von Steuerungsbefehlen. |
| exitstatement | Eine exit for-, exit do- oder exit sub-Bedingung oder ein exit script-Befehl. |

## Regionaleinstellungen

Sofern nicht anders angegeben, verwenden die Beispiele in diesem Thema das folgende Datumsformat: MM/TT/JJJJ. Das Datumsformat wird in der Anweisung `SET DateFormat` in Ihrem Datenladeskript angegeben. Das Standarddatumsformat in Ihrem System kann aufgrund Ihrer regionalen Einstellungen und anderer Faktoren abweichen. Sie können die Formate in den Beispielen unten Ihren Anforderungen entsprechend ändern. Sie können auch die Formate in Ihrem Ladeskript entsprechend den Beispielen ändern.

Die standardmäßigen regionalen Einstellungen in Apps basieren auf den regionalen Systemeinstellungen der Computer oder Server, auf denen Qlik Sense installiert ist. Wenn der Qlik Sense-Server, auf den Sie zugreifen, auf Schweden festgelegt ist, verwendet der Dateneditor die schwedischen regionalen Einstellungen für Datums-, Uhrzeit- und Währungsangaben. Diese Einstellungen im regionalen Format hängen nicht mit der Sprache zusammen, die in der Benutzeroberfläche von Qlik Sense angezeigt wird. Qlik Sense wird in der gleichen Sprache wie der von Ihnen verwendete Browser angezeigt.

Funktionsbeispiele

| Beispiel | Ergebnis |
| --- | --- |
| ` exit script when A=1;  ` | Wenn der Befehl `A=1` als TRUE ausgewertet wird, hält das Skript an. |
| `when A=1 LOAD * from myfile.csv;` | Wenn der Befehl `A=1` als TRUE ausgewertet wird, wird die Datei `myfile.csv` geladen. |
| `when A=1 unless B=2 drop table Tab1;` | Wenn der Befehl `A=1` als TRUE und `B=2` als FALSE ausgewertet wird, wird die Tabelle `Tab1` verworfen. |

## Beispiel 1 – Präfix „when“

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Ein Datensatz mit Datumswerten und Beträgen wird an eine Tabelle namens „`Transactions`“ gesendet.

* Der Befehl `Let` gibt an, dass die Variable `A` erstellt wird und den Wert `1` hat.

* Die Bedingung `When` gibt an, dass das Skript weiter geladen wird, wenn `A` dem Wert `1` entspricht.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

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

Ergebnistabelle

| ID | Datum | Betrag |
| --- | --- | --- |
| 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 |

Da der Variablen `A` am Beginn des Skripts der Wert von `1` zugewiesen ist, wird die Bedingung nach dem Präfix `When` ausgewertet und gibt ein Ergebnis von TRUE zurück. Da ein Ergebnis von TRUE zurückgegeben wird, führt das Skript die load-Anweisung weiter aus. In der Ergebnistabelle werden alle Einträge angezeigt.

Wenn dieser Variablenwert auf einen beliebigen Wert ungleich `1` festgelegt wird, werden keine Daten in das Datenmodell geladen.

## Beispiel 2 – Suffix „When“

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Drei Datensätze mit Datumswerten und Beträgen werden an eine Tabelle namens „`Transactions`“ gesendet.

  * Der erste Datensatz enthält die Transaktionen 1-7.

  * Der zweite Datensatz enthält die Transaktionen 8-14.

  * Der dritte Datensatz enthält die Transaktionen 15-21.

* Eine `When`-Bedingung entscheidet, ob die Tabelle „`Transactions`“ mehr als zehn Zeilen enthält. Wenn einer der Befehle `When` als TRUE ausgewertet wird, hält das Ladeskript an. Diese Bedingung wird am Ende jedes der drei Datensätze platziert.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie die folgenden Felder als Dimensionen hinzu:

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

Ergebnistabelle

| ID | Datum | Betrag |
| --- | --- | --- |
| 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 |

In jedem der drei Datensätze befinden sich sieben Transaktionen. Der erste Datensatz mit den Transaktionen 1 bis 7 wird in die Anwendung geladen. Die `When`-Bedingung nach dieser load-Anweisung wird als FALSE ausgewertet, weil die Tabelle „`Transactions`“ weniger als zehn Zeilen enthält. Das Ladeskript fährt mit dem nächsten Datensatz fort.

Der zweite Datensatz mit den Transaktionen 8-14 wird in die Anwendung geladen. Die zweite `When`-Bedingung wird als TRUE ausgewertet, weil mehr als zehn Zeilen in der Tabelle „`Transactions`“ enthalten sind. Daher wird das Skript beendet.

## Beispiel 3 – Mehrere Präfixe „When“

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in einen neuen Abschnitt ein.

Das Ladeskript umfasst:

* Ein Datensatz, der eine einzelne Transaktion enthält, wird als Tabelle namens „`Transactions`“ erstellt.

* Eine `For`-Schleife wird ausgelöst, die zwei verschachtelte `When`-Bedingungen enthält. Diese werten aus, ob:

  1. weniger als `100` Einträge in der Tabelle „`Transactions`“ vorhanden sind.

  2. die Anzahl der Einträge in der Tabelle „`Transactions`“ kein Vielfaches von `6` sind.

Ladeskript

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

Ergebnisse

Laden Sie die Daten und öffnen Sie ein Arbeitsblatt. Erstellen Sie eine neue Tabelle und fügen Sie dieses Feld als Dimension hinzu:

* `id`

Die Ergebnistabelle zeigt nur die ersten fünf Transaktions-IDs, aber das Ladeskript erstellt 36 Zeilen und endet, nachdem die `When`-Bedingung erfüllt ist.

Ergebnistabelle

| ID |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| +30 weitere Zeilen |

Die verschachtelten `When`-Bedingungen in der `For`-Schleife werten die folgenden Fragen aus:

* Sind weniger als 100 Zeilen in der Tabelle „`Transactions`“ vorhanden?

* Ist die Gesamtzahl der Einträge in der Tabelle „`Transactions`“ ein Vielfaches von 6?

Immer, wenn beide `When`-Bedingungen einen Wert von TRUE zurückgeben, werden weitere sieben Einträge generiert und in der vorhandenen Tabelle „`Transactions`“ zusammengeführt.

Die `When`-Bedingungen geben fünf Mal einen Wert von TRUE zurück. An dieser Stelle befinden sich insgesamt 36 Datenzeilen in der Tabelle „`Transactions`“.

Nachdem 36 Datenzeilen in der Tabelle „`Transactions`“ erstellt wurden, gibt der zweite `When`-Befehl einen Wert von FALSE zurück, und daher wird die load-Anweisung danach nicht mehr ausgeführt.