# Unless

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

Syntax:

(Unless condition statement | exitstatement Unless condition )

statement oder exitstatement wird nur ausgeführt, wenn condition False ergibt.

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

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

## Verwendung

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

Die folgenden Zeilen zeigen drei Beispiele, wie die Funktion `Unless` verwendet werden kann:

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

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

Standardmäßige regionale Einstellungen in Anwendungen basieren auf den regionalen Systemeinstellungen des Computers oder Servers, auf dem 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-, Zeit- und Währungsangaben. Diese regionalen Formateinstellungen hängen nicht mit der Sprache zusammen, die in der Qlik Sense Benutzeroberfläche angezeigt wird. Qlik Sense wird in derselben Sprache angezeigt wie der von Ihnen verwendete Browser.

## Beispiel 1 – Präfix „unless“

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

#### Ladeskript und Ergebnisse

Übersicht

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

Das Ladeskript umfasst:

* Erstellung einer Variable A, die einen Wert von 1 erhält

* Datensatz, der in eine Tabelle namens „Transactions“ geladen wird, es sei denn die Variable A = 2

Ladeskript

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

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 `Unless` ausgewertet und gibt ein Ergebnis von `FALSE` zurück. Infolgedessen führt das Skript den Befehl `Load` weiter aus. In der Ergebnistabelle werden alle Einträge aus der Tabelle `Transactions` angezeigt.

Wenn dieser Variablenwert auf 2 festgelegt wird, werden keine Daten in das Datenmodell geladen.

## Beispiel 2 – Suffix „unless“

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.

Das Ladeskript startet damit, dass ein anfänglicher Datensatz in eine Tabelle namens `Transactions` geladen wird. Das Skript wird dann beendet, es sei denn, es sind weniger als 10 Einträge in der Tabelle `Transactions` vorhanden.

Wenn diese Bedingung nicht zu einer Beendigung des Skripts führt, wird eine weitere Reihe von Transaktionen in der Tabelle `Transactions` zusammengeführt, und dieser Prozess wird wiederholt.

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

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 |

Es gibt sieben Einträge in jedem der drei Datensätze des Ladeskripts.

Der erste Datensatz (mit Transaktions-`id` 1 bis 7) wird in die Anwendung geladen. Die Bedingung `Unless` wertet aus, ob weniger als 10 Zeilen in der Tabelle `Transactions` vorhanden sind. Sie wird zu `TRUE` ausgewertet, und daher wird der zweite Datensatz (mit Transaktions-`id` 8 bis 14) in die Anwendung geladen. Die zweite Bedingung `Unless` wertet aus, ob weniger als 10 Einträge in der Tabelle `Transactions` vorhanden sind. Die Auswertung ergibt `FALSE`, und damit endet das Skript.

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

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

#### Ladeskript und Ergebnisse

Übersicht

Öffnen Sie den Dateneditor und fügen Sie das Ladeskript unten in eine neue Registerkarte ein.

In diesem Beispiel wird ein Datensatz, der eine Transaktion enthält, als Tabelle namens `Transactions` erstellt. Dann wird eine „for“-Schleife ausgelöst, in der zwei verschachtelte „unless“-Befehle Folgendes auswerten:

1. Es sei denn, in der Tabelle `Transactions` sind mehr als 100 Einträge vorhanden

2. Es sei denn, die Anzahl der Einträge in der Tabelle `Transactions` ist ein Vielfaches von 6

Wenn diese Bedingungen `FALSE` sind, werden weitere sieben Einträge generiert und in der vorhandenen Tabelle `Transactions` zusammengeführt. Dieser Vorgang wird wiederholt, bis eine der zwei Transaktionen einen Wert von `TRUE` zurückgibt.

Ladeskript

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

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

Ergebnistabelle

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

Die verschachtelten „unless“-Befehle, die in der „for“-Schleife vorhanden sind, werden wie folgt ausgewertet:

1. Sind mehr als 100 Zeilen in der Tabelle `Transactions` vorhanden?

2. Ist die Anzahl der Einträge in der Tabelle `Transactions` ein Vielfaches von 6?

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

Diese Befehle geben fünf Mal einen Wert von `FALSE` zurück. An dieser Stelle befinden sich insgesamt 36 Datenzeilen in der Tabelle `Transactions`.

Danach gib der zweite `Unless`-Befehl einen Wert von `TRUE` zurück, und daher wird die load-Anweisung danach nicht mehr ausgeführt.