はじめに
Qlik SenseではAmazon S3との接続時ワイルドカード指定を使用した複数のデータファイルの取り込みができません。今回はAmazon S3との接続を例としてワイルドカードが使用できない場合の対処方法を紹介します。
概要
Data:
Load *
From [lib://data/売上_*.xlsx]
(ooxml, embedded labels, table is Sheet1);
Qlik Senseではワイルドカードを用いてファイル名の文字列を指定し複数のファイルをロード可能です。上記の場合「data」に配置された「売上_」からはじまるExcelファイルを全て取り込みますが、クラウドサービスにはワイルドカード指定が利用できないものがあります。
ワイルドカード指定が利用できない代表的なクラウドサービスの例が以下です。
- Amazon S3
- Azure Storage
- Dropbox
- Google Cloud Storage
- Google Drive
- OneDrive
データ接続準備
「Amazon_S3」及び「Amazon_S3_Metadata」のデータ接続が作成されていることを確認してください。
対処方法
こちらに記載のスクリプトでワイルドカードを使用せずに複数のファイルを取り込むことができます。任意のフォルダ配置されているファイル名のリストを取得し、ループ処理でファイルをデータを取り込む方法です。
以下は例として「売上_」と名前のつくExcelファイルを全て取り込むスクリプトとなっています。
【スクリプト】
※赤字の部分は自身の環境にあった適切な記載に変更してください。
//Amazon S3へ接続
LIB CONNECT TO 'Amazon_S3_Metadata (○○○○)';
ファイルリスト_Temp:
LOAD Key as ファイル名;
SELECT Key
FROM ListObjects
WITH PROPERTIES ( prefix='', maxResults='' );
//「売上_」と名前のつくファイル名のリストを取得
ファイルリスト:
NoConcatenate
LOAD
ファイル名
Resident ファイルリスト_Temp
Where WildMatch(ファイル名, 'test/売上_*');
// 不要なテーブルを削除
DROP TABLE ファイルリスト_Temp;
//取得したファイルリストのデータをループ処理で取り込む
Let NumRows = NoOfRows('ファイルリスト');
For i = 0 to $(NumRows) - 1
Let vFILEName = Peek('ファイル名', $(i), 'ファイルリスト');
//Dataテーブルを作成
Data:
Load *
From [lib://Amazon_S3 (○○○○)/$(vFILEName)]
(txt, utf8, embedded labels, delimiter is ',', msq);
Next
// 不要なデータを削除
DROP TABLE ファイルリスト;
おわりに
Qlik Senseでクラウドサービス接続時にワイルドカード指定ができない場合、上記のスクリプトを参考にしてみてください。