# Constrain

Der Constrain-Befehl kann in Kombination mit den Let- oder Set-Befehlen verwendet werden, um Skript-Variablen zu definieren. Mit dem Constrain-Befehl können Sie Beschränkungen für mögliche Werte dieser Variablen definieren. Wenn eine Variablendefinition gegen die Beschränkungen verstößt, schlägt der Ladevorgang fehl. Mit Beschränkungen können Sie festlegen, dass Variablenwerte bestimmten Typen entsprechen, in bestimmte numerische Bereiche fallen und mit von Ihnen definierten akzeptablen Werten übereinstimmen müssen.

Syntax:

Constrain variablename = json

Hierbei gilt:

* variablename ist eine Skriptvariable.

* json ist ein gültiges JSON-Objekt, das die Beschränkungen angibt. Einzelne Beschränkungen werden in diesem Objekt als Schlüssel-Wert-Paare hinzugefügt.

Beschränkungstypen

| Beschränkungstyp (Schlüssel) | Bedeutung | Beschränkungsanforderungen (Wert) | Beispiele |
| --- | --- | --- | --- |
| `"type"` | Beschränken Sie Variablenwerte auf einen bestimmten Datentyp. | `"text"` gibt einen Texttyp an.<br><br>`"number"` gibt einen numerischen Typ an. | ```<br>CONSTRAIN vExampleText = {"type": "text"}<br>```<br><br>```<br>CONSTRAIN vExampleNumeric = {"type": "number"}<br>``` |
| `"maxnum"` | Legen Sie einen Höchstwert für eine Variable fest. | Nur Zahlen (Ganzzahl oder Fließkomma). Wissenschaftliche Notation ist zulässig. | ```<br>CONSTRAIN vExample = {"maxnum": 5000}<br>``` |
| `"minnum"` | Legen Sie einen Mindestwert für eine Variable fest. | Nur Zahlen (Ganzzahl oder Fließkomma). Wissenschaftliche Notation ist zulässig. | ```<br>CONSTRAIN vExample = {"minnum": 250}<br>``` |
| `"valuesnum"` | Definieren Sie eine Liste der akzeptablen numerischen Werte für die Variable. | Kommagetrennte Liste von Zahlen, die in eckigen Klammern stehen. Zum Beispiel: `[1,2,3]` | ```<br>CONSTRAIN vExample = {"valuesnum": [1,2,3]}<br>``` |
| `"valuestext"` | Definieren Sie eine Liste der akzeptablen Textwerte für die Variable. | Kommagetrennte Liste von Strings, die in eckigen Klammern stehen. Zum Beispiel: `["a","b","c"]` | ```<br>CONSTRAIN vExample = {"valuestext": ["Department A", "Department B", "Department C"]}<br>``` |

## Wann Sie einen Constrain-Befehl verwenden sollten

Verwenden Sie den Constrain-Befehl, um zu verhindern, dass unerwünschte Variablenwerte in Analyseanwendungen geladen werden. In den folgenden Abschnitten wird beschrieben, wie Sie ihn konkret einsetzen können.

### Aktualisierung von Variablen zur Ladezeit

