# When

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

構文:

(when condition statement | exitstatement when condition )

戻り値データ型： ブール値

Qlik Sense では、真のブール値は -1 で表現され、偽の値は 0 で表現されます。

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

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

使用に適しているケース

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

引数

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

## 地域の設定

特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの `SET DateFormat` ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。

App の既定の地域設定は、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 | 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` を割り当てているため、`When` プレフィックスの後の条件が評価され、TRUE の結果を返します。返される結果が TRUE であるため、スクリプトが Load ステートメントを実行し続けます。結果テーブルからのすべてのレコードを確認できます。

この変数値が `1` と等しくない任意の値に設定された場合、データがデータ モデルにロードされます。

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

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

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

概要

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

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

* 「`Transactions`」というテーブルに送信される日付と金額を含む 3 つのデータセット。

  * 最初のデータセットには、トランザクション 1～7 が含まれます。

  * 2 番目のデータセットには、トランザクション 8～14 が含まれます。

  * 3 番目のデータセットには、トランザクション 15～21 が含まれます。

* 「`Transactions`」テーブルに含まれる行が 10 を超えるかどうかを決定する `When` 条件。`When` ステートメントのいずれかが TRUE と評価された場合、ロード スクリプトは停止します。この条件は、3 つの各データセットの終わりに配置されます。

ロード スクリプト

```
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 | 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 件のトランザクションがあります。最初のデータセットにはトランザクション 1～7 が含まれ、アプリケーションにロードされます。この Load ステートメントの後の `When` 条件は、FALSE と評価されます。これは、「`Transactions`」テーブルに含まれている行が 10 未満だからです。ロード スクリプトは次のデータセットに続きます。

2 番目のデータセットにはトランザクション 8～14 が含まれ、アプリケーションにロードされます。2 番目の `When` 条件は TRUE と評価されます。これは、「`Transactions`」テーブルに 10 を超える行があるたｍです。そのため、スクリプトは終了します。

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

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

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

概要

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

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

* 1 件のトランザクションを含むデータセットが、「`Transactions`」というテーブルとして作成されます。

* トリガーされる `For` ループには、2 つのネストされた `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 行のデータが作成されると、2 番目の `When` ステートメントが値 FALSE を返すため、この後の Load ステートメントは実行されなくなります。