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

인수

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

## 국가별 설정

달리 지정하지 않는 한 이 항목의 예에서는 다음 날짜 형식을 사용합니다. YYYY/MM/DD. 날짜 형식은 데이터 로드 스크립트의 `SET DateFormat` 문에 지정됩니다. 기본 날짜 형식은 지역 설정 및 기타 요인으로 인해 시스템에서 다를 수 있습니다. 아래 예의 형식을 요구 사항에 맞게 변경할 수 있습니다. 또는 이러한 예와 일치하도록 로드 스크립트의 형식을 변경할 수 있습니다.

앱의 기본 국가별 설정은 Qlik Sense가 설치된 컴퓨터 또는 서버의 국가별 시스템 설정을 기반으로 합니다. 액세스하는 Qlik Sense 서버가 스웨덴으로 설정된 경우 데이터 로드 편집기는 날짜, 시간 및 통화에 대해 스웨덴 지역 설정을 사용합니다. 이러한 국가별 형식 설정은 Qlik Sense 사용자 인터페이스에 표시되는 언어와 관련이 없습니다. Qlik Sense는 사용 중인 브라우저와 동일한 언어로 표시됩니다.

함수 예

| 예 | 결과 |
| --- | --- |
| ` 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/sense/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 | 날짜 | 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 |

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

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

## 예 2 – When 접미사

[](https://help.qlik.com/en-US/sense/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 | 날짜 | 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 |
| 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/sense/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 값을 반환하므로 다음에 오는 LOAD 문은 더 이상 실행되지 않습니다.