# Unless

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

구문:

(Unless condition statement | exitstatement Unless condition )

statement 또는 exitstatement는 condition이 False로 평가된 경우에만 실행됩니다.

unless 접두사는 추가적인 when 또는 unless 접두사를 포함한 하나 이상의 다른 문을 이미 가지고 있는 문에서도 사용할 수 있습니다.

인수

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

## 사용 시기

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

다음 줄에서는 `Unless` 함수 사용 방법에 대한 세 가지 예를 보여 줍니다.

`exit script 
 unless A=1;` `unless A=1 
 LOAD  * from myfile.csv;` `unless A=1 
 when B=2 drop table Tab1;`

## 국가별 설정

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

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

## 예 1 – Unless 접두사

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

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

개요

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

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

* 값이 1로 지정된 변수 A 만들기

* 변수 A = 2가 아닌 경우 Transactions라는 테이블에 로드되는 데이터 집합.

로드 스크립트

```
LET A = 1;

UNLESS A = 2

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을 할당받았으므로 `Unless` 접두사 뒤에 오는 조건을 평가하여 결과 `FALSE`를 반환합니다. 결과적으로 스크립트는 `Load` 문을 계속 실행합니다. 결과 테이블에서 `Transactions` 테이블의 모든 레코드를 볼 수 있습니다.

이 변수 값을 2로 설정하면 데이터 모델에 데이터가 로드되지 않습니다.

## 예 2 – Unless 접미사

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

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

개요

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

로드 스크립트는 초기 데이터 집합을 `Transactions`라는 테이블에 로드하는 것으로 시작합니다. 그런 다음 `Transactions` 테이블에 10개 미만의 레코드가 없으면 스크립트가 종료됩니다.

이 조건으로 인해 스크립트가 종료되지 않으면 추가 트랜잭션 집합이 `Transactions` 테이블에 연결되고 이 프로세스가 반복됩니다.

로드 스크립트

```
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 unless 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 unless 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 unless 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개의 레코드가 있습니다.

첫 번째 데이터 집합(트랜잭션 `id` 1~7 포함)이 응용 프로그램에 로드됩니다. `Unless` 조건은 `Transactions` 테이블에 10개 미만의 행이 있는지 여부를 평가합니다. 이는 `TRUE`로 평가되므로 두 번째 데이터 집합(트랜잭션 `id` 8~14 포함)이 응용 프로그램에 로드됩니다. 두 번째 `Unless` 조건은 `Transactions` 테이블에 10개 미만의 레코드가 있는지 평가합니다. 이는 `FALSE`로 평가되므로 해당 스크립트가 종료됩니다.

## 예 3 – 다중 Unless 접두사

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

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

개요

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

이 예에서는 하나의 트랜잭션을 포함하는 데이터 집합이 `Transactions`라는 테이블로 만들어집니다. 그런 다음 두 개의 중첩된 unless 문이 다음을 평가하는 'for' 루프가 트리거는 경우는 다음과 같습니다.

1. `Transactions` 테이블에 100개보다 많은 레코드가 없는 경우

2. `Transactions` 테이블의 레코드 수가 6의 배수가 아닌 경우

이러한 조건이 `FALSE`이면 추가로 7개의 레코드가 생성되어 기존 `Transactions` 테이블에 연결됩니다. 이 프로세스는 두 트랜잭션 중 하나가 값 `TRUE`를 반환할 때까지 반복됩니다.

로드 스크립트

```
Transactions:
Load
        0 as id
Autogenerate 1;

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

결과

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

결과 테이블

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

'for' 루프에서 발생하는 중첩된 unless 문은 다음을 평가합니다.

1. `Transactions` 테이블에 100개보다 많은 행이 있습니까?

2. `Transactions` 테이블의 총 레코드 수가 6의 배수입니까?

두 unless 문 모두 값 `FALSE`를 반환할 때마다 추가로 7개의 레코드가 생성되어 기존 `Transactions` 테이블에 연결됩니다.

이러한 명령문은 값 `FALSE`를 5번 반환하며, 이때 `Transactions` 테이블에는 총 36개의 데이터 행이 있습니다.

그 후, 두 번째 `Unless` 문은 값 `TRUE`를 반환하므로 다음에 오는 LOAD 문은 더 이상 실행되지 않습니다.