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.
"number" gibt einen numerischen Typ an.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Legen Sie einen Höchstwert für eine Variable fest.
Nur Zahlen (Ganzzahl oder Fließkomma). Wissenschaftliche Notation ist zulässig.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Legen Sie einen Mindestwert für eine Variable fest.
Nur Zahlen (Ganzzahl oder Fließkomma). Wissenschaftliche Notation ist zulässig.
CONSTRAIN vExample = {"minnum": 250}
"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]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"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"]
Verwenden Sie den Constrain-Befehl, um zu verhindern, dass unerwünschte Variablenwerte in Analyse-Apps 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 App dynamisch aktualisieren, indem Sie die Eigenschaft variables der Reloads API 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:
Vorlagen-Apps, 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 Apps, die über viele Qlik Cloud Mandanten verteilt sind
Migration von variablen-orientierten Workflows und Aufgaben von QlikView und Qlik Sense clientverwaltet 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 App-Besitzer 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 App 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.
Wenn Sie bereits eine Skriptvariable mit einem bestimmten Namen in die App 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.
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.
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 – 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.
Beispiel: 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
Ü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
Ü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
Ü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
Ü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 eDepartment 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.
Ü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.
Ü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.
Ü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.
Ü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
Ü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.
Der Ladevorgang ist erfolgreich. Die Variable f wird als 2 ausgewertet und liegt damit innerhalb des zulässigen Bereichs.
Ü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
Übersicht
Dieses Beispiel zeigt, wie Variablendefinitionskonflikte auftreten können, wenn Sie Beschränkungen für eine Variable hinzufügen, die in der App 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 App 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 App vorhanden ist. Um dieses Problem zu beheben, müssen wir die Beschränkung und Definition der Variablen 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:
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 App 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 Variablen. 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.
Wenn Sie ein Problem mit dieser Seite oder ihrem Inhalt feststellen, sei es ein Tippfehler, ein ausgelassener Schritt oder ein technischer Fehler, informieren Sie uns bitte!