【Qlik】移動平均でビジネスの「真のトレンド」を捉える①

「先月の売上が急に落ちているけど、これは単なる一時的な現象なのか、それとも下降トレンドの始まりなのか?」
このような疑問に答えるために役立つのが「移動平均(Moving Average)」です。
移動平均は、特定の期間の平均値を連続して計算することで、データの短期的な変動(ノイズ)を和らげ、長期的な傾向を浮き彫りにします。

今回は、Qlikで移動平均をビジュアライゼーションする方法について、2回に分けて説明しようと思います。

目次

前提

これまで何度か書いてきた記事と同様に、下記データモデルを使用することとします。

単月単位での推移

まずは移動平均ではなく、単月単位での売上高の推移を考えます。

// 軸
売上日.calendar.YearMonth

// メジャー
=sum(売上金額)

軸が1か月単位になっており、各月の売上高の推移が可視化されました。

※『calendar.YearMonth』については、下記の記事を参照ください。

移動平均用の日付軸の作成

次に、先ほどの売上高の推移について、移動平均を考えます。
例えば、直近3か月で移動平均を算出したいとなった場合、2025年4月においては、2025年2月〜4月の3か月の売上を考慮する必要があります。ただし先ほどのチャートでは、軸が売上日となっているため、軸2025年4月においては、2025年4月の売上のみが考慮され、3か月分を含めることはできません。
このため、売上日に変わる新しい日付軸を作成する必要がでてきます。

データモデルに、新たに『range_calendar』というテーブルを追加し、移動平均用の日付軸として『売上年月_R』を作成することを目指します。

『range_calendar』テーブルの中身は左のようになります。

各『売上年月_R』ごとに、同売上年月から最小の売上年月(2024/01)までを紐づけ、それぞれ何か月遡っているかを『MonthCnt』にて計算しています。

これら、『range_calendar』テーブルを作成するため、下記スクリプトを追加してください。
スクリプトの詳細な説明については省略しますが、重複のない売上年月のリストを作成し、各月ごとにループを回し、基準月からデータの開始月(varMinDate)まで1か月ずつ過去に遡ってレコードを作成しています。

LET varMaxDate = Num(FieldValue('MaxDate', 1));
LET varMinDate = Num(FieldValue('MinDate', 1));

Drop Table cal_tmp;

monthly_calendar:
LOAD distinct
	売上年月
Resident 売上;

For i = 1 to NoOfRows('monthly_calendar')
	LET vRangeYM = Num(AddMonths(MonthStart($(varMinDate)) ,$(i)-1));
    
range_calendar:
LOAD 
	Date(MakeDate(Year(Date($(vRangeYM),'YYYY/MM/DD')),Month(Date($(vRangeYM),'YYYY/MM/DD'))),'YYYY/MM') as 売上年月_R,
    Date(AddMonths($(vRangeYM) ,1 - IterNo()),'YYYY/MM') 						as 売上年月,
	(IterNo()  -1)*-1						as MonthCnt
	AutoGenerate 1
		While Date(AddMonths($(vRangeYM) ,1 - IterNo()),'YYYY/MM')>=Date(MonthStart($(varMinDate)));
        
NEXT
        
Drop Table monthly_calendar;

さいごに

移動平均を算出するためのデータモデルが完成しました。
今回はここまでとし、次回このデータモデルを使い、シート上で移動平均をビジュアライゼーションする方法を説明しようと思います。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

目次