LODの使い方
1. LODを使ってみよう
LOD式はパワフルだけど・・・ 分かりにくいです。
本日はそもそもLODって何? というところから、LOD式の FIXEDの使い方をマスターしていきたいと思います。
さて問題です!
Q1:
100ⅿ陸上選手の記録について、世界最速記録との差を計算してください。
Q2: 「Official髭男dism」のアルバム「Traveler」は2019年10月の発売でした。「KING GNU(きんぐぬー)」の アルバム「CEREMONY」は2020年1月の発売でした。発売から最初の3か月の売上累計はどちらが多かったでしょうか? (どちらが勢いが有ったでしょうか。)
※ どちらも2019年紅白歌合戦出場アーティストです。
こういった日常的(?)な問題にもLOD式が役立ちます。
まずは難しく考えないでやってみましょう!
PAGE_BREAK: PageBreak
その前に・・・・
詳細レベル(LOD) と 詳細レベル式(LOD式)は別物です。
まずはじめに:
メジャー(連続した数値)は ディメンジョン(集計レベルの単位)に
分けられ集計されます。
水が流れてマスに溜まるようです。
これは抗いようがありません。
LOD (Level Of Detail:詳細レベル) とは?
→ 可視化で使っている集計の区分のことです。上の図でいうところのマス目ですね。
ディメンションの組み合わせでもあります。 → 地区 X カテゴリ
練習をしてみましょう。
以下の状態でLODは何ですか?
以下の状態でLODは何ですか?
以下の状態でLODは何ですか
/poll ”可視化で利用しているLODは何でしょう?” “商品” ”地区” ”顧客” ”売上”
★ ここで高輪さんの自己ベスト売上記録(1件当たり)はいくらでしょう?
/poll ”高輪さんの自己ベスト売上記録を求めるために利用すべきLODは何でしょう?” “商品” ”地区” ”顧客” ”売上”
ヒント: 「データの表示」→「すべてのデータ」
このように
可視化で利用しているLOD = [地区] x [担当] x [商品] が集計レベル であるのに対し
高輪さんの自己ベストを求めるLOD = [担当] の集計レベル となり
異なる集計の範囲で考えないといけません。
このように、可視化で使われるLOD(マス目)のルールを無視して、新しいマス目を作り新しい集計をするのがLOD式となります。
LOD式のルール①:
可視化で利用しているマス目(LOD)を無視して新しいマス目の集計で考えたい場合に利用
(逆に言えば:可視化のLODと同じ場合はLODをむやみに利用しない。)
このように可視化のLODを無視した計算式を作るには以下のようなLOD式を書きます。
LOD式の書き方は以下のようになります。
{
FIXED [無視して作る新しい集計レベル] :
MAX ([集計対象メジャー])
}
LOD式には FIXED / EXCLUDE / INCLUDE がありますが、ここでは FIXED しか扱いません! 個人的な見解ですが、FIXEDで9割は片が付きます。難しく考えず、まずはFIXEDをマスターしましょう!
解説を入れます。
{
FIXED [無視して作る新しい集計レベル] : →新しく固定して利用したい集計レベル
MAX ([集計対象メジャー]) →上の集計レベルでの何をどう集計するか?
}
今回は以下のように解釈します。
{
FIXED [担当] : →新しい集計レベル「地区」に固定して
MAX ([売上]) →「売上」の合計を集計する
}
PAGE_BREAK: PageBreak
それでは、冒頭のクイズに戻りましょう。
Q1:
100ⅿ陸上選手の記録について、世界最速記録との差を計算してください。
各選手の年ごとの平均(記録)をクロス表に表します。
手順
・ 選手氏名を行にドラッグ
・ 年をディメンジョンにドラッグしてから列にドラッグ (最初連続メジャーのため)
・ 記録の「平均」をテキストにドラッグ (1年に複数回記録があるため合計ではない)
ちなみに、陸上100ⅿの世界記録は、ジャマイカのウサインボルト選手が2009年に記録した、
9.58 です。
この記録を計算するにはどうしたらよいでしょうか?
計算式: 世界記録を作ってみて下さい。
例えば、陸上の記録とは、最も小さい(早い)記録ですから、MINを使ってこのようにして見たらどうでしょうか?
MIN
世界記録になりませんね?
これは集計の単位が、可視化で使っているLODに自然と従ってしまうからです。
ここで以下のよう計算式に書き換えてみましょう。
{FIXED :
MIN([記録])
}
どうでしょう? 世界記録 9.58 が全てのマスに入りました。
この計算式は以下のように解釈します。
{FIXED : → ディメンジョン指定がないので、全てにおいて
MIN([記録]) → 最小の記録を持ってくる
}
このように、可視化で利用している詳細レベル(LOD)を無視して、新しい集計レベルで考え直したい場合にLOD式を使います。
おさらい:
A: /poll “可視化で利用しているLODは何でしょうか?” “年” ”選手氏名” ”記録” “全体”
B: /poll “世界記録を計算するためのLODは何でしょうか?” “年” ”選手氏名” ”記録” ”全体”
A と B のLODが違い場合にLOD式が必要になります。
ここで、レコードレベルでどんなことが起こっているか見てみましょう。
・ Ctrl +A で全てを選び
・ 右クリックでデータの表示
・ 参照元タブをクリック
全ての行に「世界記録 9.58」が入っているのが分かります。
全ての行に同じ値が入るので、それぞれのレコードと比較するのは簡単です。
この(FIXEDで指定したLODについて)全て同じ値が入るんだという感覚がすごく大事なんじゃないかと思います。レコード単位に同じ値が入るので、レコード単位で計算ができます。
世界記録との差を作ってみましょう。
ばし選手は記録が 2行有るので、 世界記録との差 は平均で表示しましょう。
ここではで触れませんが、可視化の仕方はいろいろ工夫できると思いますので、お試しください。
もう一つとても重要なポイント; LOD FIXEDと フィルターの関係です。
タイトルに詳細に 「世界記録合計」を含めておくと見やすいですが、やっていただかなくてもOKです。(詳細に世界記録を入れておきます)
世界記録ではなくて、 日本記録が見たいと思います。
国籍=日本のフィルタをかけてみましょう。 「世界記録」の値は変わりましたか?
変わらないんです!
国籍のフィルタを右クリックし、「コンテキストに追加」を選択します。
記録は 桐生選手が 2015 年に記録した 9.87 に変わります。 (ちなみに、これは追い風のため参考記録であり、日本記録ではないそうです。)
とにかくFIXEDの計算結果は強いので、普通のディメンジョンフィルタが効きません。(この性質を逆に利用する場合もあります。) フィルタの順序については以下を参照ください。
Tableau の操作の順序
https://help.tableau.com/current/pro/desktop/ja-jp/order_of_operations.htm
PAGE_BREAK: PageBreak
それでは、Q2に行ってみましょう!
・・・ と思うのですが、おそらく時間が足りないかもしれません。皆さん各自でトライしてみてくださいね!
Q2: 「Official髭男dism」のアルバム「Traveler」は2019年10月の発売しました。「KING GNU(きんぐぬー)」の アルバム「CEREMONY」は2020年1月の発売でした。発売から最初の3か月の売上累計はどちらが多かったでしょうか? (どちらが勢いが有ったでしょうか。)
髭男 と KING GNU ではアルバムの発売日が異なるので、単純に比較することができません。
ヒント: 発売初月 から数えて、何か月目かを計算します。
ここで、発売初月 とは、アルバム ごとに最初の(最小の)販売記録のある月となります。
ここでは、「アルバム名」という新しく独立した集計の単位で、最も古い日付を「発売月」とします。
A: /poll “可視化で利用しているLODは何でしょうか?” “アーチスト” “アルバム” “日付” ”推定売上”
B: アルバム(ごと)の発売日初月を求めるためのLODは何でしょうか?
/poll “アルバム(ごと)の発売日初月を求めるためのLODは何でしょうか?” “アーチスト” “アルバム” “日付” ”推定売上”
これも、可視化のLODと利用したいLODが異なります。
可視化のLODを無視して、「アルバム名ごと」という新しい範囲で集計をやり直すために、LOD式を作ります。
{ FIXED [アルバム名] : MIN([日付])}
発売月からの経過月を作ります。 → ディメンジョンにします。
datediff(‘month’,[発売月],[日付])
列の 日付 を 発売月からの経過月 に置き換えます。
推定売上枚数を累計にします。
可視化は色々工夫出来ると思います。
KING GNU の方が発売当初3か月の売上は大きかったようですが、髭男の方がロングセラーでトータルの売上はKING GNUを越えているようです。
PAGE_BREAK: PageBreak
【メモ】 EXCLUDE はどんな動きをするの?
EXCLUDEは「可視化で利用しているLODの中で、何を 「無視するか」 を指定します。
Q1 のFIXEDを使用した世界記録ですが、こちらはEXLUDEを使って書くこともできます。
可視化で利用してるLODは 「選手氏名」 と 「年」 ですから、
「選手氏名」 と 「年」 という枠を無視すれば世界記録が取れます。
以下のように「年」を無視すると「選手氏名」の枠の範囲で集計をします。
→自己ベストですね。
{EXCLUDE [年]: MIN([記録])}
以下のように「年」と「選手氏名」を無視すると「全体」の枠の範囲で集計をします。→世界記録ですね。これは {FIXED : MIN([記録])} と同じ結果になります。
{EXCLUDE [年],[選手氏名]: MIN([記録])}
【メモ】 INCLUDE はどんな動きをするの?
INCLUDEは可視化には存在しないLODを忖度して入れる場合に使います。
今、以下のように日本の選手(?)の記録がある場合、2019年については3人の選手の平均記録は (9.97 + 10.01 +13.00) / 3 = 10.993 ・・・ (ア) となります。
ここで、行から「選手氏名」のLODを取り去ると、数値が 10.993 から 11.495 に変わってしまいます。これはなぜでしょう?
実は「ばし」選手は計測記録が2回あり、この平均が表示されていたのでした。
ここでは、(9.97 +10.01 + 14.00 +12.00 ) /4 = 11.495 ・・・(イ) となります。
この時、可視化に使っていない「選手氏名」で一度平均を取ってから、もう一度全体で平均を取ろうとしても、「選手氏名」は可視化のLODにないので、考慮のしようがないのです。
そこで、LOD式の INCLUDE が出てきます。可視化LODには存在しない「選手氏名」を考慮して、そこで一回集計します。
{INCLUDE [選手氏名]:AVG([記録])}
上の計算式で置き換える(平均でドラッグします)と、(ア)の計算と同じ 10.993 になります。これは可視化では使っていない「選手氏名」を忖度して一度集計レベルに利用して更に集計を行います。
このように可視化に利用していないけれど、集計には考慮したい場合にINCUDEを利用します。
以下まとめると以下のようになり、つまるところ、可視化のLODと利用したいLODが違う場合のみLOD式を利用するということになります。
PAGE_BREAK: PageBreak
【お知らせ】
こちらのテキストで利用しているデータと講義のデータは、こちらのリンクから入手いただくことができ、実際にハンズオンをやっていただくことができます。
Tableau基礎・ビデオ講座-#5LOD (詳細レベル)表現
また、楽しみながらデータ分析を学べる企業向け研修も開催しておりますのでお気軽お問合せ下さい。 Twitter:DMでも!
随時そのほかのコースも追加していきたいと思いますので、ご期待ください!
PAGE_BREAK: PageBreak
#tableau4ds
https://splineglobal.com/