# When

when 접두사 및 접미사는 문 또는 exit 절을 실행할지 여부를 결정하는 조건절을 만드는 데 사용됩니다. 전체 if..end if 문의 간단한 대체 옵션으로 사용되는 경우도 있습니다.

구문:

(when condition statement | exitstatement when condition )

반환 데이터 유형: 부울

Qlik Sense에서 부울 true 값은 -1로 표시되고 false 값은 0으로 표시됩니다.

statement 또는 exitstatement는 조건이 TRUE로 평가된 경우에만 실행됩니다.

`When` 접두사는 추가 `When` 또는 `Unless` 접두사를 포함하여 이미 하나 또는 여러 다른 명령문이 있는 명령문에 사용될 수 있습니다.

When 접두사를 사용하는 경우

`When` 문은 부울 결과를 반환합니다. 일반적으로 이러한 유형의 함수는 사용자가 스크립트의 일부를 로드하거나 제외하려는 경우 조건으로 사용됩니다.

인수

| 인수 | 설명 |
| --- | --- |
| condition | TRUE 또는 FALSE로 평가되는 논리 표현식 |
| statement | 제어 문을 제외한 Qlik Sense 스크립트 문입니다. |
| exitstatement | exit for, exit do 또는 exit sub 절 혹은 exit script 문. |

## 국가별 설정

달리 지정하지 않는 한 이 항목의 예에서는 다음 날짜 형식을 사용합니다: MM/DD/YYYY. 날짜 형식은 데이터 로드 스크립트의 `SET DateFormat` 문에 지정됩니다. 기본 날짜 형식은 지역 설정 및 기타 요인으로 인해 시스템에서 다를 수 있습니다. 아래 예의 형식을 요구 사항에 맞게 변경할 수 있습니다. 또는 이러한 예와 일치하도록 로드 스크립트의 형식을 변경할 수 있습니다. 자세한 내용은 [응용 프로그램 및 스크립트에 대한 지역 설정 수정](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)를 참조하십시오.

응용 프로그램의 기본 지역 설정은 사용자 프로필을 기반으로 합니다. 이러한 국가별 형식 설정은 Qlik Cloud 사용자 인터페이스에 표시되는 언어와 관련이 없습니다. Qlik Cloud는 사용 중인 브라우저와 동일한 언어로 표시됩니다.

