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.
"number" określa typ liczbowy.
CONSTRAIN vExampleText = {"type": "text"}
CONSTRAIN vExampleNumeric = {"type": "number"}
"maxnum"
Ustawienie maksymalnej wartości zmiennej.
Tylko liczby (całkowite lub zmiennoprzecinkowe). Notacja naukowa jest dozwolona.
CONSTRAIN vExample = {"maxnum": 5000}
"minnum"
Ustawienie minimalnej wartości zmiennej.
Tylko liczby (całkowite lub zmiennoprzecinkowe). Notacja naukowa jest dozwolona.
CONSTRAIN vExample = {"minnum": 250}
"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]
CONSTRAIN vExample = {"valuesnum": [1,2,3]}
"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"]
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 aktualizacji zmiennych w czasie przeładowania można dynamicznie aktualizować zmienne podczas przeładowywania aplikacji, korzystając z właściwości variables w API 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 zmiennych wartości, 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.
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:
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.
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 — 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.
Przykład — 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
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
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
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
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ń.
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.
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.
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.
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
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.
Przeładowanie kończy się powodzeniem. Zmienna f ma wartość 2, która mieści się w dopuszczalnym zakresie.
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
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
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
Załaduj dane.
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
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 Zmienne. 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.