Constrain ist besonders nützlich, wenn Sie es in Kombination mit Aktualisierungen von Variablen zur Ladezeit verwenden. Mit Aktualisierungen von Variablen zur Ladezeit können Sie Variablen während der Ladevorgänge der Anwendung dynamisch aktualisieren, indem Sie die Eigenschaft variables der [Reloads API](https://qlik.dev/apis/rest/reloads/) verwenden. Der Constrain-Befehl verhindert, dass böswillige oder falsch formatierte Variablendefinitionen in Analyseladevorgänge aufgenommen werden.

Aktualisierungen von Variablen zur Ladezeit unterstützen zusammen mit dem Constrain-Befehl die folgenden Anwendungsfälle:

* Vorlagenanwendungen, die Daten selektiv auf der Grundlage von Bedingungen wie Kunden-ID oder Name laden (die zum Ladezeitpunkt als Variablen übergeben werden können)

* Zentrale Kontrolle über Anwendungen, die über viele Qlik Cloud Mandanten verteilt sind

* Migration von variablen-orientierten Workflows und Aufgaben von QlikView und Qlik Sense Client-Managed in die Cloud

### Sicherheit, Zuverlässigkeit und Zusammenarbeit

Auch außerhalb von Szenarien mit Aktualisierung von Variablen zur Ladezeit verbessert Constrain die Sicherheitskontrollen für die Erstellung von Ladeskripten, z. B. bei der gemeinsamen Entwicklung von Ladeskripten. Ein Anwendungsbesitzer könnte zum Beispiel Beschränkungen für Variablenwerte definieren und die Mitarbeiter über bestimmte Bedingungen informieren, die erfüllt sein müssen, damit die Anwendung zuverlässig und erfolgreich geladen werden kann.

## Überlegungen

* Die Constrain-Definition für die Variable muss ein gültiges JSON-Objekt sein.

* Sie können mehr als eine Beschränkung für eine einzelne Variable angeben. Alle Beschränkungen für eine Variable müssen in einem einzigen Beschränkungsobjekt enthalten sein. Beispiele finden Sie unter [Beispiele: Mehrere Beschränkungen](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Examples).

* Wenn Sie bereits eine Skriptvariable mit einem bestimmten Namen in die Anwendung geladen haben, können zukünftige Versuche, Beschränkungen und Werte für diese Variable zu definieren, aufgrund von Konflikten zwischen den ursprünglichen und den neu definierten Variablen fehlschlagen.

  Um diese Konflikte zu lösen, setzen Sie die Variablenbeschränkungen und -werte zurück, indem Sie leere Definitionen einfügen. Beispiele:

  ```
  CONSTRAIN x;
  LET x;
  ```

  ```
  CONSTRAIN x;
  SET x;
  ```

  In den nachfolgenden Abschnitten des Ladeskripts können Sie dann die Variable und ihre Beschränkungen neu definieren. Ein Beispiel in Langform finden Sie unter [Beispiel: Auflösen von Variablendefinitionskonflikten](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#ConflictResolve).

* Die Reihenfolge der Variablendefinition und der Beschränkungsdefinition spielt keine Rolle. Im Falle eines variablenbedingten Ladefehlers ist die Zeile, in der der Bruchpunkt auftritt, jedoch eine andere.

* Der Constrain-Skriptbefehl schränkt nur die Variablendefinitionen für Skriptvariablen ein. Sie können auch Beschränkungen auf Skript- und Endbenutzervariablen anwenden (die in der Arbeitsblatt-Ansicht oder als Sitzungsvariablen über die API erstellt oder aktualisiert wurden), indem Sie die öffentliche API verwenden. Weitere Informationen finden Sie unter [Alternativen für Entwickler zum Definieren von Variablenbeschränkungen](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Developer).

* Beschränkungen werden validiert, um Szenarien zu vermeiden, die keinem Wert für die Variable entsprechen können. Beispiele für ungültige Beschränkungen:

  * {"minnum": 5000, "maxnum": 4}
  * {"type": "text", "maxnum": 4}

## Alternativen für Entwickler zum Definieren von Variablenbeschränkungen

Sie können auch die öffentliche API verwenden, um Variablenbeschränkungen zu definieren, anstatt den Constrain-Befehl im Ladeskript zu verwenden. Bei der Definition von Beschränkungen über die API unterliegen alle Versuche, Variablenwerte zu aktualisieren – ob direkt im Ladeskript, in der Arbeitsblatt-Ansicht oder über [die Reloads-API](https://qlik.dev/apis/rest/reloads/) – den Beschränkungen.

Um Variablenbeschränkungen über die öffentliche API zu definieren, verwenden Sie das Objekt GenericVariableConstraints in der Qlik Sense Engine (qix) API: [GenericVariableConstraints](https://qlik.dev/apis/json-rpc/qix/schemas/).

## Beispiel: type

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit "type"

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für a den Typ number haben muss.

* Ein LET-Befehl, der die Variable a definiert.

Ladeskript

```
CONSTRAIN a = {"type": "text"};
LET a = 1000;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Beschränkung einen Texttyp für die Variable a erfordert. Die Variablendefinition ist eine Zahl.

Im Gegensatz dazu würde die Angabe eines type von number in der Beschränkung dazu führen, dass der Ladevorgang erfolgreich ist.

## Beispiel: maxnum

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit "maxnum"

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um festzulegen, dass die Variablendefinition für b einen maximalen Wert von 3000 haben kann.

* Ein LET-Befehl, der die Variable b definiert.

```
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Beschränkung einen maximalen Wert von 3000 für die Variable b erfordert. Die Variablendefinition wird als 3001 ausgewertet.

Im Gegensatz dazu würde die Angabe von b als 2999 dazu führen, dass der Ladevorgang erfolgreich ist.

## Beispiel: minnum

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit "minnum"

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um festzulegen, dass die Variablendefinition für b einen minimalen Wert von 3000 haben kann.

* Ein LET-Befehl, der die Variable c definiert.

```
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Beschränkung einen minimalen Wert von 3000 für die Variable c erfordert. Die Variablendefinition wird als 2999 ausgewertet.

Im Gegensatz dazu würde die Angabe von c als 3000 dazu führen, dass der Ladevorgang erfolgreich ist.

## Beispiel: valuesnum

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit "valuesnum"

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um festzulegen, dass die Variablendefinition für d numerisch sein und 2, 3 oder 4 betragen muss.

* Ein LET-Befehl, der die Variable d definiert.

```
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Variable d als 1 ausgewertet wird, was nicht in der Liste der drei möglichen Werte enthalten ist.

Im Gegensatz dazu würde die Angabe von d als 2 dazu führen, dass der Ladevorgang erfolgreich ist.

## Beispiel: valuestext

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit "valuestext"

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um festzulegen, dass die Variablendefinition für e einer der folgenden Textwerte sein muss:

  * Department A

  * Department B

  * Department C

* Ein SET-Befehl, der die Variable e definiert.

```
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Variable e Department D lautet, was nicht in der Liste der zulässigen Werte enthalten ist, die durch die Beschränkung definiert ist.

Im Gegensatz dazu würde die Angabe von e als Department C dazu führen, dass der Ladevorgang erfolgreich ist.

## Beispiele: SET im Vergleich zu LET

Diese Beispiele zeigen die Unterschiede in der Anwendung von Beschränkungen bei der Verwendung von SET oder LET während der Variablendefinition. In allen Beispielen werden Beschränkungen verwendet, die eine type-Anforderung anwenden, aber diese Prinzipien gelten generell für alle Arten von Beschränkungen.

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit SET

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für f den Typ number haben muss.

* Ein SET-Befehl, der die Variable f definiert.

Ladeskript

```
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
```

Ergebnisse

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Beschränkung einen numerischen Typ für die Variable f erfordert. Die Variablendefinition enthält einen numerischen Ausdruck, aber da ein SET-Befehl verwendet wird, wird die Definition als Text ausgewertet.

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Fehlgeschlagener Ladevorgang mit LET

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für g den Typ text haben muss.

* Ein LET-Befehl, der die Variable g definiert.

Ladeskript

```
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
```

Laden Sie die Daten.

Der Ladevorgang schlägt fehl, weil die Beschränkung einen Texttyp für die Variable g erfordert. Die Variablendefinition enthält einen numerischen Ausdruck und es wird ein LET-Befehl verwendet, weshalb die Definition als Zahl ausgewertet wird.

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Erfolgreicher Ladevorgang mit SET

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für h den Typ text haben muss.

* Ein SET-Befehl, der die Variable h definiert.

Ladeskript

```
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
```

Laden Sie die Daten.

Der Ladevorgang ist erfolgreich. Die Beschränkung erfordert einen Texttyp für die Variable h. Die Variablendefinition enthält einen numerischen Ausdruck, aber da ein SET-Befehl verwendet wird, wird die Definition als Text ausgewertet.

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Erfolgreicher Ladevorgang mit LET

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für i den Typ number haben muss.

* Ein LET-Befehl, der die Variable i definiert.

Ladeskript

```
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
```

Laden Sie die Daten.

Der Ladevorgang ist erfolgreich. Die Beschränkung erfordert einen numerischen Typ für die Variable i. Die Variablendefinition enthält einen numerischen Ausdruck und es wird ein LET-Befehl verwendet, weshalb die Definition als Zahl ausgewertet wird.

## Beispiele: Mehrere Beschränkungen

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Festlegen von Mindest- und Höchstwerten

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, um anzugeben, dass die Variablendefinition für j zwischen 1 und 5 liegen muss.

* Ein LET-Befehl, der die Variable j definiert.

Ladeskript

```
CONSTRAIN j = {"minnum": 1, "maxnum": 5};
LET j = 2;
```

Laden Sie die Daten.

Der Ladevorgang ist erfolgreich. Die Variable f wird als 2 ausgewertet und liegt damit innerhalb des zulässigen Bereichs.

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Akzeptieren von Text und Zahlen aus Listen

Übersicht

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

Das Ladeskript umfasst:

* Ein Constrain-Befehl, der zulässt, dass die Variable ein Text oder eine Zahl ist, solange es sich um einen der zulässigen Werte handelt.

* Ein LET-Befehl, der die Variable k definiert.

Ladeskript

```
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
```

Laden Sie die Daten.

Der Ladevorgang ist erfolgreich. Der Wert für die Variable k befindet sich in der Liste der akzeptablen Werte. Ebenso würde die Angabe von k als 3 zu einem erfolgreichen Ladevorgang führen.

## Beispiel: Auflösen von Variablendefinitionskonflikten

[](https://help.qlik.com/en-US/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm)

#### Ladeskript und Ergebnisse

Übersicht

Dieses Beispiel zeigt, wie Variablendefinitionskonflikte auftreten können, wenn Sie Beschränkungen für eine Variable hinzufügen, die in der Anwendung bereits bei einem früheren Ladevorgang definiert wurde.

Ladeskript 1: Festlegen einer Skriptvariablen

Öffnen Sie Dateneditor. Fügen Sie das folgende Skript hinzu:

```
LET vConflictExample = 'Department C';
```

Laden Sie die Daten. Der Ladevorgang ist erfolgreich. Die Variable vConflictExample wurde in der Anwendung als Skriptvariable erstellt.

Ladeskript 2: Versuch einer Beschränkungsdefinition für eine zuvor geladene Skriptvariable

Löschen Sie das Ladeskript 1. Fügen Sie das folgende Skript hinzu:

```
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
```

Laden Sie die Daten.

Der Ladevorgang schlägt mit einem Beschränkungsfehler fehl, obwohl die neue Beschränkung und die Wertdefinition kompatibel sind. Das liegt daran, dass das Ladeskript 1 die Variable bereits mit einem Textwert in die App geladen hat und dieser Wert immer noch in der Anwendung vorhanden ist. Um dieses Problem zu beheben, müssen wir die Variablenbeschränkung und -definition zurücksetzen. Siehe Ladeskript 3.

Ladeskript 3: Zurücksetzen der Definitionen von Beschränkungen und Werten

Löschen Sie das Ladeskript 2. Fügen Sie das folgende Skript hinzu:

```
CONSTRAIN vConflictExample;
LET vConflictExample;

CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;

MockData:
LOAD 
* 
Inline [
id, date, amount
1, 05/30/2025, 23.56
];
```

Laden Sie die Daten.

Der Ladevorgang ist erfolgreich. Das obige Skript kann in drei Teile aufgeteilt werden, die jeweils durch Leerzeilen getrennt sind:

* Der erste Teil setzt die Definition der Beschränkung und des Wertes für vConflictExample zurück. Damit wird die Definition entfernt, die mit dem Ladeskript 1 in die Anwendung geladen wurde.

* Der zweite Teil wendet die neuen Definitionen von Beschränkungen und Werten, die im Ladeskript 2 fehlgeschlagen sind, erneut an.

* Der dritte Teil fügt Testdaten hinzu, damit wir die Arbeitsblatt-Ansicht öffnen und den Wert der Variablen überprüfen können (siehe unten).

Öffnen Sie die Arbeitsblatt-Ansicht im Bearbeitungsmodus, und öffnen Sie das Dialogfeld the Variablen icon . Wir können sehen, dass die Variable vConflictExample erfolgreich erstellt wurde.

Das Dialogfeld „Variablen“ in der Arbeitsblatt-Ansicht zeigt, dass der Variablendefinitionskonflikt für vConflictExample behoben wurde.

Das Dialogfeld „Variablen“ in der Arbeitsblatt-Ansicht zeigt, dass der Variablendefinitionskonflikt für vConflictExample behoben wurde.

Das Dialogfeld „Variablen“ in der Arbeitsblatt-Ansicht zeigt, dass der Variablendefinitionskonflikt für vConflictExamplevConflictExample behoben wurde. ![Das Dialogfeld „Variablen“ in der Arbeitsblatt-Ansicht zeigt an, dass die Skriptvariable erfolgreich erstellt wurde.](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_script-variable_constrain-conflict-resolved.png)

## Weitere Informationen

* [Let](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Let.htm)
* [Set](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Set.htm)
* [Arbeiten mit Variablen im Dateneditor](https://help.qlik.com/de-DE/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)