「先月の売上が急に落ちているけど、これは単なる一時的な現象なのか、それとも下降トレンドの始まりなのか?」
このような疑問に答えるために役立つのが「移動平均(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;さいごに
移動平均を算出するためのデータモデルが完成しました。
今回はここまでとし、次回このデータモデルを使い、シート上で移動平均をビジュアライゼーションする方法を説明しようと思います。


