Tableauでの期間単位での集計に関する話。
普通に期間単位の集計をすると、「日毎の」「週毎の」「月毎の」など、決まった期間単位の集計になってしまいます。
では日毎に「直近7日間」や「直近30日」といった集計をやりたい場合どうすればいいのか。単純合算できない場合(期間中のユニークな利用ユーザー数、など)は少し大変です。
ネット上に情報があったものの検索で見つけにくかったので、導線を増やす意味でもここに方法を記しておきます。
①単純合算可能な場合(売上など)
WINDOW_SUMという関数を使えば簡単にできます。
イメージとしては、一度日単位で集計した表を作り、それを使って計算する形になります。
②単純合算できない場合
これが本題。やり方のソースは公式ドキュメントであるこちらの、オプション2の方法で出すことができました。
個別の実行中または移動中のカウントの計算 | Tableau Software
...「これでできます」で終わってもいいのですが、少しだけコメントしてみます。
こちらも基本は同じで、WINDOW_SUMを使って過去いくらかの数値を合計しています。
ドキュメントの例は「直近3週間」ですが、例えば「直近7日感」だとこんな計算フィールドになります。
直近7日間中の利用判定
WINDOW_MAX(MAX(1), -6, 0)
WINDOW_MAXを使うことで、特定の範囲内で複数回IDが登場しても1を返すようになっています。
MAXじゃなくてMINでも何でも、あれば1つと数えるものなら何でもよいです(逆にSUMなどは複数あった場合複数数えてしまうためだめ)。
直近7日間のアクティブなユーザー数は、ドキュメント同様WINDOW_SUMで計算できます。
7日間中のアクティブなユーザー数
WINDOW_SUM(7日間中の利用判定)
ポイントはステップ3の「表計算の編集」
「ネストされた計算」を使い、計算に使用するディメンションを利用判定・ユーザー数の計算それぞれに指定するイメージです。
利用判定については、「日」のディメンションでWINDOW関数を使う、
実際の利用回数を数えるときにはcustomer_idを数える、
という2段構えのイメージです。
なお、出力期間の粒度を細かくすると(日毎に直近30日を計算、など)その分重くなるので、最初はフィルタをしたり、月単位や週単位など粗目の粒度でテストすると良いでしょう。