응용 프로그램 작성자인 경우 만든 응용 프로그램의 기본 지역을 설정할 수 있습니다. 자세한 내용은 [Qlik Cloud 분석에서 앱 및 스크립트 만들기를 위한 기본 지역 설정 지정](https://help.qlik.com/ko-KR/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)을 참조하십시오.

함수 예

| 예제 | 결과 |
| --- | --- |
| ` exit script when A=1;  ` | `A=1` 문이 TRUE로 평가되면 스크립트가 중지됩니다. |
| `when A=1 LOAD * from myfile.csv;` | `A=1` 문이 TRUE로 평가되면 `myfile.csv`가 로드됩니다. |
| `when A=1 unless B=2 drop table Tab1;` | `A=1` 문이 TRUE로 평가되고 `B=2`가 FALSE로 평가되면 `Tab1` 테이블이 삭제됩니다. |

## 예 1 – When 접두사

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

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

개요

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

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

* '`Transactions`'라는 테이블로 전송되는 날짜 및 금액이 포함된 데이터 집합.

* 변수 `A`가 만들어져 값 `1`을 갖는다는 `Let` 문.

* `A`가 `1`이면 스크립트가 계속 로드된다는 조건을 제공하는 `When` 조건.

로드 스크립트

```
LET A = 1; 

WHEN A = 1 
 
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `id`
* `date`
* `amount`

결과 테이블

| ID | 날짜 | 금액 |
| --- | --- | --- |
| 1 | 08/30/2018 | 23.56 |
| 2 | 09/07/2018 | 556.31 |
| 3 | 09/16/2018 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 09/22/2018 | 59.18 |
| 7 | 09/23/2018 | 177.42 |

변수 `A`는 스크립트 시작 시 값 `1`을 할당받았으므로 `When` 접두사 뒤에 오는 조건을 평가하여 결과 TRUE를 반환합니다. TRUE 결과를 반환하므로 스크립트는 계속해서 LOAD 문을 실행합니다. 결과 테이블의 모든 레코드를 볼 수 있습니다.

이 변수 값이 `1`과 같지 않은 값으로 설정되면 데이터 모델에 데이터가 로드되지 않습니다.

## 예 2 – When 접미사

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

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

개요

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

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

* 날짜와 금액이 포함된 3개의 데이터 집합이 '`Transactions`'라는 테이블로 전송됩니다.

  * 첫 번째 데이터 집합에는 트랜잭션 1-7이 포함됩니다.

  * 두 번째 데이터 집합에는 트랜잭션 8-14가 포함됩니다.

  * 세 번째 데이터 집합에는 트랜잭션 15-21이 포함됩니다.

* '`Transactions`' 테이블에 10개보다 많은 행이 포함되어 있는지 여부를 확인하는 `When` 조건. `When` 문 중 하나라도 TRUE로 평가되면 로드 스크립트가 중지됩니다. 이 조건은 세 개의 데이터 집합 각각의 끝에 배치됩니다.

로드 스크립트

```
Transactions: 
LOAD  
*  
Inline [ 
id, date, amount 
1, 08/30/2018, 23.56 
2, 09/07/2018, 556.31 
3, 09/16/2018, 5.75 
4, 09/22/2018, 125.00 
5, 09/22/2018, 484.21 
6, 09/22/2018, 59.18 
7, 09/23/2018, 177.42 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 

Concatenate
LOAD 
*  
Inline [ 
id, date, amount 
8, 10/01/2018, 164.27 
9, 10/03/2018, 384.00 
10, 10/06/2018, 25.82 
11, 10/09/2018, 312.00 
12, 10/15/2018, 4.56 
13, 10/16/2018, 90.24 
14, 10/18/2018, 19.32 
]; 

exit script when NoOfRows('Transactions') > 10 ; 
 
Concatenate 
LOAD 
*  
Inline [ 
id, date, amount 
15, 10/01/2018, 164.27 
16, 10/03/2018, 384.00 
17, 10/06/2018, 25.82 
18, 10/09/2018, 312.00 
19, 10/15/2018, 4.56 
20, 10/16/2018, 90.24 
21, 10/18/2018, 19.32 
]; 
 
exit script when NoOfRows('Transactions') > 10 ; 
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 다음 필드를 차원으로 추가합니다.

* `id`
* `date`
* `amount`

결과 테이블

| ID | 날짜 | 금액 |
| --- | --- | --- |
| 1 | 2018/08/30 | 23.56 |
| 2 | 2018/09/07 | 556.31 |
| 3 | 2018/09/16 | 5.75 |
| 4 | 09/22/2018 | 125.00 |
| 5 | 09/22/2018 | 484.21 |
| 6 | 2018/09/22 | 59.18 |
| 7 | 2018/09/23 | 177.42 |
| 8 | 10/01/2018 | 164.27 |
| 9 | 10/03/2018 | 384.00 |
| 10 | 10/06/2018 | 25.82 |
| 11 | 10/09/2018 | 312.00 |
| 12 | 10/15/2018 | 4.56 |
| 13 | 10/16/2018 | 90.24 |
| 14 | 10/18/2018 | 19.32 |

3개의 데이터 집합 각각에는 7개의 트랜잭션이 있습니다. 첫 번째 데이터 집합에는 트랜잭션 1-7이 포함되어 있으며 응용 프로그램에 로드됩니다. 이 LOAD 문 다음의 `When` 조건은 '`Transactions`' 테이블에 10개 미만의 행이 있으므로 FALSE로 평가됩니다. 로드 스크립트는 다음 데이터 집합으로 계속됩니다.

두 번째 데이터 집합에는 트랜잭션 8-14가 포함되어 있으며 응용 프로그램에 로드됩니다. 두 번째 `When` 조건은 '`Transactions`' 테이블에 10개보다 많은 행이 있으므로 TRUE로 평가됩니다. 따라서 스크립트가 종료됩니다.

## 예 3 - 다중 When 접두사

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

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

개요

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

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

* 단일 트랜잭션을 포함하는 데이터 집합은 '`Transactions`'라는 테이블로 만들어집니다.

* 트리거되는 `For` 루프에는 다음을 평가하는 두 개의 중첩된 `When` 조건이 포함됩니다.

  1. '`Transactions`' 테이블에 `100`보다 적은 레코드가 있는지 평가

  2. '`Transactions`' 테이블의 레코드 수가 `6`의 배수가 아닌지 평가

로드 스크립트

```
RowsCheck = NoOfRows('Transactions') < 100 or mod(NoOfRows('Transactions'),6) <> 0;
Transactions: 
Load 
	0 as id 
Autogenerate 1; 
For i = 1 to 100 
	when(RowsCheck)
		Concatenate 
	Load 
		if(isnull(Peek(id)),1,peek(id)+1) as id 
	Autogenerate 7;     
next i 
```

결과

데이터를 로드하고 시트를 엽니다. 새 테이블을 만들고 이 필드를 차원으로 추가합니다.

* `id`

결과 테이블에는 처음 5개의 트랜잭션 ID만 표시되지만 로드 스크립트는 36개의 행을 만든 다음 `When` 조건이 충족되면 종료됩니다.

결과 테이블

| ID |
| --- |
| 0 |
| 1 |
| 2 |
| 3 |
| 4 |
| 5 |
| +30 추가 행 |

`For` 루프의 중첩된 `When` 조건은 다음 질문을 평가합니다.

* '`Transactions`' 테이블에 100개 미만의 행이 있습니까?

* '`Transactions`' 테이블의 총 레코드 수가 6의 배수가 아닙니까?

두 `When` 조건 모두 TRUE 값을 반환할 때마다 추가로 7개의 레코드가 생성되어 기존 '`Transactions`' 테이블에 연결됩니다.

`When` 조건은 TRUE 값을 5번 반환합니다. 이 때 '`Transactions`' 테이블에는 총 36개의 데이터 행이 있습니다.

'`Transactions`' 테이블에 36개의 데이터 행이 생성되면, 두 번째 `When` 문은 FALSE 값을 반환하므로 이 다음에 오는 로드 문은 더 이상 실행되지 않습니다.