Tableauでカテゴリをまたいだ顧客の人数を表す

Tableauでカテゴリをまたいだ顧客の人数というものを出したくて、実験しているところです。 一応はできたのですが、これでいいのかなーという疑問もあるので、質問を兼ねたエントリーです。

データはTableauに入っている「サンプル-スーパーストア」です。

作ったのはこういうグラフです。月毎に、顧客の人数が積み上がったグラフになっています。そのうえで、二つのカテゴリを指定して、その両方で購入している顧客と、片一方だけで購入している顧客と、どちらでも購入していない顧客に分けて表示しています。

f:id:Akiyah:20160630190037p:plain

計算フィールドをいくつか作ります。

[オーダー月]
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表現を駆使して計算しています。

www.tableau.com

カテゴリ1、カテゴリ2を指定するために、パラメーターも作っておきます。

f:id:Akiyah:20160630190016p:plain

一応、これで出来あがり。右側のカテゴリ1、カテゴリ2を変えるとグラフの色分けが変化します。 Tableau Publicにもあげておきます。

https://public.tableau.com/profile/akiyah#!/vizhome/_5950/sheet0public.tableau.com

計算フィールドを4つも作らないといけないところがつらいところです。 もっといい方法があるよ、という方、教えて下さい。

追記:2016/07/01 08:00

もっといい方法を教えていただきました!

tableautableau.hatenablog.com