見出し画像

Tableau難関との噂のLOD表現、あんま強ないぞ~??(FIXED/INCLUDE編)

???『これはもう、Tableauテクノロジー発動でしょ。』

(詠み人知らず)

時は2000も22年の年末、カタールW杯が熱いこの冬に、
TableauDataSaber挑戦中のtomoakiさんですが、
技術試練【ord.8 HandsOn - Advanced I】でむずいむずいと聞いていた
LOD表現について、おじさんの備忘録としてまとめておこうと思います。

◇ここでわかること

・FIXED/INCLUDEって何が違うのよ
・どう理解すればいいんだいよ(めっちゃ感覚的でいいから教えてくれ)

LOD表現の解釈にあたって、勿論KT氏の動画も去ることながら、
下記のブログがとってもとっても参考になったので先んじて感謝申し上げます。(第4編までよみました。)

EXCLUDEは若干FIXED/INCLUDEとは毛色が変わるので、
また別途説明しようと思っています。

◇はじめに:なぜとっつきにくいのか

それは、そう、シンプルに。
横文字が多いからわっかりにくい!!!!!
(※個人的な感想です。)

詳細レベルの式 (LOD 式としても知られる) ではデータ ソース レベルおよびビジュアライゼーション レベルで値を計算できます。ただし、LOD 表現は計算したい粒度のレベルをさらにコントロール可能です。粒度のより細かいレベル (INCLUDE)、それよりも粒度の大きなレベル (EXCLUDE)、またはまったく個別のレベル (FIXED) で計算を行えます。

https://help.tableau.com/current/pro/desktop/ja-jp/calculations_calculatedfields_lod.htm

…なにがデータソースレベルでなにがビジュアライゼーションレベル値なんだということなのです。賢くないので難しい言葉は苦手です。

とりあえず、
FIXは何となく「固定する」っぽい意味だから、
(なんかしらを固定したりまとめたりするんだろうな~)と思いつつ、
INCLUDEは「含める」EXCLUDEは「除外する」だから、
なんか含めたり除外したりすればええんでしょうね。

そのくらいの理解で今は考えていただいてダイジョウブです!

◇そもそもLODってなんですの?

LODとは…Level of Detailの略称、日本語で直せば「詳細レベル」…。
なんか強くなりそうな名前だ…。(?)

ここで重要なキーワードは、Tableauは「集計」をしているということ。

その集計は、Tableauにおいて、どういった基準(レベル)で行われているのか?
→答えは:「該当列のすべての値」になります。

例えば売上明細で「1レシートあたり」でデータソースが作られている場合、
平均や最大値/最小値は「1レシートあたり」の売上となります。

めちゃ簡易にExcelでつくりました。

ただ、Tableauの悲しいことは、このデータソースの行を参照/検索した集計が少しだけ苦手になっていて、
例えば、
「あ~東京店と大阪店の売上平均を知りたいな~」
「果物ごとの売上平均を知りたいな~」
というときに苦戦します。

そういったときに、
「集計のレベル(Level)を少しだけ詳しく(detail)していったん
中間的な集計テーブルを作っておかない??
というのがLODです。(伝われ)

LODによってある程度粒度を操作できるようになることで、
自由度高く集計単位を調節し、分析を深化させることができるんです。

◇FIXED…それは”検索&固定”の呪文…。

(余談)tomoakiさんはTableauに限らず、
          Excelの関数やHTMLのタグのことを漏れなく「呪文」と呼びます。

LOD表現の中で肝となるのがFIXEDです。
集計の粒度を自由に操るにあたってよく利用します。

FIXEDの定義的な意味では…
「指定されたディメンションのみを用いて集計する」ことです。

ディメンションなんて難しい言葉を使うな?
ここでは「検索したい条件」とくらいに覚えておきます。

{ FIXED [ディメンション1],[ディメンション2]… : [集計式] }
・[ディメンション]には中間テーブルの粒度に加えたい
 ディメンションを入れる。(複数可能)
