Satsen Constrain kan användas i kombination med satserna Let eller Set för att definiera variabler i skriptet. Med hjälp av Constrain-satsen kan du definiera begränsningar för möjliga värden för dessa variabler. Om en definition av en variabel bryter mot begränsningarna misslyckas inläsningen. Med begränsningar kan du kräva att värden för variabler ska matcha specifika typer, ligga inom specifika numeriska intervall och matcha acceptabla värden som du definierar.
Syntax:
Constrain variablename = json
Där:
variablename är en skriptvariabel.
json är ett giltigt JSON-objekt som specificerar begränsningarna. Individuella begränsningar läggs till i detta objekt som nyckel-värde-par.
Begränsningstyper
Begränsningstyp (nyckel)
Betydelse
Begränsande krav (värde)
Exempel
"type"
Begränsa variabelvärden till en specifik datatyp.
"text" anger en texttyp.
"number" anger en numerisk typ.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Ange ett maxvärde för en variabel.
Endast siffror (heltal eller flyttal). Vetenskaplig notation är tillåten.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Ange ett minvärde för en variabel.
Endast siffror (heltal eller flyttal). Vetenskaplig notation är tillåten.
CONSTRAIN vExample = {"minnum": 250}
"valuesnum"
Definiera en lista över acceptabla numeriska värden för variabeln.
Kommaseparerad lista med siffror inom hakparenteser. Till exempel: [1,2,3]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"valuestext"
Definiera en lista över acceptabla textvärden för variabeln.
Kommaseparerad lista med strängar inom hakparenteser. Till exempel: ["a","b","c"]
Använd Constrain-satsen för att förhindra att oönskade variabelvärden laddas in i analysappar. I följande delavsnitt beskrivs specifika sätt på vilka du kan använda den.
Omladdningstid för variabeluppdatering
Constrain är särskilt användbart när det används i kombination med inläsningstid för variabeluppdatering. Med inläsningstid för variabeluppdateringkan du dynamiskt uppdatera variabler under inläsningar av appen med hjälp av egenskapen variables i API:t Reloads. Satsen Constrain förhindrar att skadliga eller felaktigt formaterade definitioner av variabler införlivas i analytiska inläsningar.
Inläsningstid för variabeluppdatering, tillsammans med Constrain-satsen, stöder följande användningsfall:
Appar med mallar som laddar data selektivt baserat på villkor som kund-ID eller namn (som kan skickas vid inläsningstid som variabler)
Central kontroll över appar som distribueras över flera Qlik Cloud-klientorganisationer
Migrering av variabelorienterade arbetsflöden och uppgifter från QlikView och För klienthanterat Qlik Sense till molnet
Säkerhet, tillförlitlighet och samarbete
Även när Constrain används utanför scenarier för uppdatering av variabler vid inläsning förbättrar det säkerhetskontrollerna för författande av laddningsskript - till exempel under gemensam utveckling av laddningsskript. En appägare kan t.ex. definiera begränsningar för värden på variabler och informera medarbetare om specifika villkor som måste uppfyllas för att appen ska kunna läsas in på ett tillförlitligt sätt.
Överväganden
Definitionen Constrain för variabeln måste vara ett giltigt JSON-objekt.
Du kan ange mer än en begränsning för en och samma variabel. Alla begränsningar för en variabel måste behållas inom ett enda objekt för begränsningar. Se Exempel – Flera begränsningar för exempel.
Om du redan har läst in en skriptvariabel med ett visst namn i appen kan framtida försök att definiera begränsningar och värden för den variabeln misslyckas på grund av konflikter mellan de ursprungliga och de omdefinierade variablerna.
För att lösa dessa konflikter, återställ begränsningarna och värdena för variablerna genom att infoga tomma definitioner. Exempel:
Ordningen på definitionen av variabeln och definitionen av begränsningen spelar ingen roll. Vid ett variabelrelaterat inläsningsfel kommer dock linjen vid vilken brytpunkten inträffar att vara annorlunda.
Constrain-skriptet begränsar endast variabeldefinitioner för skriptvariabler. Du kan också tillämpa begränsningar på skript- och slutanvändarvariabler (de som skapas eller uppdateras i arkvyn eller som sessionsvariabler med hjälp av API:et) genom att använda det publika API:et. Mer information finns i Alternativ för utvecklare för att definiera begränsningar för variabler.
Alternativ för utvecklare för att definiera begränsningar för variabler
Du kan också använda det publika API:et för att definiera variabelbegränsningar i stället för att använda Constrain-satsen i laddningsskriptet. När du definierar begränsningar via API kommer alla försök att uppdatera variabelvärden – oavsett om det sker direkt i laddningsskriptet, i arkvyn eller via API:et Reloads – att omfattas av begränsningarna.
Om du vill definiera begränsningar för variabler via det offentliga API:et använder du objektet GenericVariableConstraints i API:et Qlik Sense Engine (qix): GenericVariableConstraints.
Exempel – type
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för a måste ha typen number.
En LET-sats som definierar 'variabeln a.
Laddningsskript
CONSTRAIN a = {"type": "text"};
LET a = 1000;
Resultat
Ladda data.
Inläsningen misslyckas eftersom begränsningen kräver en texttyp för variabeln a. Definitionen av variabeln är ett tal.
Om man däremot anger en type av number i begränsningen kommer inläsningen att lyckas.
Exempel – maxnum
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för b kan ha ett maxvärde på 3000.
En LET-sats som definierar variabeln b.
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
Resultat
Ladda data.
Inläsningen misslyckas eftersom begränsningen kräver ett maxvärde på 3000 för variabel b. Variabeldefinitionen utvärderas som 3001.
Om man däremot anger b som 2999 kommer inläsningen att lyckas.
Exempel – minnum
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att variabeldefinitionen för b kan ha ett minvärde på 3000.
En LET-sats som definierar variabeln c.
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
Resultat
Ladda data.
Inläsningen misslyckas eftersom begränsningen kräver ett minvärde på 3000 för variabel c. Variabeldefinitionen utvärderas som 2999.
Om man däremot anger c som 3000 kommer inläsningen att lyckas.
Exempel – valuesnum
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att variabeldefinitionen för d måste vara numerisk och måste vara 2, 3 eller 4.
En LET-sats som definierar variabeln d.
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
Resultat
Ladda data.
Inläsningen misslyckas eftersom variabeln d utvärderas till 1, vilket inte finns med i listan över tre möjliga värden.
Om man däremot anger d som 2 kommer inläsningen att lyckas.
Exempel – valuestext
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för e måste vara ett av följande textvärden:
Department A
Department B
Department C
En SET-sats som definierar variabeln e.
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
Resultat
Ladda data.
Inläsningen misslyckas eftersom variabeln e är Department D, vilket inte finns med i listan över tillåtna värden som definieras av begränsningen.
Om man däremot anger e som Department C kommer inläsningen att lyckas.
Exempel – SET kontra LET
Dessa exempel visar skillnaderna mellan hur begränsningar tillämpas när SET eller LET används för att definiera variabler. I alla exempel används begränsningar som tillämpar ett type-krav, men dessa principer gäller generellt för alla typer av begränsningar.
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för f måste ha typen number.
En SET-sats som definierar variabeln f.
Laddningsskript
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
Resultat
Ladda data.
Inläsningen misslyckas eftersom begränsningen kräver en numerisk typ för variabeln f. Definitionen av variabeln innehåller ett numeriskt uttryck, men eftersom en SET-sats används utvärderas definitionen som text.
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för g måste ha typen text.
En LET-sats som definierar variabeln g.
Laddningsskript
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
Ladda data.
Inläsningen misslyckas eftersom begränsningen kräver en texttyp för variabeln g. Definitionen av variabeln innehåller ett numeriskt uttryck och en LET-sats används vilket gör att definitionen utvärderas som text.
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för h måste ha typen text.
En SET-sats som definierar variabeln h.
Laddningsskript
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
Ladda data.
Inläsningen lyckas. Inläsningen misslyckas eftersom begränsningen kräver en texttyp för variabeln h. Definitionen av variabeln innehåller ett numeriskt uttryck, men eftersom en SET-sats används utvärderas definitionen som text.
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för i måste ha typen number.
En LET-sats som definierar variabeln i.
Laddningsskript
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
Ladda data.
Inläsningen lyckas. Begränsningen kräver en numerisk typ för variabeln i. Definitionen av variabeln innehåller ett numeriskt uttryck och en LET-sats används vilket gör att definitionen utvärderas som ett tal.
Exempel – Flera begränsningar
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats för att ange att definitionen av variabeln för j måste vara mellan 1 och 5.
Inläsningen lyckas. Variabeln f utvärderas till 2, vilket ligger inom det acceptabla intervallet.
Översikt
Öppna dataladdningsredigeraren och lägg till laddningsskriptet nedan i ett nytt delavsnitt.
Laddningsskriptet innehåller:
En Constrain-sats som gör att variabeln kan vara text eller numerisk, så länge det är ett av de acceptabla värdena.
En LET-sats som definierar variabeln k.
Laddningsskript
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
Ladda data.
Inläsningen lyckas. Värdet för variabeln k finns i listan över godtagbara värden. På samma sätt skulle en angivelse av k som 3 resultera i en lyckad inläsning.
Exempel – lösning av konflikter vid definition av variabler
Översikt
Det här exemplet visar hur konflikter kan uppstå när man lägger till begränsningar för en variabel som redan har definierats i appen vid en tidigare inläsning.
Laddningsskript 1: ställa in en variabel för skriptet
Öppna Skriptredigeraren. Lägg till följande skript:
LET vConflictExample = 'Department C';
Ladda data. Inläsningen lyckades. Variabeln vConflictExample har skapats i appen som en variabel i skriptet.
Laddningsskript 2: försöker definiera begränsning på variabel i tidigare laddningsskript
Ta bort laddningsskript 1. Lägg till följande skript:
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
Ladda data.
Inläsningen misslyckas med ett begränsningsfel, trots att den nya begränsningen och värdedefinitionen är kompatibla. Detta beror på att laddningsskript 1 redan har läst in variabeln i appen, med ett textvärde, och detta värde finns fortfarande kvar i appen. För att lösa detta problem måste vi återställa variabelns begränsning och definition. Se laddningsskript 3.
Laddningsskript 3: återställning av definitioner av begränsningar och värden
Ta bort laddningsskript 2. Lägg till följande skript:
Inläsningen lyckas. Skriptet ovan kan delas upp i tre delar, var och en åtskild av tomma rader:
Den första delen återställer begränsnings- och värdedefinitionen för vConflictExample. Detta tar bort den definition som laddades in i appen med laddningsskript 1.
Den andra delen återanvänder de nya begränsnings- och värdedefinitionerna som misslyckades i laddningsskript 2.
Den tredje delen lägger till testdata så att vi kan öppna arkvyn och granska värdet på variabeln (se nedan).
Öppna arkvyn i redigeringsläge och öppna dialogrutan Variabler. Vi kan se att variabeln vConflictExample har skapats.
Dialogrutan Variabler i arkvyn visar att konflikten med definitionen av variabeln för vConflictExample har lösts.