Tech Waves

produced by Hakuhodo DY ONE

Tableauで顧客別の「初回購入日」と「2回目購入日」を計算してみた #LOD

こんにちは、廣本です。今回はLOD計算を用いて、顧客別の「初回購入日」と「2回目購入日」を計算してみました。データソースは、おなじみのサンプルスーパーストアを使用しています。

 

LOD計算とは?

顧客別の購入日を計算するためには、LOD計算を使用します。通常、Tableauでグラフを作成すると、そのワークシート内で使用されているディメンションの粒度で集計された結果が表示されます。しかし、LOD計算を使用すると、計算式の中で指定した粒度で集計された結果を表示することができます。

詳細レベル表現


顧客別の初回購入日

このLOD計算を用いると、顧客別の初回購入日を計算することができます。

顧客別:初回購入日

{FIXED [顧客名]:MIN([オーダー日])}

 

LOD計算は指定した粒度の中間テーブルを作成し、その集計結果を元のテーブルに戻す、という考え方です。

顧客別の2回目購入日

次に、顧客別の2回目購入日を計算します。

顧客別:2回目購入日(計算用)

IF [オーダー日]=[顧客別:初回購入日] THEN NULL
ELSE [オーダー日]
END

//顧客別初回購入日とオーダー日が一致した場合はNULLを返し、それ以外であればオーダー日を返す

顧客別:2回目購入日

{FIXED [顧客名]:MIN([顧客別:2回目(計算用)])}

//顧客別初回購入日を除いた中での最小日付を計算する

 

初回購入日を除いた中での最小日付 = 2回目購入日、になるので、上記の計算をしています。NULLは最小値の集計時に無視されるため、このように計算することができます。

3回目購入日、4回目購入……も同じ理屈で繰り返せば、作成することができます。


注意点

購入回数が固定的に決まっていれば、今回の方法で良いのですが、購入回数が固定されていない場合やあまりに考慮する数が多い場合は、別の方法を検討すると良いかもしれません。

例えば、あらかじめデータソース側やカスタムSQLで購入回数の連番を振っておくと、Tableau側で計算する必要がないので、もし可能であればこちらの方法をおすすめします。

INDEX関数を使って連番を振るという方法もありますが、こちらは表計算を使った機能になるため、作成するアウトプットによっては実現できない可能性もあります。そのため、実現したいことができるかどうかは確認したほうが良さそうです。

表計算関数


まとめ

今回はLOD計算を使って、顧客別に初回購入日と2回目購入日をTableauで算出する方法を紹介しました。ワークブックも下記にアップしていますので、ぜひご活用ください!

この記事を書いた人

廣本 (id:hrhrkun)

以前はBIの開発業務を担当。今はナレッジマネジメントの推進や、AIエージェントの開発をメインにいろいろ行っています。