見出し画像

自分用まとめ:LOD表現③注意点編

LOD表現を使い始めるととても便利な反面、思わぬ壁にぶつかることがあります。ネットなどで探してみるものの、Tableau独自の考え方で、その中でも比較的新しい機能なので解説が少なかったり分かりにくかったりすることも多いです。
今回は私が実際に実務でぶつかった壁を元に、LOD表現の注意点をまとめます。

まとめ① LODとLOD表現の概念
まとめ② LOD表現を実際に使ってみる
まとめ③ LOD表現を使う上での注意点(今はここ)

LOD表現を使用する時はクエリパイプラインが重要

実践編でも少し触れましたが、FIXEDはディメンションフィルターが適用されません。EXCLUDEとINCLUDEはディメンションフィルターが適用されます。
これらの違いはクエリパイプライン(Tableau内の操作の順序)が深く関係しています。

画像1
Tableau公式:Tableauの操作の順序

FIXEDは上から3番目の箱「Context Filters (コンテキストフィルター)」と「Dimension Filters (ディメンションフィルター)」の間に差し込まれる形で記されています。コンテキストフィルターで指定されたフィルターはFIXEDの集計に影響を与えますが、ディメンションフィルターはFIXEDの集計には影響を与えません。
EXCLUDEとINCLUDEはFIXEDよりも1つ下の階層、「Dimension Filters」と「Measure Filters (メジャーフィルター)」の間です。ディメンションフィルターを使用すると、EXCLUDEとINCLUDEの計算も影響を受けます。

例えば東北地方の都道府県の売上が地域の売上に占める割合を出したい時、フィルターが何もかかっていない状態であれば、下の2つの式は同じ値を表示します。

//売上 (都道府県)EXCLUDE
{ EXCLUDE [都道府県]: SUM([売上]) }

//売上 (地域)FIXED
{ FIXED [地域]: SUM([売上]) }
スクリーンショット 2022-06-25 16.17.21

ここで「顧客区分が消費者のオーダーのみ」でフィルターしてみると都道府県ごとの売上が消費者だけの売上になり、EXCLUDEは消費者だけの東北地方の売上が各行に表示されます。対してFIXEDはフィルターをかける前の全顧客区分の東北地方の売上が表示されたままです。

スクリーンショット 2022-06-25 16.16.13

この場合FIXEDにもフィルターを適用させたい場合にはコンテキストフィルターよりも先に動くフィルターを使用する必要があるため、顧客区分のフィルターをコンテキストフィルターにしてみると

スクリーンショット 2022-06-25 16.16.52

FIXEDの売上合計も消費者だけの東北地方の合計と同じ数字に変わりました。

逆に、EXCLUDEやINCLUDEにフィルターを適用させたくない場合はどうしたらいいでしょうか。
その場合はEXCLUDEやINCLUDEよりも後に操作されるメジャーフィルター・表計算フィルターを使用することで対応できる場合があります。
Tableauの操作の順番を考えて利用シーンに合わせて使い分けることで様々な表現をすることができます。

LOD表現は非集計

Tableauには集計関数と非集計の関数があります。単純に組み合わせて使うことはできません。例えば集計されたSUM([売上])と集計されたSUM([利益])は計算できますが、集計されたSUM([売上])と集計されていない行レベルの[利益]では計算ができません。
上の地域の売上に占める市区町村の売上の割合を計算する時も、直接このように計算フィールドに書き込むことができますが、

スクリーンショット 2022-06-25 16.36.04

エラーになって計算ができません。LOD式はTableauの内部で集計テーブルを作成してビュー上に紐づけているだけなので、テーブル結合のような非集計の扱いになります。
下の図のようにSUMなどの集計関数で集計することで計算が成立します。

スクリーンショット 2022-06-25 16.38.08

LOD式の中にSUMなどの集計関数を使っているので集計だと思ってしまいがちですが、LOD表現は非集計として扱われるということを頭に入れておく必要があります。

EXCLUDEのデフォルトは属性

Tableauはメジャーの項目をビュー上に配置する時に自動的に集計をしてくれます。売上をビューに入れた時、行IDごとの売上が1つずつ表示されるのではなく、ビューのLODに合わせた合計値が表示されますよね。
これと同じようにFIXEDとINCLUDEはビューに配置する時に自動的にSUM()がついて合計で集計されます。ところが、EXCLUDEはビューに配置する時にATTR()の属性が割り当てられます。

スクリーンショット 2022-06-24 20.48.22

このビューでは都道府県の階層の上位にある地域と都道府県だけが配置されているので、都道府県を除外したEXCLUDEの数字もきちんと表示されています。
ここに同じ階層上にないディメンションのカテゴリを配置してみると、

スクリーンショット 2022-06-24 20.59.03

EXCLUDEだけ合計欄がアスタリスク(*)になってしまいました!
各行に表示されている数字はビューに表示されているディメンションを考慮して、地域×カテゴリごとの数字がそれぞれ表示されていますが、属性はディメンションと同じように各行単位に数字を持っているだけの状態なので、この合計欄に何の集計値を表示していいのかTableauが判断できないのです。
これを回避するために、ユーザーが手動で集計を指定してあげる必要があります。

スクリーンショット 2022-06-24 21.02.33

EXCLUDEを属性からメジャーの合計に変えると、合計部分にもデフォルトの合計が表示されました。もしくはビューに配置する時点で右ドラッグ(MacはOption+ドラッグ)で指定してもOKです。
これで通常のメジャー項目と同じように集計をしてくれるようになります。

FIXEDは省略ができる

データソース全体で最新のオーダー日を表示したい、ディメンションを指定しない全体の売上が表示したい。{FIXED :MAX([オーダー日])}としてもいいのですが、省略式が便利です。

//最新オーダー日 ({FIXED :MAX([オーダー日])})
{MAX([オーダー日])} 

//全体の売上 ({FIXED :SUM([売上])})
{SUM([売上])}

分析の視覚化をできるだけ迅速に済ませるためには省略できるものは省略した方がいいですし、アドホック計算をする時も式が長くなると確認するのが大変なので、できるだけ短くなっていると便利です。
もちろん、Tableau初心者の方に引き継ぐことがわかっているものなどは丁寧に書いてあげた方が分かりやすいかもしれません(私はこれでつまづきました)。

LOD表現は奥が深い

LOD表現は苦手意識を持っている方も多いようです。私も算数が苦手なので理解するのにとても時間がかかり、今でも完全理解とは言えません。
今回の注意点以外にもLOD表現を使用する時に注意するべきことはたくさんあると思います。うまく使いこなすと色々なことができる素晴らしい機能なので、私もこれからもっとたくさん探求していきたいと思います。

この記事が気に入ったらサポートをしてみませんか?