Qlik Trainingブログ

  • Qlik Sense
  • Qlik Cloud
  • 開発者
  • データロード
2022.05.13

ワイルドカード「*」が使えない!?Qlik Sense SaaSでデータをまとめて取り込む方法

Qlik Senseでは、ファイル名に「*」の記号(以下、「ワイルドカード」という)を用いることで、複数ファイルを一括でロードできます。Qlikユーザーの皆さまにはおなじみの便利機能ですが、 Qlik Sense SaaSをご利用の場合、一部のクラウドサービスではこの方法が使えないことがあります。

  • ワイルドカード指定が利用できない代表的なクラウドサービスの例
  • Amazon S3
  • Azure Storage
  • Dropbox
  • Google Cloud Storage
  • Google Drive
  • OneDrive

こちらの記事では、そんなワイルドカード指定が利用できないクラウドサービスから、データをまとめて取り込む方法について紹介します。

目次

※本記事は「2022年04月時点のSaaS」で作成しています。

ワイルドカードを使って、ファイルをまとめて取り込む方法

Qlik Senseでは、データを取り込む際、ロードスクリプトに「FROM」から始まる一文が記述されます。

こちらは「データの接続定義」を表しており、上記の例の場合、「data」という接続先にある「実績_202201.xlsx」を取り込みます。
※Qlik Senseでは、各種データソースへの接続定義に接続先名(例:data)をつけて管理します。

このとき接続先「data」に、項目名や項目数などレイアウトが同じ実績ファイル(例:実績_202202.xlsx、実績_202203.xlsx 等)がある場合、From文のファイル名部分をワイルドカードに変更することで、まとめて取り込むことが可能です。

※上図の場合、「data」という接続先にある「実績_」からはじまるExcelファイルを全て取り込みます。

ワイルドカードを使わず、ファイルをまとめて取り込む方法

ではここからは、ワイルドカードを使わずに、同一レイアウトのファイルをまとめて取り込む方法について紹介します。

処理内容としては、まず所定のフォルダにあるファイル名のリストを取得し、その後、ループ処理で1ファイルずつ順番にデータを取り込みます。今回は例として「Azure Storage」に接続し、「実績」と名前のつくExcelファイルをまとめて取り込むことを想定して解説します。

※Azure Storageへの接続先を事前に作成している前提です。下記のスクリプトでは、この接続先名を「Azure_Storage」としています。
※スクリプトは、解説下の「サンプルスクリプト」からコピーしていただけます。

▼解説

①接続先「Azure_Storage」にあるファイル名を順番に取得

接続先「Azure_Storage」にあるファイルパスを順番に全て取得し、「ファイル名」という項目名として「ファイルリスト_temp」テーブルに格納します。

▼Tips

②「実績」とつくファイル名だけを抜粋

①では、接続先のすべてのファイルを取得しますが、そこから指定のファイル(例:ファイル名に「実績」とつくファイル)のみ取り込みたい場合、こちらの②の記述が必要となります。①で作成した「ファイルリスト_temp」テーブルから、指定のファイルのみに絞りこんだ「ファイルリスト」テーブルを作成します。

▼Tips

③「実績」とつくファイルを順番に取り込むループ処理

変数の指定と、その変数を用いたFor文での繰り返し処理を行います。

▼Tips

④データを順番に取り込む

From文のファイル名を指定する箇所を変数にしておくことで、ループ処理の中で複数のファイルを取り込むことができます。

サンプルスクリプト

※コピーしてご活用ください。
※赤字部分は必要に応じて修正をお願いいたします。
※弊社では、以下環境にて検証を実施しました。
  Azure Storage・Google Drive
  環境によって、接続定義部分の記述方法が異なるため、注意してください。
<例>
■Azure Storageの場合
 For each filePath in filelist ('lib://Azure_Storage/')
 ※接続先の最後に、スラッシュ(/)が必要

■Google Driveの場合
 For each filePath in filelist ('lib://Google_Drive/○○○○○')
 ※接続先の最後に、スラッシュ(/)は不要

★サンプルスクリプト(以下をご利用ください)★

For each filePath in filelist ('lib://Azure_Storage/')

ファイルリスト_temp:
Load '$(filePath)' as ファイル名 AutoGenerate(1);

Next filePath;

NoConcatenate

ファイルリスト:
Load
*
Resident ファイルリスト_temp
Where ファイル名 like '*実績*';

Drop Table ファイルリスト_temp;

Let NumRows = NoOfRows('ファイルリスト');
For i = 0 to $(NumRows) - 1
Let vFILEName = Peek('ファイル名',$(i),'ファイルリスト');

データ:
Load
*
From [$(vFILEName)]
(ooxml, embedded labels, table is Sheet1);

Next

Drop Table ファイルリスト;

さいごに

クラウドサービスへ接続する場合、複数ファイルをまとめて取り込むときに便利なワイルドカードの指定が使えないことがあります。そんな場合は、ぜひ今回紹介したスクリプトを活用してみてください。スクリプト内で使用した関数について、さらに詳しく学び、他のケースにも活用されたいという方は、下記コンテンツも参考にしていただければと思います。

関連している記事

  • Qlik Cloud
  • Qlik Sense
  • 運用者
2024.04.24

Qlik Cloud 日本リージョンへの移行方法(qlik-cli利用時の注意点)

先日、本ブログにて、日本リージョンへテナントを移行する方法の全体像をご紹介しました。今回は、コマンドラインのqlik-cliを用いたテナント移行時の注意点と、コマンドやスクリプトの記述例をご紹介します。

  • Qlik Sense
  • Qlik Cloud
  • 開発者
  • 運用者
2024.04.17

Qlik Application Automation活用術:Microsoft Teamsにメッセージを配信する

Qlik Sense SaaSを使用していて、メジャーの結果と事前に設定した閾値を比較して、閾値を超えたら通知を飛ばせたら良いな、と考えたことはありませんか?本記事では、Qlik Sense SaaSの「Qlik Application Automation」でMicrosoft Teamsにメッセージを配信する方法を紹介します。

  • Qlik Cloud
  • Qlik Sense
  • 運用者
2024.04.01

Qlik Cloud 日本リージョンへの移行方法

2024 年 3 月 26 日に QlikTech 社より Qlik Cloud の日本リージョン開設の ニュースリリースが発表されました。本ブログではすでに Qlik Cloud(Qlik Sense Enterprise SaaS) をご利用中のユーザー様に向けて、日本リージョンへテナントを移行する方法をご紹介します。

ページの先頭へ戻る