Constrain 문은 스크립트 변수를 정의하기 위해 Let 또는 Set 문과 함께 사용할 수 있습니다. Constrain 문을 사용하면 이러한 변수에 대한 가능한 값에 대한 제약 조건을 정의할 수 있습니다. 변수 정의가 제약 조건을 위반하면 다시 로드가 실패합니다. 제약 조건을 사용하면 변수 값이 특정 유형과 일치하고, 특정 숫자 범위 내에 속하며, 정의한 허용 가능한 값과 일치하도록 요구할 수 있습니다.
구문:
Constrain variablename = json
여기서:
variablename은 스크립트 변수입니다.
json은 제약 조건을 지정하는 유효한 JSON 개체입니다. 개별 제약 조건은 키-값 쌍으로 이 개체에 추가됩니다.
Constrain 문을 사용하여 원하지 않는 변수 값이 분석 앱에 로드되는 것을 방지합니다. 다음 섹션에서는 이를 사용할 수 있는 구체적인 방법을 설명합니다.
다시 로드 시간 변수 업데이트
Constrain은 특히 다시 로드 시간 변수 업데이트와 함께 사용하면 유용합니다. 다시 로드 시간 변수 업데이트를 사용하면 Reloads API의 variables 속성을 사용하여 앱 다시 로드 중에 변수를 동적으로 업데이트할 수 있습니다. Constrain 문은 악의적이거나 잘못된 형식의 변수 정의가 분석 다시 로드에 통합되는 것을 방지합니다.
다시 로드 시간 변수 업데이트는 Constrain 문과 함께 다음 사용 사례를 지원합니다.
고객 ID 또는 이름(로드 시 변수로 전달 가능)과 같은 조건에 따라 선택적으로 데이터를 로드하는 템플릿 앱
여러 Qlik Cloud 테넌트에 분산된 앱에 대한 중앙 제어
QlikView 및 Qlik Sense 클라이언트 관리에서 변수 지향 워크플로 및 작업을 클라우드로 마이그레이션
보안, 안정성 및 공동 작업
다시 로드 시간 변수 업데이트 시나리오 외부에서 사용되는 경우에도 Constrain은 로드 스크립트 작성에 대한 보안 제어를 강화합니다(예: 공동 작업 로드 스크립트 개발 중). 예를 들어, 앱 소유자는 변수 값에 대한 제약 조건을 정의하여 공동 작업자에게 앱을 성공적으로 다시 로드하기 위해 충족해야 하는 특정 조건을 알릴 수 있습니다.
고려사항
변수에 대한 Constrain 정의는 유효한 JSON 개체여야 합니다.
하나의 변수에 대해 두 개 이상의 제약 조건을 지정할 수 있습니다. 변수에 대한 모든 제약 조건은 단일 제약 조건 개체에 포함되어야 합니다. 예를 보려면 예 - 다중 제약 조건를 참조하십시오.
특정 이름의 스크립트 변수를 앱에 이미 로드한 경우, 나중에 해당 변수에 대한 제약 조건과 값을 정의하려는 시도는 원래 변수와 다시 정의된 변수 간의 충돌로 인해 실패할 수 있습니다.
이러한 충돌을 해결하려면 빈 정의를 삽입하여 변수 제약 조건과 값을 다시 설정합니다. 예:
CONSTRAIN x;
LET x;
CONSTRAIN x;
SET x;
그런 다음 로드 스크립트의 후속 섹션에서 변수와 해당 제약 조건을 다시 정의할 수 있습니다. 긴 형식의 예는 예 - 변수 정의 충돌 해결을 참조하십시오.
변수 정의와 제약 조건 정의의 순서는 중요하지 않습니다. 그러나 변수 관련 다시 로드 실패가 발생하는 경우 중단점이 발생하는 줄은 달라집니다.
Constrain 스크립트 문은 스크립트 변수에 대한 변수 정의만 제한합니다. 공개 API를 사용하여 스크립트 및 최종 사용자 변수(API를 사용하여 시트 보기 또는 세션 변수로 만들기 또는 업데이트된 변수)에 제약 조건을 적용할 수도 있습니다. 자세한 내용은 변수 제약 조건 정의를 위한 개발자 대안을 참조하십시오.
변수 제약 조건 정의를 위한 개발자 대안
로드 스크립트에서 Constrain 문을 사용하는 대신 공개 API를 사용하여 변수 제약 조건을 정의할 수도 있습니다. API를 통해 제약 조건을 정의하는 경우 로드 스크립트에서 직접, 시트 보기에서 또는 다시 로드 API를 통해 변수 값을 업데이트하려는 모든 시도에는 제약 조건이 적용됩니다.
공개 API를 통해 변수 제약 조건을 정의하려면 Qlik Sense Engine (qix) API의 GenericVariableConstraints 개체인 GenericVariableConstraints를 사용합니다.
예 - type
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
a에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.
변수 a를 정의하는 LET 문.
로드 스크립트
CONSTRAIN a = {"type": "text"};
LET a = 1000;
결과
데이터를 로드합니다.
제약 조건에 a 변수에 대한 텍스트 유형이 필요하기 때문에 다시 로드가 실패합니다. 변수 정의는 숫자입니다.
이와 대조적으로 제약 조건에서 type을 number로 지정하면 다시 로드가 성공합니다.
예 - maxnum
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
b에 대한 변수 정의가 최대 3000의 값을 가질 수 있음을 지정하는 Constrain 문.
변수 b를 정의하는 LET 문.
CONSTRAIN b = {"maxnum": "3000"};
LET b = 3001;
결과
데이터를 로드합니다.
제약 조건이 변수 b에 대해 최댓값 3000을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의는 3001로 평가됩니다.
이와 대조적으로 b를 2999로 지정하면 다시 로드가 성공합니다.
예 - minnum
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
b에 대한 변수 정의가 최소 3000의 값을 가질 수 있음을 지정하는 Constrain 문.
변수 c를 정의하는 LET 문.
CONSTRAIN c = {"minnum": "3000"};
LET c = 2999;
결과
데이터를 로드합니다.
제약 조건이 변수 c에 대해 최솟값 3000을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의는 2999로 평가됩니다.
이와 대조적으로 c를 3000으로 지정하면 다시 로드가 성공합니다.
예 - valuesnum
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
d에 대한 변수 정의가 숫자형이어야 하며 2, 3 또는 4여야 함을 지정하는 Constrain 문.
변수 d를 정의하는 LET 문.
CONSTRAIN d = {"valuesnum": [2,3,4]};
LET d = 1;
결과
데이터를 로드합니다.
변수 d이 1로 평가되는데, 이는 가능한 세 가지 값 목록에 없기 때문에 다시 로드가 실패합니다.
이와 대조적으로 d를 2로 지정하면 다시 로드가 성공합니다.
예 - valuestext
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
e에 대한 변수 정의가 다음 텍스트 값 중 하나여야 함을 지정하는 Constrain 문:
Department A
Department B
Department C
변수 e를 정의하는 SET 문.
CONSTRAIN e = {"valuestext": ["Department A", "Department B", "Department C"]};
SET e = Department D;
결과
데이터를 로드합니다.
변수 e가 Department D이고, 이는 제약 조건에 의해 정의된 허용 값 목록에 없기 때문에 다시 로드가 실패합니다.
이와 대조적으로 e를 Department C로 지정하면 다시 로드가 성공합니다.
예 - SET 및 LET
다음 예에서는 변수 정의 중에 SET 또는 LET를 사용할 때 제약 조건이 적용되는 방식의 차이점을 보여 줍니다. 모든 예에서는 type 요구 사항을 적용하는 제약 조건을 사용하지만 이러한 원칙은 일반적으로 모든 제약 조건 유형에 적용됩니다.
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
f에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.
변수 f를 정의하는 SET 문.
로드 스크립트
CONSTRAIN f = {"type": "number"};
SET f = 500*2;
결과
데이터를 로드합니다.
제약 조건이 변수 f에 숫자 유형을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의에는 숫자 표현식이 포함되어 있지만 SET 문이 사용되었기 때문에 정의가 텍스트로 평가됩니다.
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
g에 대한 변수 정의가 text 유형이어야 함을 지정하는 Constrain 문.
변수 g를 정의하는 LET 문.
로드 스크립트
CONSTRAIN g = {"type": "text"};
LET g = 500*2;
데이터를 로드합니다.
제약 조건에 g 변수에 대한 텍스트 유형이 필요하기 때문에 다시 로드가 실패합니다. 변수 정의에는 숫자 표현식이 포함되어 있으며 LET 문이 사용되어 정의가 숫자로 평가됩니다.
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
h에 대한 변수 정의가 text 유형이어야 함을 지정하는 Constrain 문.
변수 h를 정의하는 SET 문.
로드 스크립트
CONSTRAIN h = {"type": "text"};
SET h = 500*2;
데이터를 로드합니다.
다시 로드가 성공합니다. 제약 조건에는 h 변수에 대한 텍스트 유형이 필요합니다. 변수 정의에는 숫자 표현식이 포함되어 있지만 SET 문이 사용되었기 때문에 정의가 텍스트로 평가됩니다.
개요
데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.
로드 스크립트에는 다음이 포함됩니다.
i에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.
변수 i를 정의하는 LET 문.
로드 스크립트
CONSTRAIN i = {"type": "number"};
LET i = 500*2;
데이터를 로드합니다.
다시 로드가 성공합니다. 제약 조건에는 i 변수에 대한 숫자 유형이 필요합니다. 변수 정의에는 숫자 표현식이 포함되어 있으며 LET 문이 사용되어 정의가 숫자로 평가됩니다.
변수가 허용되는 값 중 하나인 한, 변수가 텍스트 또는 숫자가 될 수 있도록 하는 Constrain 문입니다.
변수 k를 정의하는 LET 문.
로드 스크립트
CONSTRAIN k = {"valuestext": ["abc","def","ghi"], "valuesnum": [0,1,3,5]};
LET k = 'def';
데이터를 로드합니다.
다시 로드가 성공합니다. 변수 k의 값은 허용 가능한 값 목록에서 찾을 수 있습니다. 마찬가지로 k를 3으로 지정하면 성공적으로 다시 로드됩니다.
예 - 변수 정의 충돌 해결
개요
이 예는 이전 로드에서 앱에 이미 정의된 변수에 대한 제약 조건을 추가할 때 변수 정의 충돌이 발생할 수 있는 방식을 보여 줍니다.
로드 스크립트 1: 스크립트 변수 설정
데이터 로드 편집기을 엽니다. 다음 스크립트를 추가합니다.
LET vConflictExample = 'Department C';
데이터를 로드합니다. 다시 로드가 성공합니다. 변수 vConflictExample이 스크립트 변수로 앱에 만들어졌습니다.
로드 스크립트 2: 이전에 로드된 스크립트 변수에 대한 제약 조건 정의 시도
로드 스크립트 1을 삭제합니다. 다음 스크립트를 추가합니다.
CONSTRAIN vConflictExample = {"type": "number"};
LET vConflictExample = 123;
데이터를 로드합니다.
새 제약 조건과 값 정의가 호환되더라도 제약 조건 오류로 인해 다시 로드가 실패합니다. 이는 로드 스크립트 1이 이미 텍스트 값을 포함한 변수를 앱에 로드했고, 이 값이 앱에 계속 남아 있기 때문입니다. 이 문제를 해결하려면 변수 제약 조건과 정의를 다시 설정해야 합니다. 로드 스크립트 3을 참조하십시오.