# Constrain

Instrukcja Constrain może być używana w połączeniu z instrukcjami Let lub Set do definiowania zmiennych skryptu. Instrukcja Constrain umożliwia zdefiniowanie ograniczeń możliwych wartości dla tych zmiennych. Jeśli definicja zmiennej naruszy ograniczenia, przeładowanie nie powiedzie się. Dzięki ograniczeniom można wymagać, aby wartości zmiennych były zgodne z określonymi typami, mieściły się w określonych zakresach liczbowych i były zgodne z dopuszczalnymi wartościami, które zostały zdefiniowane przez użytkownika.

Składnia:

Constrain variablename = json

Gdzie:

* variablename jest zmienną skryptu.

* json jest prawidłowym obiektem JSON określającym ograniczenia. Poszczególne ograniczenia są dodawane do tego obiektu jako pary klucz-wartość.

Typy ograniczeń

| Typ ograniczenia (klucz) | Znaczenie | Wymagania dotyczące ograniczeń (wartość) | Przykłady |
| --- | --- | --- | --- |
| `"type"` | Ograniczenie wartości zmiennej do określonego typu danych. | `"text"` określa typ tekstowy.<br><br>`"number"` określa typ liczbowy. | ```<br>CONSTRAIN vExampleText = {"type": "text"}<br>```<br><br>```<br>CONSTRAIN vExampleNumeric = {"type": "number"}<br>``` |
| `"maxnum"` | Ustawienie maksymalnej wartości zmiennej. | Tylko liczby (całkowite lub zmiennoprzecinkowe). Notacja naukowa jest dozwolona. | ```<br>CONSTRAIN vExample = {"maxnum": 5000}<br>``` |
| `"minnum"` | Ustawienie minimalnej wartości zmiennej. | Tylko liczby (całkowite lub zmiennoprzecinkowe). Notacja naukowa jest dozwolona. | ```<br>CONSTRAIN vExample = {"minnum": 250}<br>``` |
| `"valuesnum"` | Określ listę dopuszczalnych wartości liczbowych dla zmiennej. | Lista liczb oddzielonych przecinkami i ujętych w nawiasy kwadratowe. Na przykład: `[1,2,3]` | ```<br>CONSTRAIN vExample = {"valuesnum": [1,2,3]}<br>``` |
| `"valuestext"` | Określ listę dopuszczalnych wartości tekstowych dla zmiennej. | Lista ciągów oddzielonych przecinkami i ujętych w nawiasy kwadratowe. Na przykład: `["a","b","c"]` | ```<br>CONSTRAIN vExample = {"valuestext": ["Department A", "Department B", "Department C"]}<br>``` |

## Kiedy używać instrukcji Constrain

Użyj instrukcji Constrain, aby zapobiec ładowaniu niepożądanych wartości zmiennych do aplikacji analitycznych. W kolejnych sekcjach opisano konkretne sposoby korzystania z niej.

### Aktualizacja zmiennej podczas przeładowania

