製品Aと製品B 両方ともお買い上げのお客さま~
さて、Kaori さんの 投稿から
Twitterでいろいろ見ていると、Tableauに関してのAkiyah さんのブログを発見しました。
標題の件は、過去に何度か質問をされた方もある内容で、
『2つの商品を両方とも購入した顧客を抽出する』
という課題です。
Akiyah さんはLODを用いて4つのフィールドを作成し、VIZを作成されています。
ただ、ブログ内にもある通り、
計算フィールドを4つも作らないといけないところがつらいところです。 もっといい方法があるよ、という方、教えて下さい。
ということを書かれています。
そこで、これにお答えして、ちょっと別の方法をご紹介したいと思います。
LODを使用するのは同じですが、4つのMeasure Fieldsを作成する代わりに、一つのDimensionを作成して、カテゴリ分けしてしまいます。
作成する Calculated Fieldは、ちょっとややこしいですが、全体で見れば、より使いやすいと思います。
使いやすさの一つの例も紹介します。
Calculated Field を作成する
LODを用いて、Field内で条件分けを複数作成します。
[Customer Category]
if
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 1] then [Sales]end)}>0
and
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 2] then [Sales]end)}>0
then
"1-Purchased both "+[Param 1]+" and "+[Param 2]
elseif
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 1] then [Sales]end)}
=
{fixed[Customer Name],[Order month] :sum([Sales])}
then "2-Purchased "+[Param 1]elseif
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 2] then [Sales]end)}
=
{fixed[Customer Name],[Order month] :sum([Sales])}
then "3-Purchased "+[Param 2]ELSE
"4-No purchase on "+[Param 1]+" nor "+[Param 2]
END
ちょっと長い? そうですね。ちょと解説を付けます
[Customer Category]
if
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 1] then [Sales]end)}>0 // 該当月、該当顧客のうち、カテゴリがParam 1 に合致する売上げを合計して、0 より大きいかどうかを判定and
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 2] then [Sales]end)}>0 // 該当月、該当顧客のうち、カテゴリがParam 2 に合致する売上げを合計して、0 より大きいかどうかを判定
then
"1-Purchased both "+[Param 1]+" and "+[Param 2] // 両方に合致すれば値を返す。(=Param 1, Param 2 両方に売上げがある場合のみ)
elseif
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 1] then [Sales]end)} // 該当月、該当顧客のうち、カテゴリがParam 1に合致する売上げを合計
=
{fixed[Customer Name],[Order month] :sum([Sales])} // 該当月、該当顧客の売上げを合計
then "2-Purchased "+[Param 1] // 両者が合致すれば値を返す。(両方が同じであれば、結果的に Param 1 のみに売上げがある場合となります)elseif
{fixed[Customer Name],[Order month]:sum(if[Product Category]=[Param 2] then [Sales]end)} // 該当月、該当顧客のうち、カテゴリがParam 2に合致する売上げを合計
=
{fixed[Customer Name],[Order month] :sum([Sales])} // 該当月、該当顧客の売上げを合計
then "3-Purchased "+[Param 2] // 両者が合致すれば値を返す。(両方が同じであれば、結果的に Param 2 のみに売上げがある場合となります)ELSE
"4-No purchase on "+[Param 1]+" nor "+[Param 2] // 上記以外の場合
END
できましたか。
テキストに、1~4 の番号を追加したのは、強制的にその順序でソートするためです。必須ではありません。ちょっとしたノウハウです。
これで、このFieldをColor Shelf に追加すれば、色分けは完成です。ついでにLabel Shelfにも追加してLegend がなくても分かるようにしました。
このソリューションのもう一つのメリットは、表示が「Param-1」 とかだと、どのカテゴリか分かりにくかったのが、選択されたカテゴリ名を表示することで一目で分かるようになることです。
でもまだ、なんとなく物足りません。
というのは、両方買った顧客のことを強調したいので、それを工夫したいのです。
そこで、さらに一計を案じます。
強調1-Colorを変える
1- のカテゴリを強調する=他のカテゴリを目立たないようにします。
Edit Colorsで、薄めの配色を選択します。
次に、強調したい1- のカテゴリのカラーのところでW-Click します。
Paletteが開くので、濃い色を選択します。
センスはともかく、ちょっと強調できました。
強調-2 Label サイズを変える
さらに、もうひとつ欲張ります。
1- のカテゴリだけ、Labelを大きくしたいのです。
。。。
これは標準では出来ないので、ちょっとしたトリックを使います。
さっきの色と一緒で、「1-」 と それ以外 で違うLabelを使います。そのために、Labelのためだけに、二つのFieldを追加します。
実行するのはいたって簡単。
[HighLight]
if [Customer Category] = "1-Purchased both "+[Param 1]+" and "+[Param 2]
then [Customer Category] end
[Non-HighLight]
if [Customer Category] <> "1-Purchased both "+[Param 1]+" and "+[Param 2]
then [Customer Category] end
上記の2つのFieldです。
ここから、2つともLabel Shelfに追加します。
Label ShelfをClickしたあと、詳細設定を開きます。
詳細設定のダイアログの中で、改行を解除し、Highlight のみ選択し、サイズを変更し、と太字にします。
Labelは、複数設定したとき、別々のフォーマットが使えるのです。
なお、Fieldの計算式で、Else 以下を省くことで、条件に合わない場合は[null] 扱いとなっています。[null] は、#NA などの表示がされず、自動的に空白(スペースにもならない)扱いされるので、2つのFieldの条件が同時に成り立たない限り、重複して表示されることはありません。
最終的に、こんな感じの出来上がりです。
では、ご自分で試して楽しんで下さい。