De Constrain-instructie kan in combinatie met de Let- of Set-instructie gebruikt worden om scriptvariabelen te definiëren. Met de Constrain-instructie kunt u beperkingen definiëren op mogelijke waarden voor deze variabelen. Als een definitie van een variabele de beperkingen schendt, mislukt de lading. Met beperkingen kunt u eisen dat variabele waarden overeenkomen met specifieke typen, binnen specifieke numerieke bereiken vallen en overeenkomen met aanvaardbare waarden die u definieert.
Syntaxis:
Constrain variablename = json
Waarbij:
variablename is een scriptvariabele.
json een geldig JSON-object is dat de beperkingen specificeert. Individuele beperkingen worden binnen dit object toegevoegd als sleutelwaardeparen.
Type beperkingen
Beperkingstype (sleutel)
Betekenis
Vereisten voor beperking (waarde)
Voorbeelden
"type"
Beperk variabelewaarden tot een specifiek gegevenstype.
"text" specificeert een teksttype.
"number" specificeert een numeriek type.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Stel een maximumwaarde in voor een variabele.
Alleen getallen (geheel getal of drijvende komma). Wetenschappelijke notatie is toegestaan.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Stel een minimumwaarde in voor een variabele.
Alleen getallen (geheel getal of drijvende komma). Wetenschappelijke notatie is toegestaan.
CONSTRAIN vExample = {"minnum": 250}
"valuesnum"
Definieer een lijst met aanvaardbare numerieke waarden voor de variabele.
Door komma's gescheiden lijst van getallen tussen vierkante haakjes. Bijvoorbeeld: [1,2,3]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"valuestext"
Definieer een lijst met aanvaardbare tekstwaarden voor de variabele.
Door komma's gescheiden lijst van tekenreeksen tussen vierkante haakjes. Bijvoorbeeld: ["a","b","c"]
Gebruik de Constrain-instructie om te voorkomen dat ongewenste variabele waarden in analyse-apps worden geladen. In de volgende secties worden specifieke manieren beschreven waarop u deze kunt gebruiken.
Laadtijd variabele bijwerken
Constrain is vooral nuttig wanneer het gebruikt wordt in combinatie met laadtijd variabele updates. Met laadtijd variabele updates kunt u dynamisch variabelen bijwerken tijdens het laden van de app, met behulp van de eigenschap variables in de Reloads API. De Constrain-instructie voorkomt dat kwaadaardige of onjuist geformatteerde definities van variabelen opgenomen worden in analytische ladingen.
Laadtijd variabele updates, samen met de Constrain-instructie, ondersteunen de volgende gebruiksscenario's:
Sjabloon-apps die gegevens selectief laden op basis van voorwaarden zoals klant-ID of naam (die bij het laden kunnen worden doorgegeven als variabelen)
Centrale controle over apps die gedistribueerd zijn over vele Qlik Cloud-tenants
Variabel georiënteerde workflows en taken migreren van QlikView 12 en Qlik Sense met clientbeheer naar de cloud
Veiligheid, betrouwbaarheid en samenwerking
Zelfs wanneer Constrain wordt gebruikt buiten de scenario's voor het bijwerken van variabelen tijdens het laden, verbetert het de beveiligingscontroles voor het schrijven van load-scripts, bijvoorbeeld tijdens de gezamenlijke ontwikkeling van load-scripts. De eigenaar van een app kan bijvoorbeeld beperkingen definiëren voor variabele waarden, zodat medewerkers op de hoogte zijn van specifieke voorwaarden waaraan voldaan moet worden om de app betrouwbaar en succesvol te laden.
Overwegingen
De Constrain-definitie voor de variabele moet een geldig JSON-object zijn.
U kunt meer dan één beperking voor één variabele opgeven. Alle beperkingen voor een variabele moeten in een enkel beperkingsobject staan. Zie Voorbeelden - meerdere beperkingen voor voorbeelden.
Als u al een scriptvariabele met een bepaalde naam in de app hebt geladen, kunnen toekomstige pogingen om beperkingen en waarden voor die variabele te definiëren mislukken door conflicten tussen de oorspronkelijke en de opnieuw gedefinieerde variabelen.
Om deze conflicten op te lossen, reset u de beperkingen en waarden van de variabelen door lege definities in te voegen. Voorbeelden:
De volgorde van de definitie van de variabele en de definitie van de beperking maakt niet uit. In het geval van een variabele-gerelateerde laadfout, zal de regel waarop het breekpunt optreedt echter anders zijn.
De Constrain script-instructie beperkt alleen variabele definities voor scriptvariabelen. U kunt ook beperkingen toepassen op script- en eindgebruikersvariabelen (variabelen die zijn aangemaakt of bijgewerkt in de werkbladweergave of als sessievariabelen met behulp van de API) door de openbare API te gebruiken. Ga voor meer informatie naar Alternatieven voor ontwikkelaars om variabele beperkingen te definiëren.
Alternatieven voor ontwikkelaars om variabele beperkingen te definiëren
U kunt ook de openbare API gebruiken om variabele beperkingen te definiëren, in plaats van de Constrain-instructie in het load-script te gebruiken. Wanneer u beperkingen definieert via de API, zullen alle pogingen om variabele waarden bij te werken — of dit nu rechtstreeks in het load-script, in de werkbladweergave of via de Reloads API gebeurt — onderhevig zijn aan de beperkingen.
Om variabele beperkingen via de openbare API te definiëren, gebruikt u het GenericVariableConstraints-object in de Qlik Sense Engine (qix) API: GenericVariableConstraints.
Voorbeeld - type
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor a het type number moet hebben.
Een LET-instructie die de variabele a definieert.
Load-script
CONSTRAIN a = {"type": "text"};
LET a = 1000;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de beperking een teksttype vereist voor de variabele a. De definitie van de variabele is een getal.
Daarentegen zou het specificeren van een type van number in de beperking ervoor zorgen dat het laden slaagt.
Voorbeeld - maxnum
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor b een maximale waarde van 3000 kan hebben.
Een LET-instructie die de variabele b definieert.
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de beperking een maximumwaarde van 3000 vereist voor de variabele b. De definitie van de variabele evalueert als 3001.
Daarentegen zou het specificeren van b als 2999 ervoor zorgen dat het laden slaagt.
Voorbeeld - minnum
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor b een minimale waarde van 3000 kan hebben.
Een LET-instructie die de variabele c definieert.
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de beperking een minimumwaarde van 3000 vereist voor de variabele c. De definitie van de variabele evalueert als 2999.
Daarentegen zou het specificeren van c als 3000 ervoor zorgen dat het laden slaagt.
Voorbeeld - valuesnum
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor d numeriek moet zijn en 2, 3 of 4 moet zijn.
Een LET-instructie die de variabele d definieert.
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de variabele d wordt geëvalueerd als 1, wat niet in de lijst met drie mogelijke waarden staat.
Daarentegen zou het specificeren van d als 2 ervoor zorgen dat het laden slaagt.
Voorbeeld - valuestext
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor e een van de volgende tekstwaarden moet zijn:
Department A
Department B
Department C
Een SET-instructie die de variabele e definieert.
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de variabele eDepartment D is, wat niet voorkomt in de lijst met toegestane waarden die door de beperking is gedefinieerd.
Daarentegen zou het specificeren van e als Department C ervoor zorgen dat het laden slaagt.
Voorbeelden - SET versus LET
Deze voorbeelden laten de verschillen zien tussen hoe beperkingen worden toegepast bij het gebruik van SET of LET tijdens het definiëren van variabelen. Alle voorbeelden gebruiken beperkingen die een type vereiste toepassen, maar deze principes gelden in het algemeen voor alle soorten beperkingen.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor f het type number moet hebben.
Een SET-instructie die de variabele f definieert.
Load-script
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
Resultaten
Laad de gegevens.
Het laden mislukt omdat de beperking een numeriek type vereist voor de variabele f. De definitie van de variabele bevat een numerieke uitdrukking, maar omdat er een SET-instructie wordt gebruikt, wordt de definitie als tekst geëvalueerd.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor g het type text moet hebben.
Een LET-instructie die de variabele g definieert.
Load-script
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
Laad de gegevens.
Het laden mislukt omdat de beperking een teksttype vereist voor de variabele g. De definitie van de variabele bevat een numerieke uitdrukking en er is een LET-instructie gebruikt, waardoor de definitie als een getal wordt geëvalueerd.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor h het type text moet hebben.
Een SET-instructie die de variabele h definieert.
Load-script
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
Laad de gegevens.
Het laden slaagt. De beperking vereist een teksttype voor de variabele h. De definitie van de variabele bevat een numerieke uitdrukking, maar omdat er een SET-instructie wordt gebruikt, wordt de definitie als tekst geëvalueerd.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor i het type number moet hebben.
Een LET-instructie die de variabele i definieert.
Load-script
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
Laad de gegevens.
Het laden slaagt. De beperking vereist een numeriek type voor de variabele i. De definitie van de variabele bevat een numerieke uitdrukking en er is een LET-instructie gebruikt, waardoor de definitie als een getal wordt geëvalueerd.
Voorbeelden - meerdere beperkingen
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie om aan te geven dat de variabele definitie voor j tussen 1 en 5 moet liggen.
Het laden slaagt. De variabele f evalueert naar 2, wat binnen het aanvaardbare bereik ligt.
Overzicht
Open de editor voor laden van gegevens en voeg het onderstaande load-script toe aan een nieuwe sectie.
Het load-script bevat:
Een Constrain-instructie waardoor de variabele tekst of numeriek kan zijn, zolang het maar een van de aanvaardbare waarden is.
Een LET-instructie die de variabele k definieert.
Load-script
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
Laad de gegevens.
Het laden slaagt. De waarde voor variabele k staat in de lijst met aanvaardbare waarden. Op dezelfde manier zou het opgeven van k als 3 resulteren in een succesvolle lading.
Voorbeeld - conflicten oplossen in de definitie van variabelen
Overzicht
Dit voorbeeld laat zien hoe definitieconflicten van variabelen kunnen optreden bij het toevoegen van beperkingen voor een variabele die al in de app gedefinieerd is bij een vorige lading.
Load-script 1: een variabele voor het script instellen
Open de Editor voor laden van gegevens. Voeg het volgende script toe:
LET vConflictExample = 'Department C';
Laad de gegevens. Het laden is geslaagd. Variabele vConflictExample is in de app aangemaakt als een scriptvariabele.
Load-script 2: poging tot beperkingsdefinitie op eerder geladen scriptvariabele
Verwijder load-script 1. Voeg het volgende script toe:
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
Laad de gegevens.
Het laden mislukt met een beperkingsfout, ook al zijn de nieuwe beperking en waardedefinitie compatibel. Dit komt omdat load-script 1 de variabele al in de app geladen heeft, met een tekstwaarde, en deze waarde is nog steeds in de app aanwezig. Om dit probleem op te lossen, moeten we de beperking en definitie van de variabele opnieuw instellen. Zie load-script 3.
Load-script 3: beperking en waardedefinities resetten
Verwijder load-script 2. Voeg het volgende script toe:
Het laden slaagt. Het bovenstaande script kan worden opgesplitst in drie delen, elk gescheiden door lege regels:
Het eerste deel stelt de beperkings- en waardedefinitie voor vConflictExample opnieuw in. Hiermee wordt de definitie verwijderd die met load-script 1 in de app was geladen.
In het tweede deel worden de nieuwe beperkings- en waardedefinities die in load-script 2 mislukten, opnieuw toegepast.
Het derde deel voegt gewoon schijngegevens toe zodat we de werkbladweergave kunnen openen en de variabele waarde kunnen inspecteren (zie hieronder).
Open de werkbladweergave in de bewerkingsmodus en open het dialoogvenster Variabelen. We kunnen zien dat de variabele vConflictExample met succes is aangemaakt.
Het dialoogvenster Variabelen in de werkbladweergave laat zien dat het conflict met de definitie van variabelen voor vConflictExample is opgelost.