・[集計式]にはディメンションの集計方法を入れる。

例えば、上記のデータソースで、
「店舗ごとの売上平均を知りたい」と思った場合、下記になります。

AVG{ FIXED [店舗] : SUM[売上] }

今回は東京店、大阪店のみですが、これが愛知店、福岡店…などなど全国に展開していて、
各店舗ごとに、どの店舗が売上高いか?ランキングみたいなものも作り始められそうですね。

通常ただAVG[売上]をしてしまうと、
「1レシートあたりの平均」となってしまっていたのが、

FIXEDで「店舗ごとで集めていくぞ~~~!」と集計する前に、
予め中間で集計して”固定”しておくことで、
「1店舗あたりの平均」を出すことができるんです。

tomoakiさんは学校で覚えました。
3年1組のクラスメイトが1列にならんでおります。

単純に「3年1組の平均身長いくつなんだい?」と聞くのが、
LOD計算を抜きにした集計だとしたら、
「このなかで”サッカー部の”平均身長はいくつなんだい?」
と言われたとき、クラス全員が一直線・一列に並んでても、
平均取れないですよね。
だから事前に「部活ごとに並びなおしてくれない??」と呼び出すのがFIXEDの役割で、サッカー部であるかどうかを一度差別化/固定することで、後々の計算(この場合は平均身長)を楽にしています。

◇INCLUDE…それは”記憶”の呪文…

INCLUDEの定義的な意味は…
「指定されたディメンションとシート上のディメンションそれぞれを考慮して集計する」ことです。

◇INCLUDE
{ INCLUDE [ディメンション1],[ディメンション2]… : [集計式] }


そもそも、LODについて立ち返ってみましょう。
LODとは、「いったん中間的なテーブルを作る」行為。
元のデータソースのなかから、指定したい条件を検索したうえで、
仮の中間テーブルをつくっていました。

このとき下に出来ているのが、LOD表現で作った仮のいったんの中間テーブル。

しかし、この中間テーブルでは、「個数」や「レシートID」「果物」が削られたものとなっています。

元々のデータソーステーブルを考えたときに、
「全お客さんの売上平均(レシートIDごとの平均)と比べあいっこしたいね」や
「店舗と果物で比べあいっこしたいね」をする際、

FIXEDだと「検索したあとに固定」されてしまっているため、

FIXED『いやいや!俺の管轄は店舗だけなんで!!元のシートに戻ったところでその内訳のレシートIDとか果物がどうだったとか、覚えてないから!!』

と言われてしまうわけです。。

そんななか、INCLUDE…その明晰な頭脳は、それぞれの元の役割を覚えています。
INCLUDE『俺レシートIDごとに集計されてた元のデータベースの記憶、なんか覚えてんだよね。だから果物でフィルターかけたりしても覚えてるからそれなりに集計しておくよ~』

(なんという…なろう系主人公…!!!)


◇使い分け

ここで争点となるのは
「元のデータシートって参照しなおしてほしいんだっけ?どうだっけ?」にあります。

FIXEDは読んで字のごとく「固定」するので、
そこで指定したディメンションについては全力で固定しに行ってくれますが、
中間テーブルから元のテーブルに立ち返ってTableau上で表現しようとしたとき、
その時はもう元の記憶は失っています。
(一度店舗ごとの平均売上でFIXEDさせたら、もう果物別かは思い出せない)

逆にINCLUDEに関しては、元の参照データベースの情報を記憶しているので、
Tableauで言うと、
計算フィールド(中間テーブル)からワークシート(元のテーブル)に立ち返ったとき、
考慮できるディメンション(行や列、フィルターにいれたメジャー情報)が増えるので、フレキシブルな集計が可能になるイメージになります。

正直自分よりももっと詳しくわかりやすく解説している前述のブログもあるので、補足程度に記載しておきます。



いいなと思ったら応援しよう!