# Constrain

Constrain 문은 스크립트 변수를 정의하기 위해 Let 또는 Set 문과 함께 사용할 수 있습니다. Constrain 문을 사용하면 이러한 변수에 대한 가능한 값에 대한 제약 조건을 정의할 수 있습니다. 변수 정의가 제약 조건을 위반하면 다시 로드가 실패합니다. 제약 조건을 사용하면 변수 값이 특정 유형과 일치하고, 특정 숫자 범위 내에 속하며, 정의한 허용 가능한 값과 일치하도록 요구할 수 있습니다.

구문:

Constrain variablename = json

위치:

* variablename은 스크립트 변수입니다.

* json은 제약 조건을 지정하는 유효한 JSON 개체입니다. 개별 제약 조건은 키-값 쌍으로 이 개체에 추가됩니다.

제약 유형

| 제약 유형(키) | 의미 | 제약 조건 요구 사항(값) | 예 |
| --- | --- | --- | --- |
| `"type"` | 변수 값을 특정 데이터 유형으로 제한합니다. | `"text"`는 텍스트 유형을 지정합니다.<br><br>`"number"`는 숫자 유형을 지정합니다. | ```<br>CONSTRAIN vExampleText = {"type": "text"}<br>```<br><br>```<br>CONSTRAIN vExampleNumeric = {"type": "number"}<br>``` |
| `"maxnum"` | 변수의 최댓값을 설정합니다. | 숫자만 가능합니다(정수 또는 부동 소수점). 과학적 표기법이 허용됩니다. | ```<br>CONSTRAIN vExample = {"maxnum": 5000}<br>``` |
| `"minnum"` | 변수의 최솟값을 설정합니다. | 숫자만 가능합니다(정수 또는 부동 소수점). 과학적 표기법이 허용됩니다. | ```<br>CONSTRAIN vExample = {"minnum": 250}<br>``` |
| `"valuesnum"` | 변수에 허용되는 숫자 값 목록을 정의합니다. | 대괄호로 묶인 숫자를 쉼표로 구분한 목록. 예: `[1,2,3]` | ```<br>CONSTRAIN vExample = {"valuesnum": [1,2,3]}<br>``` |
| `"valuestext"` | 변수에 허용되는 텍스트 값 목록을 정의합니다. | 대괄호로 묶인 문자열을 쉼표로 구분한 목록. 예: `["a","b","c"]` | ```<br>CONSTRAIN vExample = {"valuestext": ["Department A", "Department B", "Department C"]}<br>``` |

## Constrain 문을 사용하는 경우

Constrain 문을 사용하여 원하지 않는 변수 값이 분석 응용 프로그램에 로드되는 것을 방지합니다. 다음 섹션에서는 이를 사용할 수 있는 구체적인 방법을 설명합니다.

### 다시 로드 시간 변수 업데이트

