【QlikSense】forやwhileを使って式や日付を繰り返す方法

【QlikSense】forやwhileを使って式や日付を繰り返す方法

更新日:2025/01/16

この記事をシェア

  • X
  • Facebook
  • LINE
  • COPY LINK
クリップボードにコピーしました

はじめに

日常的にBigQueryを使用していたりBigQueryの独自関数に慣れた人がQlikSenseを初めて触ると、使用できる関数の違いに戸惑うことが多々あります。

今回は特に、BigQueryでいう『LOOP』と『WHILE』のループ処理をQlikSenseに置き換える場合には、どのように書くとよいのかを共有します。

QlikSenseについて、もう少し基礎的な理解を深めたい方は過去のブログも参考にしてください。

ループ処理ってなに?

プログラムに何度も同じことを行わせる制御構文を「繰り返し処理(ループ処理)」と言います
for文やwhile文を使うことで「何回・何十回・何百回・何千回・何万回…」と、処理を行いたい回数だけ同じ動作を繰り返すよう命令することができます。

どういうときに使う?

データ処理の業務で特に活躍する機会が多いのが、日付の繰り返しを行うタイミングです。
具体的にはファイル名の末尾に『YYMMDD』がつくトランザクションテーブルを、決まった日数だけ繰り返し読み込むといった時に活用できます。

例えば、直近の日付から1週間分のデータを読み込むとしましょう。その場合には「昨日を含めて7回」のループ処理を行うことで、必要となる対象データを取り出すことができます。
この記事では日付をパラメータとして指定し、変数を使用して決まった回数の処理を行う方法を紹介します。

今回は、直近の日付から10日間分のデータを読み込むパターンを考えてみましょう。

for文

まずはfor文の基本的な挙動を確認します。
for文とは「for ~ next;」の間の式を、変数 i の数だけループ処理を行う文です。

for i = 1 to 9
	LOAD * from file$(i).csv;
next;

QlikSenseのfor文は0始まりになっています。そのため、上記のように『 i = 1 to 9』と書くことで、 file1~file9までのデータを読み込むように指示することができます。

参考:For..next

日付パラメータ例

次に、基本構文を元にして実用的な日付パラメータの設定を行います。

方法は簡単です。上記の基本的な構文内の変数部分を日付に置き換えることで指定日数分のデータを読み込むことができます。

まず、for文作成の後に下記のようなパラメータを設定します。

//パラメータの時間がGMT基準となっているため、日本時間に修正する
Let vToday = Dayname(localtime ('GMT+09:00'));

Let vTargetday = dayname('$(vToday)'-$(i));  //日
Let vYM = year('$(vTargetday )')&right('00'&Purgechar(month('$(vTargetday )'),'月'),2);  //年月(YYYYMM)
Let vYear = year('$(vLastday)');  //年
Let vThisday = day('$(vLastday)');  //日
Let vFY = If(Month('$(vLastday)')<=3, Year('$(vLastday)'), Year('$(vLastday)')+1) ;  //期の区切り(この場合は4月が期初月)
Let vPeriod = '$(vFY)'-2020;  //最新期を算出(この場合は2021年が1期)

上記のパラメータ設定が完了したら、繰り返し処理をしたいファイル名に合わせて必要パラメータをfor文の中に引用します
例えばYYYYMMのファイルを読み込む際には、下記のように『$(vYM)』のパラメータを使用したクエリを書きます。

for i = 1 to 9
	LOAD *  from (ファイル名)_$(vYM).csv;
next;

最後に『next;』で閉じれば、for文は完成です。

while

whileは、レコードを繰り返し読み取るかどうかを示す節です。criterion が True の場合は、同じレコードが読み取られます。通常、while節には IterNo( ) 関数が含まれていなければなりません

criterion は論理式です。(Qlik Helpより抜粋)

以下のような場合には、2回ループを行うという命令になります。

while IterNo() ≤ 2

参考:IterNo( )

また、IterNo( ) はLOAD文の中でも使用できます。

LOAD
 SubField('田中/中村/久保' , '/' , IterNo()) AS 苗字
FROM テーブル名
WHILE IterNo() ≤ SubStringCount('田中/中村/久保' , '/');

上記では、while節で‘/’の数だけループさせるよう命令を書いています(/が2回出てくるので、ループの回数は2回)。
そのためSubField関数は2回ループされ、2か所のデータが抽出されます。

参考:SubField関数

結果

苗字
田中
中村

おわりに

日付ごとに保存されているテーブルの呼び出しなどにおいて、ループ処理はとても便利で役立つものです。

また、GA4データをQlikSenseで加工する際にも SubField関数とwhile節の合わせ技でUNNNEST処理ができるので、ぜひ困ったときには使ってみてください。

データ活用でお困りの方へ

私たちDX-Accelerator事業では、データ活用についての様々なスキルを持った人材が常駐でデータ活用支援を行うサービスを提供しています。
当事業はローンチから約3年(24年9月時点)ですが、これまでに様々な業界・業種のお客さまのお手伝いをさせていただいております。

少しでも興味を持ってくださったり、すでにご相談をしたいことがある方はお気軽にご相談ください。現在あなたの組織のフェーズがどこにあるかは関係ありません。まずはお話をしましょう。

もう少しサービスについて知りたい方はサービス紹介資料もご用意しています。

お役立ち資料をご活用ください!

データプロフェッショナルであるDXAメンバーが、業務経験をもとにお役立ち資料を作成しています!
おすすめ3選はこちら!

1.GA4 サンプルレポート|Looker Studio 無料プレゼント
GA4の基本KPIが網羅されたテンプレートです!データを差し替えればすぐにご活用いただけます。

2.サンプル経営ダッシュボード | Tableau無料プレゼント
実際にご提供しているダッシュボードをテンプレート化したものです!是非構成やグラフ選択の参考にしてください。

3.データ活用の部長さん必見!データ活用 内製化の正しい進め方
これまでご支援してきた実績をもとに、データ活用の内製化の進め方を解説しています!組織のDXを担われている方、必読です!

以上、おすすめ3選でした!
すべて無料でダウンロードできますので、お気軽にご利用ください。

この記事をシェア

  • X
  • Facebook
  • LINE
  • COPY LINK
クリップボードにコピーしました

関連記事

DX-Acceleratorについて
より詳しく知りたい方!

DX-Accelerator データ人材常駐支援サービス

即戦力の
アナリティクスエンジニアが
常駐支援!
まずはお気軽にご相談ください。

DX-Acceleratorについて
より詳しく知りたい方!