Tableauでカテゴリをまたいだ顧客の人数を表す
Tableauでカテゴリをまたいだ顧客の人数というものを出したくて、実験しているところです。 一応はできたのですが、これでいいのかなーという疑問もあるので、質問を兼ねたエントリーです。
データはTableauに入っている「サンプル-スーパーストア」です。
作ったのはこういうグラフです。月毎に、顧客の人数が積み上がったグラフになっています。そのうえで、二つのカテゴリを指定して、その両方で購入している顧客と、片一方だけで購入している顧客と、どちらでも購入していない顧客に分けて表示しています。
計算フィールドをいくつか作ります。
[オーダー月] DATETRUNC('month', [オーダー日])
[顧客人数(カテゴリ1&カテゴリ2)] {FIXED [オーダー月] : sum( {FIXED [顧客名],[オーダー月] : iif( ( sum(iif([カテゴリ] == [カテゴリ1], 1, 0)) > 0) and ( sum(iif([カテゴリ] == [カテゴリ2], 1, 0)) > 0), 1, 0) }) }
[顧客人数(カテゴリ1)] {FIXED [オーダー月] : sum( {FIXED [顧客名],[オーダー月] : iif( ( sum(iif([カテゴリ] == [カテゴリ1], 1, 0)) > 0) and (not sum(iif([カテゴリ] == [カテゴリ2], 1, 0)) > 0), 1, 0) }) }
[顧客人数(カテゴリ2)] {FIXED [オーダー月] : sum( {FIXED [顧客名],[オーダー月] : iif( (not sum(iif([カテゴリ] == [カテゴリ1], 1, 0)) > 0) and ( sum(iif([カテゴリ] == [カテゴリ2], 1, 0)) > 0), 1, 0) }) }
[顧客人数(なし)] {FIXED [オーダー月] : sum( {FIXED [顧客名],[オーダー月] : iif( (not sum(iif([カテゴリ] == [カテゴリ1], 1, 0)) > 0) and (not sum(iif([カテゴリ] == [カテゴリ2], 1, 0)) > 0), 1, 0) }) }
オーダー月は、LOD表現のディメンションに使うために使うために作りました。 後の4つは、指定したカテゴリ1、カテゴリ2の両方で購入しているか、片一方か、どちらでも購入してないかをLOD表現を駆使して計算しています。
カテゴリ1、カテゴリ2を指定するために、パラメーターも作っておきます。
一応、これで出来あがり。右側のカテゴリ1、カテゴリ2を変えるとグラフの色分けが変化します。 Tableau Publicにもあげておきます。
https://public.tableau.com/profile/akiyah#!/vizhome/_5950/sheet0public.tableau.com
計算フィールドを4つも作らないといけないところがつらいところです。 もっといい方法があるよ、という方、教えて下さい。
追記:2016/07/01 08:00
もっといい方法を教えていただきました!