1. HOME
  2. ブログ
  3. Tableau CRM
  4. Tableau(タブロー)のWINDOW_COUNTのDISTINCTをどうする?

BLOG

ブログ

Tableau CRM

Tableau(タブロー)のWINDOW_COUNTのDISTINCTをどうする?

Tableau(タブロー)のWINDOW_COUNTのDISTINCTをどうする?

 

 

 

(1)問題の所在

 移動しながらある特定の範囲をユニーク”カウントしたい場合、どう対応するか?

 

 下記Vizでは、上段では月別で受注顧客数をユニークカウントしており、下段では各月を基準として、過去12ヶ月の範囲で月別ユニークカウントされた顧客数を移動合計しております。

※ 例えば、下段は2017年1月において、2016年2月〜2017年1月の各月でユニークカウントされた顧客数を合算しております。

 

 ここで今回のお題です。

 各月を基準として過去12ヶ月の範囲内で購入顧客を移動ユニークカウントするにはどうすれば良いか? これが意外と難題です。言い換えると、WINDOW_COUNTDの関数が無いので、じゃ、どう代替するか? となります。

 先ほどのVizは、繰り返しになりますが、上段は、あくまで各月で顧客をユニークカウントした数値であり、また、下段では各月を基準とした過去12ヶ月の範囲内で移動合計された数値が示されただけです。

WINDOW_SUM(COUNTD([顧客名]),-11,0)

 

 つまり、ここでは過去12ヶ月の範囲内で顧客はあらためてユニークカウントされておりません。

下図では、過去12ヶ月(… ,11,0の部分)の範囲内で3カウントされており、この範囲において重複カウントされております。

 

 

(2)問題の場合分け

 a) 移動計算が不要な場合

 移動計算を考慮不要な場合(=今回でいうと、各月を基準として過去12ヶ月の範囲内での移動ユニークカウント)、下記の対応方法があります。ぜひ、参考にしてみてください。※ INCLUDE, EXCLUDEの使い方のひとつのヒントにもなります。

 

他社様記事はこちら)

Tableau:累計ユニークカウント数を時系列グラフで表現する

 

 

 b) 移動計算ユニークカウントが必要な場合

 ある特定期間の範囲内で、移動計算ユニークカウントを実施する場合は下記の対応を実施すると良いです。

https://kb.tableau.com/articles/howto/calculating-a-running-count-distinct?lang=ja-jp

https://community.tableau.com/thread/122852

 

 今回のゴールは下記のとおりです。2016/2〜2017/1の特定12ヶ月の範囲内の顧客ユニークカウントが530となります。

 

別シートで顧客ユニークカウントを検証)

 

 

(3)手順

 それでは、早速、実施していきましょう。大まかな手順は下記の通りとなります。ただし、特殊な設定を用いますのでそれなりの制約事項が伴います(表示速度が明らかに減衰するなど)。

 

【手順】

 ① 過去12ヶ月の範囲で顧客をユニークでカウントするためにWINDOW_MAXを用意する

 ② ①を合計するWINDOW_SUM関数を用意する

 ③ 返されるレコードを1つにするためのFIRST==0 関数を作成する

 ④ 特定のディメンションを使って、詳細レベルを割り当てる

 

 

 ① 過去12ヶ月の範囲で顧客をユニークでカウントするためにWINDOW_MAXを用意する

  計算名称:WINDOW_MAX(MAX(1),-11,0)

  WINDOW_MAX(MAX(1),-11,0)

 

 ② ①を合計するWINDOW_SUM関数を用意する

  計算名称:WINDOW_SUM([WINDOW_MAX(MAX(1),-11,0)])

  WINDOW_SUM( [WINDOW_MAX(MAX(1),-11,0)] )

 

 ③ 返されるレコードを1つにするためのFIRST==0 関数を作成する

  計算名称:FIRST()==0

  FIRST()==0

 

 ④ 特定のディメンションを使って、詳細レベルを割り当てる

 下記の手順で配置した後、特定のディメンションを調整します。

  ・WINDOW_SUM([WINDOW_MAX(MAX(1),-11,0)]) を行に配置する

  ・月(オーダー日):不連続(カスタム:年/月)を列に配置する

  ・詳細に、「顧客名」を配置する

   ここで、行に配置したWINDOW_SUM([WINDOW_MAX(MAX(1),-11,0)]) を表計算の編集を実施して、「ネストされた計算」で下記のように設定する。

  ●WINDOW_MAX(MAX(1), -11,0) は特定のディメンションで「オーダー日の月」と関連付ける

 

 

  ●WINDOW_SUM([WINDOW_MAX(MAX(1),-11,0)])は、特定のディメンションで「顧客名」と関連付ける

 

 

  ・フィルターに、FIRST()==0 を配置、特定のディメンションに対して下記のように設定する

 

 フィルターに配置したFIRST()==0フィールドを右クリック、編集して、「真」を選択。

 

 

「特定のディメンション」についてはこちらが参考になります。「表計算」においてもっとも攻略が難しいテーマだと思いますので、別途、深掘りしたい方におすすめです。

Tableau(タブロー)の表計算の編集・特定のディメンションについて

 

他サイト記事)

 https://www.yarakawa.com/post/tableau_tablecalculations

 http://blog.livedoor.jp/tab_hiro/archives/19821936.html

 ‘https://data-viz-lab.com/tableau-lod

 

 

 

 今回の完成図は下記の通りです。

 

 

(4)発展編

 購入回数区分で区分けしたい場合は、下記の計算式を「色」へ配置すると実現可能です。

 

計算式名:購入回数区分

IF {FIXED [顧客名]: COUNTD([オーダー Id])} = 1 THEN “1回”
ELSEIF {FIXED [顧客名]: COUNTD([オーダー Id])} = 2 THEN “2回”
ELSEIF {FIXED [顧客名]: COUNTD([オーダー Id])} = 3 THEN “3回”
ELSEIF {FIXED [顧客名]: COUNTD([オーダー Id])} >= 4 THEN “4回以上”
END

 

 

 

まとめ

 今回は、移動計算ユニークカウントをかなり変則的な計算式を用いて実現しました。ここは、WINDOW_COUNTDの実装を待ちたいと思います。気になる人は、こちらに投票してみてください。

 https://community.tableau.com/ideas/1344

 

 

 

 

 

 

 

関連記事