NoConcatenate
NoConcatenate プレフィックスは、同一の項目セットでロードされた 2 つのテーブルを、強制的に別個の内部テーブルとして扱います (そうでない場合、自動的に連結されます)。
構文:
NoConcatenate( loadstatement | selectstatement )
既定では、項目数が同じで一致する項目名を持つテーブルがスクリプトにロード済みのテーブルにロードされた場合、Qlik Sense がこれら 2 つのテーブルを自動連結します。これは、2 つめのテーブルの名前が異なっていても発生します。
ただし、スクリプト プレフィックス NoConcatenate が 2 番目のテーブルの Load ステートメントまたは select ステートメントの前に含まれていた場合、これら 2 つのテーブルは別にロードされます。
NoConcatenate の典型的なユース ケースは、テーブルの臨時コピーを作成してそのコピーの臨時変換を実行しながらも、元のデータのコピーを保持する必要がある場合などです。NoConcatenate により、ソース テーブルに黙示的に追加せずにコピーを確実に作成できます。
地域の設定
特に指定のない限り、このトピックの例では次の日付書式を使用しています: MM/DD/YYYY。日付書式は、データ ロード スクリプトの SET DateFormat ステートメントで指定されています。既定の日付書式は、地域の設定やその他の要因により、システムによって異なる場合があります。以下の例の書式は、要件に合わせて変更できます。または、これらの例に一致するようにロード スクリプトの書式を変更できます。
App の既定の地域設定は、Qlik Sense がインストールされているコンピューターまたはサーバーの地域システム設定に基づいています。アクセスしている Qlik Sense サーバーがスウェーデンに設定されてい場合、データ ロード エディターは、日付、時間、および通貨にスウェーデンの地域設定を使用します。これらの地域の書式設定は、Qlik Sense ユーザー インターフェースに表示される言語とは関係ありません。Qlik Sense は使用しているブラウザと同じ言語で表示されます。
例 | 結果 |
---|---|
Source: LOAD A,B from file1.csv; CopyOfSource: NoConcatenate LOAD A,B resident Source; |
メジャーとして A と B を持つテーブルがロードされます。同じ項目を持つ 2 番目のテーブルは、NoConcatenate 変数を使って別のロードされます。 |
例 1 – 黙示的連結
概要
この例では、2 つのスクリプトを順に追加します。
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
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
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
-
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 |
2 番目のロード スクリプト
データ ロード エディターを開き、以下のロード スクリプトを新しいタブに追加します。
ロード スクリプトには次が含まれています。
-
同一項目を持つ 2 番目のデータセットが Sales というテーブルに送信されます。
Sales:
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
];
結果
データをロードしてテーブルに移動します。
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 |
スクリプトを実行すると、Sales テーブルが既存の Transactions テーブルに黙示的に連結されます。これは、2 つのデータセットの項目数と、項目名が同一だからです。これは、2 番目のテーブル名タグが結果セットを ‘Sales’ という名前にしようとしても発生します。
データ ロード進捗状況を確認することにより、Sales データセットが黙示的に連結されたいることがわかります。
例 2 – ケース シナリオを使用する
概要
このユース ケース シナリオには次の要素があります:
-
次のようなトランザクション データセット:
-
ID
-
日付
-
金額 (GBP)
-
-
通貨テーブル:
-
USD から GBP の為替レート
-
-
次のような 2 番目のトランザクション データセット:
-
ID
-
日付
-
金額 (USD)
-
5 つのスクリプトを順にロードします。
-
最初のロード スクリプトには、Transactions というテーブルに送信される日付と金額 (GBP) を含む初期データセットが含まれています。
-
2 番目のロード スクリプトには次の内容が含まれます:
-
Transactions_in_USD というテーブルに送信される日付と金額を含む 2 番目のデータセット。
-
黙示的連結を回避するために、Transactions_in_USD データセットの Load ステートメントの前に配置された noconcatenate プレフィックス。
-
-
3 番目のロード スクリプトには、Transactions_in_USD テーブルで GBP と USD の為替レートを作成するのに使用される join プレフィックスが含まれます。
-
4 番目のロード スクリプトには、Transactions_in_USD を初期の Transactions テーブルに追加する concatenate プレフィックスが含まれます。
-
5 番目のロード スクリプトには、データが Transactions テーブルに連結された Transactions_in_USD テーブルを削除する drop table ステートメントが含まれます。
最初のロード スクリプト
Transactions:
Load * Inline [
id, date, amount
1, 12/30/2018, 23.56
2, 12/07/2018, 556.31
3, 12/16/2018, 5.75
4, 12/22/2018, 125.00
5, 12/22/2018, 484.21
6, 12/22/2018, 59.18
7, 12/23/2018, 177.42
];
結果
データをロードしてシートを開きます。新しいテーブルを作成し、これらの項目を軸として追加します:
- id
- date
- amount
ID | 日付 | amount |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
テーブルには、金額 (GBP) を持つ初期データセットが表示されています。
2 番目のロード スクリプト
Transactions_in_USD:
NoConcatenate
Load * Inline [
id, date, amount
8, 01/01/2019, 164.27
9, 01/03/2019, 384.00
10, 01/06/2019, 25.82
11, 01/09/2019, 312.00
12, 01/15/2019, 4.56
13, 01/16/2019, 90.24
14, 01/18/2019, 19.32
];
結果
データをロードしてテーブルに移動します。
ID | 日付 | amount |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 164.27 |
9 | 01/03/2019 | 384.00 |
10 | 01/06/2019 | 25.82 |
11 | 01/09/2019 | 312.00 |
12 | 01/15/2019 | 4.56 |
13 | 01/16/2019 | 90.24 |
14 | 01/18/2019 | 19.32 |
Transactions_in_USD テーブルからの 2 番目のデータセットが追加されたことがわかります。
3 番目のロード スクリプト
このロード スクリプトは、USD から GBP の為替レートを Transactions_in_USD テーブルに追加します。
Join (Transactions_in_USD)
Load * Inline [
rate
0.7
];
結果
データをロードして、データ モデル ビューアに移動します。Transactions_in_USD テーブルを選択すると、各既存レコードの「レート」項目値が 0.7 になっていることがわかります。
4 番目のロード スクリプト
resident load を使うと、このロード スクリプトは金額を USD に換算後、Transactions_in_USD テーブルを Transactions テーブルに連結します。
Concatenate (Transactions)
LOAD
id,
date,
amount * rate as amount
Resident Transactions_in_USD;
結果
データをロードしてテーブルに移動します。8~14 行目に GBP 建ての金額で新しい入力が表示されます。
ID | 日付 | amount |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 114.989 |
8 | 01/01/2019 | 164.27 |
9 | 01/03/2019 | 268.80 |
9 | 01/03/2019 | 384.00 |
10 | 01/06/2019 | 18.074 |
10 | 01/06/2019 | 25.82 |
11 | 01/09/2019 | 218.40 |
11 | 01/09/2019 | 312.00 |
12 | 01/15/2019 | 3.192 |
12 | 01/15/2019 | 4.56 |
13 | 01/16/2019 | 63.168 |
13 | 01/16/2019 | 90.24 |
14 | 01/18/2019 | 13.524 |
14 | 01/18/2019 | 19.32 |
5 番目のロード スクリプト
このロード スクリプトは、4 番目のロード スクリプト結果テーブルから重複エントリを削除し、GBP 建ての金額を持つエントリのみを残します。
drop tables Transactions_in_USD;
結果
データをロードしてテーブルに移動します。
ID | 日付 | amount |
---|---|---|
1 | 12/30/2018 | 23.56 |
2 | 12/07/2018 | 556.31 |
3 | 12/16/2018 | 5.75 |
4 | 12/22/2018 | 125.00 |
5 | 12/22/2018 | 484.21 |
6 | 12/22/2018 | 59.18 |
7 | 12/23/2018 | 177.42 |
8 | 01/01/2019 | 114.989 |
9 | 01/03/2019 | 268.80 |
10 | 01/06/2019 | 18.074 |
11 | 01/09/2019 | 218.40 |
12 | 01/15/2019 | 3.192 |
13 | 01/16/2019 | 63.168 |
14 | 01/18/2019 | 13.524 |
5 番目のロード スクリプトをロードした後、結果テーブルには両方のトランザクション データセットに存在した 14 件のトランザクションすべてが表示されます。ただし、トランザクション 8~14 では金額が GBP に変換されています。
2 番目のロード スクリプトで Transactions_in_USD の前に使用された NoConcatenate プレフィックスを削除した場合、スクリプトに「テーブル「Transactions_in_USD」が見つかりません」というエラーが発生します。これは、Transactions_in_USD テーブルが初期 Transactions テーブルに連結するはずだったからです。