この記事はTableauのLOD表現がわからないけど、DBのサブクエリがわかる方向けです。
まず、LODについては以下の記事が非常に分かりやすいです。
Tableau:分かりやすいLOD-FIXED編 | エクスチュア株式会社ブログ
https://ex-ture.com/blog/2017/12/04/%E5%88%86%E3%81%8B%E3%82%8A%E3%82%84%E3%81%99%E3%81%84lod-fixed%E7%B7%A8/
LOD計算を本気で理解する - Tableau Note
https://www.yarakawa.com/post/lod_calculations
上の記事の中で、「LODは中間テーブルを作成すること」とあります。LODはTableau学習者が最も躓くポイントのうちの一つか思いますが、私も最初理解できないでいました。ところが上の記事で「中間テーブルを作成すること」=「サブクエリで集計データを作成してjoinすること」ということに気づいて一気に理解が進みました。
LODがDBのサブクエリに近いことを、TableauからDBに発行されるクエリを見ながら確認するのがこの記事の目的です。
データはTableau社から提供されているサンプルスーパーストアを使用します。
LODを使って全期間の売上合計の計算フィールドを作成します。
次に、「パフォーマンスの記録を開始」した上で、LOD計算を使ってみます。
今回はこのような集計表を作成しました。
「パフォーマンスの記録を停止」し、発行されたクエリを確認すると以下のものでした。
ここでt0は各年度毎の売上合計を計算するためのサブクエリ、t1が全期間売上合計を計算するためのサブクエリです。このLOD計算ではディメンションを指定していないため、CROSS JOINで結合されています。このようにLODがサブクエリでt1として計算されていることが確認できました。
次にディメンションを指定してみます。顧客区分ごとに集計するよう指定します。
「パフォーマンスの記録を開始」し、LOD計算を使用します。
以下のクエリが発行されていました。
今回は先ほどと違い、ディメンション(=顧客区分)を指定しているので、サブクエリの中で顧客区分を使ってGROUP BYした上で、顧客区分をキーとしてINNER JOINで紐づけています。より詳細に見たい場合、このクエリや、サブクエリをDB上で実行すると、Tableauに渡されるデータや、LODで作成されるを中間テーブルを確認できます。
このように結局のところLODは裏ではサブクエリが動いており、LODを使いたいタイミングというのはDBでサブクエリを使いたいタイミングとほぼ同じと言えるかと思います。中間のテーブルの形と、それがどのように紐づけられちるのかを意識するとLODを理解できるようになります。
これはデータソースとしてDBを使った場合ですが、エクセルなどの場合はTableauが同様の処理を行っていると理解すればいいかと思います。