Instrukcja Constrain jest szczególnie przydatna w połączeniu z aktualizacjami zmiennych w czasie przeładowania. Dzięki aktualizacjom zmiennych w czasie przeładowania można dynamicznie aktualizować zmienne podczas przeładowywania aplikacji, używając właściwości variables w [API Reloads](https://qlik.dev/apis/rest/reloads/). Instrukcja Constrain zapobiega włączaniu szkodliwych lub nieprawidłowo sformatowanych definicji zmiennych do przeładowań analitycznych.

Aktualizacje zmiennych czasu przeładowania, wraz z instrukcją Constrain, są obsługiwane w następujących zastosowaniach:

* Szablonowe aplikacje, które ładują dane selektywnie w oparciu o warunki, takie jak identyfikator lub nazwa klienta (które mogą być przekazywane w czasie ładowania jako zmienne)

* Centralna kontrola nad aplikacjami rozproszonymi w wielu dzierżawach Qlik Cloud

* Migracja zmiennych przepływów pracy i zadań z QlikView i Qlik Sense zarządzany przez klienta do chmury

### Bezpieczeństwo, niezawodność i współpraca

Nawet jeśli jest używana poza sytuacjami aktualizacji zmiennych podczas przeładowania, instrukcja Constrain zwiększa kontrolę bezpieczeństwa podczas tworzenia skryptów ładowania — na przykład podczas wspólnego tworzenia skryptów ładowania. Na przykład właściciel aplikacji może zdefiniować ograniczenia dla wartości zmiennych, informując współpracowników o konkretnych warunkach, które muszą zostać spełnione, aby aplikacja mogła zostać pomyślnie przeładowana.

## Uwagi

* Definicja zmiennej Constrain musi być prawidłowym obiektem JSON.

* Dla jednej zmiennej można określić więcej niż jedno ograniczenie. Wszystkie ograniczenia dla zmiennej muszą być zawarte w pojedynczym obiekcie ograniczenia. Przykłady zawiera temat [Przykłady — różne ograniczenia](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Examples).

* Jeśli zmienna skryptu o określonej nazwie została już załadowana do aplikacji, przyszłe próby zdefiniowania ograniczeń i wartości dla tej zmiennej mogą zakończyć się niepowodzeniem z powodu konfliktów między oryginalnymi i przedefiniowanymi zmiennymi.

  Aby rozwiązać te konflikty, należy zresetować ograniczenia i wartości zmiennej, wstawiając puste definicje. Przykłady:

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

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

  Następnie można ponownie zdefiniować zmienną i jej ograniczenia w kolejnych sekcjach skryptu ładowania. Przykład w dłuższej formie można znaleźć w temacie [Przykład — Rozwiązywanie konfliktów definicji zmiennych](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#ConflictResolve).

* Kolejność definicji zmiennej i definicji ograniczenia nie ma znaczenia. Jednak w przypadku niepowodzenia przeładowania związanego ze zmienną wiersz, w którym wystąpi punkt przerwania, będzie inny.

* Instrukcja skryptu Constrain ogranicza definicje zmiennych tylko do zmiennych skryptu. Można również zastosować ograniczenia do zmiennych skryptu i użytkownika końcowego (tych utworzonych lub zaktualizowanych w widoku arkusza lub jako zmienne sesji za pomocą API) za pomocą publicznego API. Więcej informacji zawiera temat [Alternatywne sposoby definiowania zmiennych ograniczeń dla deweloperów](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Developer).

* Ograniczenia są walidowane, aby uniknąć scenariuszy, które nie mogą dopasować żadnej wartości dla zmiennej. Przykłady nieprawidłowych ograniczeń:

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

## Alternatywne sposoby definiowania zmiennych ograniczeń dla deweloperów

Można również użyć publicznego API do zdefiniowania zmiennych ograniczeń, zamiast używać instrukcji Constrain w skrypcie ładowania. W przypadku zdefiniowania ograniczeń za pośrednictwem interfejsu API wszystkie próby aktualizacji wartości zmiennych — bezpośrednio w skrypcie ładowania, w widoku arkusza lub za pośrednictwem interfejsu [API Reloads](https://qlik.dev/apis/rest/reloads/) — będą podlegać ograniczeniom.

Aby zdefiniować ograniczenia zmiennych za pośrednictwem publicznego interfejsu API, należy użyć obiektu GenericVariableConstraints w interfejsie API Qlik Sense Engine (qix): [GenericVariableConstraints](https://qlik.dev/apis/json-rpc/qix/schemas/).

## Przykład — type

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

#### Niepowodzenie przeładowania przy użyciu "type"

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla a musi być typu number.

* Instrukcja LET definiująca zmienną a.

Skrypt ładowania

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ ograniczenie wymaga typu tekstowego dla zmiennej a. Definicja zmiennej jest liczbą.

Natomiast podanie w ograniczeniu type o wartości number spowodowałoby, że przeładowanie zakończy się powodzeniem.

## Przykład — maxnum

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

#### Niepowodzenie przeładowania przy użyciu "maxnum"

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla b może mieć maksymalną wartość 3000.

* Instrukcja LET definiująca zmienną b.

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ ograniczenie wymaga maksymalnej wartości 3000 dla zmiennej b. Definicja zmiennej ma wartość 3001.

Natomiast określenie b o wartości 2999 spowodowałoby, że przeładowanie zakończy się powodzeniem.

## Przykład — minnum

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

#### Niepowodzenie przeładowania przy użyciu "minnum"

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla b może mieć minimalną wartość 3000.

* Instrukcja LET definiująca zmienną c.

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ ograniczenie wymaga minimalnej wartości 3000 dla zmiennej c. Definicja zmiennej ma wartość 2999.

Natomiast podanie w ograniczeniu c o wartości 3000 spowodowałoby, że przeładowanie zakończy się powodzeniem.

## Przykład — valuesnum

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

#### Niepowodzenie przeładowania przy użyciu "valuesnum"

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla d musi być liczbowa i mieć wartość 2, 3 lub 4.

* Instrukcja LET definiująca zmienną d.

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ zmienna d ma wartość 1, która nie znajduje się na liście trzech możliwych wartości.

Natomiast podanie w ograniczeniu d o wartości 2 spowodowałoby, że przeładowanie zakończy się powodzeniem.

## Przykład — valuestext

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

#### Niepowodzenie przeładowania przy użyciu "valuestext"

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla e musi być jedną z następujących wartości tekstowych:

  * Department A

  * Department B

  * Department C

* Instrukcja SET definiująca zmienną e.

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiodło się, ponieważ zmienna e ma wartość Department D, która nie znajduje się na liście dozwolonych wartości zdefiniowanych przez ograniczenie.

Natomiast podanie w ograniczeniu e o wartości Department C spowodowałoby, że przeładowanie zakończy się powodzeniem.

## Przykłady — SET a LET

Przykłady te pokazują różnice między sposobem stosowania ograniczeń podczas używania SET lub LET do definiowania zmiennej. Wszystkie przykłady wykorzystują ograniczenia stosujące wymóg type, ale zasady te mają ogólne zastosowanie do wszystkich typów ograniczeń.

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

#### Niepowodzenie przeładowania przy użyciu SET

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla f musi być typu number.

* Instrukcja SET definiująca zmienną f.

Skrypt ładowania

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

Wyniki

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ ograniczenie wymaga typu liczbowego dla zmiennej f. Definicja zmiennej zawiera wyrażenie liczbowe, ale ponieważ użyto instrukcji SET, definicja jest traktowana jako tekst.

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

#### Niepowodzenie przeładowania przy użyciu LET

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla g musi być typu text.

* Instrukcja LET definiująca zmienną g.

Skrypt ładowania

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

Załadowanie danych.

Przeładowanie nie powiedzie się, ponieważ ograniczenie wymaga typu tekstowego dla zmiennej g. Definicja zmiennej zawiera wyrażenie liczbowe i używa się instrukcji LET, co powoduje że definicja jest traktowana jako tekst.

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

#### Pomyślne przeładowanie przy użyciu SET

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla h musi być typu text.

* Instrukcja SET definiująca zmienną h.

Skrypt ładowania

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

Załadowanie danych.

Przeładowanie kończy się powodzeniem. Ograniczenie wymaga typu tekstowego dla zmiennej h. Definicja zmiennej zawiera wyrażenie liczbowe, ale ponieważ użyto instrukcji SET, definicja jest traktowana jako tekst.

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

#### Pomyślne przeładowanie przy użyciu LET

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla i musi być typu number.

* Instrukcja LET definiująca zmienną i.

Skrypt ładowania

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

Załadowanie danych.

Przeładowanie kończy się powodzeniem. Ograniczenie wymaga typu liczbowego dla zmiennej i. Definicja zmiennej zawiera wyrażenie liczbowe i używa się instrukcji LET, co powoduje że definicja jest traktowana jako tekst.

## Przykłady — różne ograniczenia

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

#### Ustawianie wartości minimalnych i maksymalnych

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain określająca, że definicja zmiennej dla j musi zawierać się między 1 a 5.

* Instrukcja LET definiująca zmienną j.

Skrypt ładowania

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

Załadowanie danych.

Przeładowanie kończy się powodzeniem. Zmienna f ma wartość 2, która mieści się w dopuszczalnym zakresie.

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

#### Akceptowanie zarówno tekstu, jak i liczb z list

Przegląd

Otwórz Edytor ładowania danych i poniżej dodaj skrypt ładowania do nowej sekcji.

Skrypt ładowania zawiera:

* Instrukcja Constrain pozwalająca, by zmienna była tekstowa lub numeryczna, o ile jest to jedna z dopuszczalnych wartości.

* Instrukcja LET definiująca zmienną k.

Skrypt ładowania

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

Załadowanie danych.

Przeładowanie kończy się powodzeniem. Wartość zmiennej k znajduje się na liście dopuszczalnych wartości. Podobnie określenie k jako 3 spowodowałoby pomyślne przeładowanie.

## Przykład — Rozwiązywanie konfliktów definicji zmiennych

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

#### Skrypt ładowania i wyniki

Przegląd

Ten przykład pokazuje, jak może dojść do konfliktów definicji zmiennej podczas dodawania ograniczeń dla zmiennej, która została już zdefiniowana w aplikacji z poprzedniego ładowania.

Skrypt ładowania 1: ustawianie zmiennej skryptu

Otwórz program Edytor ładowania danych. Dodaj następujący skrypt:

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

Załadowanie danych. Przeładowanie powiodło się. Zmienna vConflictExample została utworzona w aplikacji jako zmienna skryptu.

Skrypt ładowania 2: próba zdefiniowania ograniczenia na wcześniej załadowanej zmiennej skryptu

Usuń skrypt ładowania 1. Dodaj następujący skrypt:

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

Załadowanie danych.

Przeładowanie nie powiodło się wskutek błędu ograniczenia, mimo że nowe ograniczenie i definicja wartości są zgodne. Dzieje się tak, ponieważ skrypt ładowania 1 załadował już zmienną do aplikacji z wartością tekstową i ta wartość jest nadal przechowywana w aplikacji. Aby rozwiązać ten problem, musimy zresetować ograniczenie i definicję zmiennej. Patrz skrypt ładowania 3.

Skrypt ładowania 3: resetowanie definicji ograniczeń i wartości

Usuń skrypt ładowania 2. Dodaj następujący skrypt:

```
CONSTRAIN vConflictExample;
LET vConflictExample;

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

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

Załadowanie danych.

Przeładowanie kończy się powodzeniem. Powyższy skrypt można podzielić na trzy części, z których każda oddzielona jest pustymi liniami:

* Pierwsza część resetuje ograniczenie i definicję wartości dla vConflictExample. Powoduje to usunięcie definicji, która została załadowana do aplikacji za pomocą skryptu ładowania 1.

* Druga część ponownie stosuje nowe definicje ograniczeń i wartości, które spowodowały niepowodzenie w skrypcie ładowania 2.

* Trzecia część dodaje przykładowe dane, dzięki czemu możemy otworzyć widok arkusza i sprawdzić wartość zmiennej (patrz poniżej).

Otwórz widok arkusza w trybie edycji i otwórz okno dialogowe the Zmienne icon . Widzimy, że zmienna vConflictExample została pomyślnie utworzona.

Okno dialogowe Zmienne w widoku arkusza pokazujące, że konflikt definicji zmiennej dla vConflictExample został rozwiązany.

Okno dialogowe Zmienne w widoku arkusza pokazujące, że konflikt definicji zmiennej dla vConflictExample został rozwiązany.

Okno dialogowe Zmienne w widoku arkusza pokazujące, że konflikt definicji zmiennej dla vConflictExamplevConflictExample został rozwiązany. ![Okno dialogowe Zmienne w widoku arkusza pokazujące, że zmienna skryptu została pomyślnie utworzona.](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_script-variable_constrain-conflict-resolved.png)

## Dowiedz się więcej

* [Let](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Let.htm)
* [Set](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Set.htm)
* [Praca ze zmiennymi w edytorze ładowania danych](https://help.qlik.com/pl-PL/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)