SQLの頭で理解するTableau 其の1

私が最初Tableauをさわったときに思ったことは、この出来上がったチャートは、要は元のデータをどう集計した上で可視化してるんだ?でした。LODを使い始めると特に。そして、チャートをつくるにあたって最終的にどう集計したのかを、全部SQLで教えてくれないかなと思いました。少し調べた限りでは、そのように解説している記事などはあまり見つからなかったと思います。それを書いてみようと思います。

まず、基本的には、ディメンションはGROUP BYで、メジャーはSUMなどで集計されます。多くの場合、青はGROUP BYです。↓

f:id:gri-blog:20210325144753p:plain

ディメンションのフィルタを使ったとすれば、SQL的にはWHEREになります(フィルタにも色々ありますが、いったんはWHEREとします)。↓

f:id:gri-blog:20210325144855p:plain

メジャーのフィルタを適用したとすると、HAVINGです。↓

f:id:gri-blog:20210325145107p:plain

メジャーを2つにしても、SQLはほぼ同じです。↓

f:id:gri-blog:20210325145231p:plain

チャートの種類を変えてディメンションをテキストや詳細に入れても、使われているディメンションとメジャーが同じであれば、SQLは同じです。↓

f:id:gri-blog:20210325145356p:plain

f:id:gri-blog:20210325145546p:plain



では、少しだけLODを考えてみましょう。LOD自体を練習するには、こちらのサイトを見ながら一通りやってみるのがいいです。

www.tableau.com

ここでは、Tableauのサンプルデータを使って上記サイトの「1. 顧客のオーダー頻度」を考えてみます。操作のイメージはこのようになると思います。↓

f:id:gri-blog:20210325150019p:plain

で、本題ですが、ここで作成した

{ FIXED [顧客 ID]: COUNTD([オーダー ID]) }

は、つまりデータをどう加工しているのか、です。LODはいったん[顧客 ID]を使ってGROUP BYした一時テーブルを、元にデータに[顧客 ID]で結合していると考えてもいいので、例えばSQLはこうでしょうか。↓

f:id:gri-blog:20210325150657p:plain

注文回数6回の人が、141人という集計結果は、元のトランザクションデータから直接は出せないので、LODを使って一旦GROUP BYしたものを用意しておき、ディメンションに持ってきて最終的にCOUNT(DISTINCT [顧客 ID])をしているのですね。



少しイメージができましたでしょうか。上記内容が、私がTableau初日に教えてほしかったなと思った内容でした。いずれ、其の2として、LODのINCLUDEやフィルタとの実行順序のあたりを、このシリーズでできればと思っております。