Amazon QuickSight で成長率の移動平均を計算する方法
はじめに
QuickSight で移動平均を計算する際、データが不足している期間は計算結果を表示したくないというときはないでしょうか。
本記事では、AWS 利用費の増減の成長率を例に 3 ヶ月分のデータが揃った期間のみ移動平均を表示する方法を解説します。windowCount 関数と ifelse 関数を組み合わせることがポイントです。
実装後は、以下のように不要な期間のデータを除外したグラフが作成できます。
前提条件
今回の実装で使用するデータセットには、以下の 2 つのフィールドがあります。フィード名は任意です。
cost
: AWS の月次利用費(数値型)month
: 年月データ(日付型、YYYY-MM 形式)
実装手順
計算フィールドを使用して、3 つの計算式を順番に作成します。
ステップ 1: 前月の値を取得する
各月のコストに対して、1 ヶ月前の値を取得します。この値は成長率計算の基準値として使用されます。
periodOverPeriodLastValue(sum(cost), month, MONTH, 1)
正直cost_1month_ago
はなくても実装はできるのですが、ステップ 2 の計算式の可読性が著しく低下するのでこうしました。
ステップ 2: 前月と比較した成長率を計算する
当月のコストと前月のコストを比較して成長率を算出します。前月データが 0 以下または存在しない場合は null を返します。
ifelse(
{cost_1month_ago} > 0,
(sum(cost) - {cost_1month_ago}) / {cost_1month_ago},
null
)
ステップ 3: 成長率の 3 ヶ月移動平均を計算する
過去 3 ヶ月分の成長率データが揃っている場合のみ移動平均を計算します。windowCount で 3 ヶ月分のデータ存在を確認し、条件を満たす場合のみ windowAvg で平均値を算出します。
パラメーターの 2
は現在の行から 2 行前まで(合計 3 行)を対象とし、0
は現在の行から 0 行後まで(現在の行のみ)を意味します。つまり「現在の行を含む過去 3 ヶ月分」を計算対象とします。
ifelse(
windowCount(
{monthly_growth_rate},
[month ASC],
2,
0
) = 3,
windowAvg(
{monthly_growth_rate},
[month ASC],
2,
0
),
null
)
ポイント
windowCount 関数で 3 ヶ月分のデータの存在を確認することが工夫したところです。
windowAvg 関数のみを使用した場合、データが不足している期間も計算されてしまいます。ifelse 関数と組み合わせることで、データが 3 ヶ月分揃っている期間のみ移動平均を表示できます。作成者の意図異なったユーザーの誤った解釈を防げます。
実装結果の確認
テーブル形式での確認
計算フィールドを作成したら、まずテーブル形式で計算結果を確認します。各月のデータと計算結果を並べて表示することで、計算式が正しく動作しているか検証してください。
KPI
最新月の成長率と移動平均を KPI として表示します。数値の変化を一目で把握できます。ビジュアルも良いのでひとまず作っても良さそうです。
クラスター棒コンボグラフ
月次のコストを棒グラフで、成長率の移動平均を折れ線グラフで表示します。コストの推移と成長トレンドを同時に確認できます。載せたい情報はこちらなのですが、ビジュアルが野暮ったく個人的には好みではないです。
補足: AWS アカウントごとに移動平均を出す場合
windowAvg と windowCount 関数の partition_field
パラメーターに AWS アカウント ID のフィールド(例: aws_account_id
)を指定します。
partition_field
を使用することで、データをアカウント単位でグループ化し、各アカウントごとに独立して移動平均を計算できます。これにより、複数のアカウントのデータが混在していても、アカウント別の分析が可能になります。
ifelse(
windowCount(
{monthly_growth_rate},
[month ASC],
2,
0,
[{aws_account_id}]
) = 3,
windowAvg(
{monthly_growth_rate},
[month ASC],
2,
0,
[{aws_account_id}]
),
null
)
まとめ
本記事では、QuickSight で成長率の移動平均を計算する方法を解説しました。
ポイントは以下の 2 つです。
- windowCount 関数でデータの存在確認を行う
- それでデータが揃っている期間のみ計算結果を表示するようにする
おわりに
この方法は成長率以外の指標でも応用可能です。たとえば売上推移や在庫数量など、さまざまな移動平均計算に活用できます。最後に改めて計算フィールド作成後は、テーブル形式で計算結果を確認することを強くオススメします。