はじめに

ここでは、Qlik SenseのロードスクリプトでFor Loopを使ったループによる繰り返し処理を行う手順についてご説明します。

ループ処理の適用例として、分析対象の売上明細データを格納した複数のファイルが以下の様に同一フォルダに配置されているケースをここでは取り上げます。

image

売上データには売上が発生した年月の情報が含まれておらず、これらのファイルのデータをロードスクリプトで取り込みつつ、それぞれのファイル名称を取得して名称に含まれる「年月」の情報を取り込んだデータに付加する処理を行う必要があるものと想定します。こういった形の繰り返し処理に今回ご紹介するFor Loop処理は有効です。

For Loop処理

Qlik Senseアプリを起動してロードスクリプトの画面を開き、取り込むファイルが保存されているフォルダパスをデータ接続定義に追加します。ここでは「売上明細」というデータ接続定義を作成しています。(データ接続定義の作成方法については「Qlik Senseロードスクリプトによる変換処理の基礎」をご参照ください。)

image

そして、以下のロードスクリプトを追加してデータのロードを実行します。Filelist (‘lib://売上明細/*.csv’) により、上記で作成した「売上明細」のデータ接続先に保存される「.csv」拡張子のファイルを全て取込み対象とし、ファイル一覧のリストを取得してそれぞれのファイルに対してFor eachループの中でロード処理を行っています。

 For each vFileName in Filelist ('lib://売上明細/*.csv')
      Load *,
         '$(vFileName)' as ファイル名
      From [$(vFileName)];
 Next vFileName

この時、各ループ処理の中で$(vFileName)の変数にファイル名が格納されますので、そのファイル名をLoad処理時に「ファイル名」の項目に含めています。この処理を実行すると以下の形でデータを取り込むことができます。

image

ただ、上記の状態では「ファイル名」にファイルのフルパスが含まれてままとなっていますので、Load処理の「ファイル名」の項目の部分の処理を以下の様に書き換えます。

 For each vFileName in Filelist ('lib://売上明細/*.csv')
      Load *,
         Replace(SubField('$(vFileName)','_',2),'.csv','') as 年月
      From [$(vFileName)];
 Next vFileName

ここでは、例えばファイル名が「売上明細_201501.csv」の場合、SubField関数で「_」の文字で分割した時の前から2番目の文字列である「201501.csv」を取得し、Replaceで「.csv」を削除することで年月の部分だけを残しています。

image

尚、ここではCSVファイルを取り込んでいますが、例えば.xlsx形式のファイルを取り込む場合には以下の様な形でファイル名の後にフォーマットの指定が必要となりますのでご注意ください。

  • From [$(vFileName)] (ooxml, embedded labels, table is シート名);

その他のループ処理関数

上記ではFor Loop文をご紹介しましたが、その他に以下の様なループ処理関数が用意されています。

  • Do While文
Do While i < 10 
	//[処理内容]
Loop
  • For Next文
For i = 1 To 10
	//[処理内容]
Next    

 

まとめ

ここでは複数ファイルへの繰り返し処理を例にとってFor Loopによる繰り返し処理の利用方法をご説明しました。