# Unless

unless プレフィックスとサフィックスは、条件節の作成に使用します。条件節は、ステートメントまたは exit 節を評価するかどうかを決定します。これは、if..end if ステートメントの簡単な代替として使用されることがあります。

構文:

(Unless condition statement | exitstatement Unless condition )

statement または exitstatement は、condition が False と評価された場合に限り、実行されます。

unless プレフィックスは、他の when や unless プレフィックスなどの 1 つまたは複数のステートメントを含むステートメントで使用できます。

引数

| 引数 | 説明 |
| --- | --- |
| condition | True または False の評価を実施する論理式。 |
| statement | 制御ステートメント以外の任意の Qlik Sense スクリプト ステートメント。 |
| exitstatement | exit for、exit do、exit sub 節、あるいは exit script ステートメント。 |

## Unless の使用目的

`Unless` ステートメントはブール値の結果を返します。一般的に、このタイプの関数は、ユーザーがスクリプトの一部を条件付きでロードまたは除外する場合の条件として使用されます。

次の行では、`Unless` 関数の 3 つの使用例が示されています:

`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` ステートメントで指定されています。既定の日付書式は、リージョンの設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。詳しくは「[アプリケーションとスクリプトの地域設定の変更](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/Apps/regional-settings-in-apps.htm)」を参照してください。

アプリケーションの既定のリージョン設定は、ユーザー プロファイルに基づいています。これらのリージョンの書式設定は、Qlik Cloud ユーザー インターフェースに表示される言語とは関係ありません。Qlik Cloud は使用しているブラウザと同じ言語で表示されます。

アプリケーションの作成者は、作成するアプリケーションの既定のリージョンを設定できます。詳細については、「[Qlik Cloud Analytics でアプリとスクリプトを作成するための優先地域設定の設定](https://help.qlik.com/ja-JP/cloud-services/Subsystems/Hub/Content/Sense_Hub/UserInterface/Languages.htm#Setting)」を参照してください。

## 例 1 – Unless プレフィックス

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

#### ロード スクリプトと結果

概要

データ ロード エディターを開き、以下のロード スクリプトを新しいセクションに追加します。

ロード スクリプトには次が含まれています:

* 変数 A の作成。値 1 が提供されます。

* 変数 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 | 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 |

変数 A がスクリプトの最初で値 1 を割り当てているため、`Unless` プレフィックスの後の条件が評価され、`FALSE` の結果を返します。その結果、スクリプトが `Load` ステートメントを実行し続けます。結果テーブルでは、`Transactions` テーブルからのすべてのレコードを確認できます。

この変数値が 2 に設定された場合、データがデータ モデルにロードされます。

## 例 2 – Unless サフィックス

[](https://help.qlik.com/en-US/cloud-services/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 | 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 |
| 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` と評価され、2 番目のデータセット (トランザクション `id` 8～14) がアプリケーションにロードされます。2 番目の `Unless` 条件は、`Transactions` テーブルのレコードが 10 件未満かどうかを評価します。これにより、`FALSE` と評価され、スクリプトは終了します。

## 例 3 – 複数の Unless プレフィックス

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

#### ロード スクリプトと結果

概要

データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。

この例では、1 件のトランザクションを含むデータセットが、`Transactions` というテーブルとして作成されます。次に「for」ループがトリガーされ、2 つのネストされた unless ステートメントが次を評価します:

1. `Transactions` テーブルに含まれるレコードが 100 件を超えない限り

2. `Transactions` テーブルに含まれるレコード件数が 6 の倍数でない限り

これらの条件が `FALSE` の場合、さらに 7 件のレコードが生成され、既存の `Transactions` テーブルに連結されます。このプロセスは、2 つのトランザクションのうちどちらかが値 `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 行が含まれることになります。

この後、2 番目の `Unless` ステートメントが値 `TRUE` を返すため、この後の Load ステートメントは実行されなくなります。