Constrain은 특히 다시 로드 시간 변수 업데이트와 함께 사용하면 유용합니다. 다시 로드 시간 변수 업데이트를 사용하면 [Reloads API](https://qlik.dev/apis/rest/reloads/)의 variables 속성을 사용하여 응용 프로그램 다시 로드 중에 변수를 동적으로 업데이트할 수 있습니다. Constrain 문은 악의적이거나 잘못된 형식의 변수 정의가 분석 다시 로드에 통합되는 것을 방지합니다.

다시 로드 시간 변수 업데이트는 Constrain 문과 함께 다음 사용 사례를 지원합니다.

* 고객 ID 또는 이름(로드 시 변수로 전달 가능)과 같은 조건에 따라 선택적으로 데이터를 로드하는 템플릿 응용 프로그램

* 여러 Qlik Cloud 테넌트에 분산된 응용 프로그램에 대한 중앙 제어

* QlikView 및 Qlik Sense 클라이언트 관리에서 변수 지향 워크플로 및 작업을 클라우드로 마이그레이션

### 보안, 안정성 및 공동 작업

다시 로드 시간 변수 업데이트 시나리오 외부에서 사용되는 경우에도 Constrain은 로드 스크립트 작성에 대한 보안 제어를 강화합니다(예: 공동 작업 로드 스크립트 개발 중). 예를 들어, 응용 프로그램 소유자는 변수 값에 대한 제약 조건을 정의하여 공동 작업자에게 응용 프로그램이 안정적으로 성공적으로 다시 로드되기 위해 충족해야 하는 특정 조건을 알릴 수 있습니다.

## 고려사항

* 변수에 대한 Constrain 정의는 유효한 JSON 개체여야 합니다.

* 하나의 변수에 대해 두 개 이상의 제약 조건을 지정할 수 있습니다. 변수에 대한 모든 제약 조건은 단일 제약 조건 개체에 포함되어야 합니다. 예를 보려면 [예 - 다중 제약 조건](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Examples)를 참조하십시오.

* 특정 이름의 스크립트 변수를 응용 프로그램에 이미 로드한 경우, 나중에 해당 변수에 대한 제약 조건과 값을 정의하려는 시도는 원래 변수와 다시 정의된 변수 간의 충돌로 인해 실패할 수 있습니다.

  이러한 충돌을 해결하려면 빈 정의를 삽입하여 변수 제약 조건과 값을 다시 설정합니다. 예:

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

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

  그런 다음 로드 스크립트의 후속 섹션에서 변수와 해당 제약 조건을 다시 정의할 수 있습니다. 긴 형식의 예는 [예 - 변수 정의 충돌 해결](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#ConflictResolve)을 참조하십시오.

* 변수 정의와 제약 조건 정의의 순서는 중요하지 않습니다. 그러나 변수 관련 다시 로드 실패가 발생하는 경우 중단점이 발생하는 줄은 달라집니다.

* Constrain 스크립트 문은 스크립트 변수에 대한 변수 정의만 제한합니다. 공개 API를 사용하여 스크립트 및 최종 사용자 변수(API를 사용하여 시트 보기 또는 세션 변수로 만들기 또는 업데이트된 변수)에 제약 조건을 적용할 수도 있습니다. 자세한 내용은 [변수 제약 조건 정의를 위한 개발자 대안](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Constrain.htm#Developer)을 참조하십시오.

* 변수에 대해 어떤 값과도 일치하지 않는 시나리오를 방지하기 위해 제약 조건의 유효성이 검사됩니다. 유효하지 않은 제약 조건의 예시:

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

## 변수 제약 조건 정의를 위한 개발자 대안

로드 스크립트에서 Constrain 문을 사용하는 대신 공개 API를 사용하여 변수 제약 조건을 정의할 수도 있습니다. API를 통해 제약 조건을 정의하는 경우 로드 스크립트에서 직접, 시트 보기에서 또는 [다시 로드 API](https://qlik.dev/apis/rest/reloads/)를 통해 변수 값을 업데이트하려는 모든 시도에는 제약 조건이 적용됩니다.

공개 API를 통해 변수 제약 조건을 정의하려면 Qlik Sense Engine (qix) API의 GenericVariableConstraints 개체인 [GenericVariableConstraints](https://qlik.dev/apis/json-rpc/qix/schemas/)를 사용합니다.

## 예 - type

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

#### "type"으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* a에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.

* 변수 a를 정의하는 LET 문.

로드 스크립트

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

결과

데이터 로드를 요청합니다.

제약 조건에 a 변수에 대한 텍스트 유형이 필요하기 때문에 다시 로드가 실패합니다. 변수 정의는 숫자입니다.

이와 대조적으로 제약 조건에서 type을 number로 지정하면 다시 로드가 성공합니다.

## 예 - maxnum

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

#### "maxnum"으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* b에 대한 변수 정의가 최대 3000의 값을 가질 수 있음을 지정하는 Constrain 문.

* 변수 b를 정의하는 LET 문.

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

결과

데이터 로드를 요청합니다.

제약 조건이 변수 b에 대해 최댓값 3000을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의는 3001로 평가됩니다.

이와 대조적으로 b를 2999로 지정하면 다시 로드가 성공합니다.

## 예 - minnum

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

#### "minnum"으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* b에 대한 변수 정의가 최소 3000의 값을 가질 수 있음을 지정하는 Constrain 문.

* 변수 c를 정의하는 LET 문.

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

결과

데이터 로드를 요청합니다.

제약 조건이 변수 c에 대해 최솟값 3000을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의는 2999로 평가됩니다.

이와 대조적으로 c를 3000으로 지정하면 다시 로드가 성공합니다.

## 예 - valuesnum

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

#### "valuesnum"으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* d에 대한 변수 정의가 숫자형이어야 하며 2, 3 또는 4여야 함을 지정하는 Constrain 문.

* 변수 d를 정의하는 LET 문.

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

결과

데이터 로드를 요청합니다.

변수 d이 1로 평가되는데, 이는 가능한 세 가지 값 목록에 없기 때문에 다시 로드가 실패합니다.

이와 대조적으로 d를 2로 지정하면 다시 로드가 성공합니다.

## 예 - valuestext

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

#### "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 요구 사항을 적용하는 제약 조건을 사용하지만 이러한 원칙은 일반적으로 모든 제약 조건 유형에 적용됩니다.

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

#### SET으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* f에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.

* 변수 f를 정의하는 SET 문.

로드 스크립트

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

결과

데이터 로드를 요청합니다.

제약 조건이 변수 f에 숫자 유형을 요구하기 때문에 다시 로드가 실패합니다. 변수 정의에는 숫자 표현식이 포함되어 있지만 SET 문이 사용되었기 때문에 정의가 텍스트로 평가됩니다.

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

#### LET으로 다시 로드에 실패했습니다.

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* g에 대한 변수 정의가 text 유형이어야 함을 지정하는 Constrain 문.

* 변수 g를 정의하는 LET 문.

로드 스크립트

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

데이터 로드를 요청합니다.

제약 조건에 g 변수에 대한 텍스트 유형이 필요하기 때문에 다시 로드가 실패합니다. 변수 정의에는 숫자 표현식이 포함되어 있으며 LET 문이 사용되어 정의가 숫자로 평가됩니다.

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

#### SET으로 다시 로드 성공

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* h에 대한 변수 정의가 text 유형이어야 함을 지정하는 Constrain 문.

* 변수 h를 정의하는 SET 문.

로드 스크립트

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

데이터 로드를 요청합니다.

다시 로드가 성공합니다. 제약 조건에는 h 변수에 대한 텍스트 유형이 필요합니다. 변수 정의에는 숫자 표현식이 포함되어 있지만 SET 문이 사용되었기 때문에 정의가 텍스트로 평가됩니다.

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

#### LET으로 다시 로드 성공

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* i에 대한 변수 정의가 number 유형이어야 함을 지정하는 Constrain 문.

* 변수 i를 정의하는 LET 문.

로드 스크립트

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

데이터 로드를 요청합니다.

다시 로드가 성공합니다. 제약 조건에는 i 변수에 대한 숫자 유형이 필요합니다. 변수 정의에는 숫자 표현식이 포함되어 있으며 LET 문이 사용되어 정의가 숫자로 평가됩니다.

## 예 - 다중 제약 조건

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

#### 최솟값 및 최댓값 설정

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* j에 대한 변수 정의가 1~5 사이여야 함을 지정하는 Constrain 문.

* 변수 j를 정의하는 LET 문.

로드 스크립트

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

데이터 로드를 요청합니다.

다시 로드가 성공합니다. 변수 f은 허용 범위 내에 있는 2로 평가됩니다.

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

#### 목록에서 텍스트와 숫자 모두 허용

개요

데이터 로드 편집기를 열고 새 섹션에 아래 로드 스크립트를 추가합니다.

로드 스크립트에는 다음이 포함됩니다.

* 변수가 허용되는 값 중 하나인 한, 변수가 텍스트 또는 숫자가 될 수 있도록 하는 Constrain 문입니다.

* 변수 k를 정의하는 LET 문.

로드 스크립트

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

데이터 로드를 요청합니다.

다시 로드가 성공합니다. 변수 k의 값은 허용 가능한 값 목록에서 찾을 수 있습니다. 마찬가지로 k를 3으로 지정하면 성공적으로 다시 로드됩니다.

## 예 - 변수 정의 충돌 해결

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

#### 로드 스크립트 및 결과

개요

이 예는 이전 로드에서 응용 프로그램에 이미 정의된 변수에 대한 제약 조건을 추가할 때 변수 정의 충돌이 발생할 수 있는 방식을 보여 줍니다.

로드 스크립트 1: 스크립트 변수 설정

데이터 로드 편집기를 엽니다. 다음 스크립트를 추가합니다.

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

데이터 로드를 요청합니다. 다시 로드가 성공합니다. 변수 vConflictExample이(가) 스크립트 변수로 응용 프로그램에 생성되었습니다.

로드 스크립트 2: 이전에 로드된 스크립트 변수에 대한 제약 조건 정의 시도

로드 스크립트 1을 삭제합니다. 다음 스크립트를 추가합니다.

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

데이터 로드를 요청합니다.

새 제약 조건과 값 정의가 호환되더라도 제약 조건 오류로 인해 다시 로드가 실패합니다. 이는 로드 스크립트 1이 이미 텍스트 값을 포함한 변수를 응용 프로그램에 로드했고, 이 값이 응용 프로그램에 계속 남아 있기 때문입니다. 이 문제를 해결하려면 변수 제약 조건과 정의를 다시 설정해야 합니다. 로드 스크립트 3을 참조하십시오.

로드 스크립트 3: 제약 조건 및 값 정의 다시 설정

로드 스크립트 2를 삭제합니다. 다음 스크립트를 추가합니다.

```
CONSTRAIN vConflictExample;
LET vConflictExample;

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

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

데이터 로드를 요청합니다.

다시 로드가 성공합니다. 위 스크립트는 빈 줄로 구분된 세 부분으로 나눌 수 있습니다.

* 첫 번째 부분은 vConflictExample에 대한 제약 조건과 값 정의를 다시 설정합니다. 이렇게 하면 로드 스크립트 1을 통해 응용 프로그램에 로드된 정의가 제거됩니다.

* 두 번째 부분에서는 로드 스크립트 2에서 실패한 새 제약 조건과 값 정의를 다시 적용합니다.

* 세 번째 부분에서는 모의 데이터를 추가하여 시트 보기를 열고 변수 값을 검사할 수 있습니다(아래 참조).

편집 모드에서 시트 보기를 열고 the 변수 icon 대화 상자를 엽니다. vConflictExample 변수가 성공적으로 만들어졌음을 확인할 수 있습니다.

시트 보기의 변수 대화 상자에서 vConflictExample에 대한 변수 정의 충돌이 해결되었음을 보여 줍니다.

시트 보기의 변수 대화 상자에서 vConflictExample에 대한 변수 정의 충돌이 해결되었음을 보여 줍니다.

시트 보기의 변수 대화 상자에서 vConflictExamplevConflictExample에 대한 변수 정의 충돌이 해결되었음을 보여 줍니다. ![스크립트 변수가 성공적으로 만들어졌음을 보여 주는 시트 보기의 변수 대화 상자.](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Resources/Images/ui_script-variable_constrain-conflict-resolved.png)

## 자세한 정보

* [Let](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Let.htm)
* [Set](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/ScriptRegularStatements/Set.htm)
* [데이터 로드 편집기에서 변수를 사용하여 작업](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Scripting/work-with-variables-in-data-load-editor.htm)