■はじめに
ここでは、Qlik SenseのロードスクリプトでFor Loopを使ったループによる繰り返し処理を行う手順についてご説明します。
ループ処理の適用例として、分析対象の売上明細データを格納した複数のファイルが以下の様に同一スペースにアップロードされているケースをここでは取り上げます。
売上データには売上が発生した年月の情報が含まれておらず、これらのファイルのデータをロードスクリプトで取り込みつつ、それぞれのファイル名称を取得して名称に含まれる「年月」の情報を取り込んだデータに付加する処理を行う必要があるものと想定します。こういった形の繰り返し処理に今回ご紹介するFor Loop処理は有効です。
■For Loop処理
Qlik Senseアプリを起動してロードスクリプトの画面を開きます。ロードスクリプト画面の使用方法については「Qlik Senseロードスクリプトによる変換処理の基礎」をご参照ください。
そして、以下のロードスクリプトを追加してデータのロードを実行します。Filelist ('lib://DataFiles/売上明細_*.csv')により、スペースに保存される「売上明細_」で始まる名前で、「.csv」拡張子のファイルを全て取込み対象とし、ファイル一覧のリストを取得してそれぞれのファイルに対してFor eachループの中でロード処理を行っています。
For each vFileName in Filelist ('lib://DataFiles/売上明細_*.csv')
Load *,
'$(vFileName)' as ファイル名
From [$(vFileName)];
Next vFileName
この時、各ループ処理の中で$(vFileName)の変数にファイル名が格納されますので、そのファイル名をLoad処理時に「ファイル名」の項目に含めています。この処理を実行すると以下の形でデータを取り込むことができます。
ただ、上記の状態では「ファイル名」にファイルのフルパスが含まれてままとなっていますので、Load処理の「ファイル名」の項目の部分の処理を以下の様に書き換えます。
For each vFileName in Filelist ('lib://DataFiles/売上明細_*.csv')
Load *,
Replace(SubField('$(vFileName)','_',2),'.csv','') as 年月
From [$(vFileName)];
Next vFileName
ここでは、例えばファイル名が「売上明細_202201.csv」の場合、SubField関数で「_」の文字で分割した時の前から2番目の文字列である「202201.csv」を取得し、Replaceで「.csv」を削除することで年月の部分だけを残しています。
尚、ここではCSVファイルを取り込んでいますが、例えば.xlsx形式のファイルを取り込む場合には以下の様な形でファイル名の後にフォーマットの指定が必要となりますのでご注意ください。
- From [$(vFileName)] (ooxml, embedded labels, table is シート名);
■その他のループ処理関数
上記ではFor Loop文をご紹介しましたが、その他に以下の様なループ処理関数が用意されています。
Do While i < 10
//[処理内容]
Loop
For i = 1 To 10
//[処理内容]
Next
■まとめ
ここでは複数ファイルへの繰り返し処理を例にとってFor Loopによる繰り返し処理の利用方法をご説明しました。