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 関数の 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 ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 1 – Unless プレフィックス ロード スクリプトと結果 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
ロード スクリプト
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
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル 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 サフィックス ロード スクリプトと結果 概要
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトは、初期データセットを 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 ;
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
結果テーブル 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 プレフィックス ロード スクリプトと結果 概要
データ ロード エディタを開き、以下のロード スクリプトを新しいタブに追加します。
この例では、1 件のトランザクションを含むデータセットが、Transactions というテーブルとして作成されます。次に「for」ループがトリガーされ、2 つのネストされた unless ステートメントが次を評価します:
Transactions テーブルに含まれるレコードが 100 件を超えない限り
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 。
「for」ループで発生するネストされた unless ステートメントは次を評価します:
Transactions テーブルには 100 を超える行がありますか?
Transactions テーブルに含まれるレコード件数は 6 の倍数ですか?
両方の unless ステートメントが FALSE の値を返すと、さらに 7 件のレコードが生成され、既存の Transactions テーブルに連結されます。
これらのステートメントは値 FALSE を 5 回返し、その時点では Transactions テーブルに合計 36 行が含まれることになります。
この後、2 番目の Unless ステートメントが値 TRUE を返すため、この後の Load ステートメントは実行されなくなります。