こんにちは、エクスチュアの渡部です。
LODブログ第二弾です。今回は、FIXED関数について説明します。
前回のブログの続きになります。
お読みで無い方は下記を見ることによって理解が深まります。
前回のブログでは、通常の集計関数は「データソースの行レベル」でしか集計を行えないことを説明しました。
対して集計の粒度を自由に変えられるのがLOD計算でしたね。では、FIXEDはどのような仕組みで集計の粒度を変えられるのでしょうか?
・通常の集計関数と、FIXED関数の集計の違い
実は、「通常の集計関数を使った集計」と「FIXED関数を使った集計」では、集計に使うデータソースが違います。通常の集計関数は当然、データソースをそのまま用います。それに対してFIXEDを使った集計は「データソースを基に作成した中間テーブル」を使って集計を行うのです。(これはTableauがDB側に発行するSQLを読み解くと理解できます)
例えば、サンプルスーパーストアのデータを用いて「顧客ごとの売上平均」を求める以下の例を見てみましょう。
顧客ごとの売上平均を出すには、以下のような2回の集計が必要です。
①:顧客ごとの売上合計値を出す(中間テーブルを作る)
②:①の結果における平均値を出す
この①を可能にするのがFIXED式です。この場合だと、{ FIXED [顧客名] : SUM([売上]) }と書きます。
②は、AVG({ FIXED [顧客名] : SUM([売上]) })とFIXED式を通常のAVGの()で囲むだけです。こちらはシンプルですね。
このようにして「顧客ごとの売上平均」が算出可能になります。
この「①中間テーブルを作る」→「②中間テーブルに対して集計する」が、FIXED式を使った集計の基本的な流れです。つまり、「FIXED式を書くこと=中間テーブルを作ること」みたいに覚えてしまうと理解が楽です。では、続いてそんなFIXED式の書き方を説明します。
・FIXED式の書き方
FIXED式の基本的な書き方は以下の通りです。
——————–
{ FIXED [ディメンション1](,[ディメンション2]…) : [集計式] }
・[ディメンション]には中間テーブルの粒度に加えたいディメンションを入れる。
・[集計式]にはディメンションの集計方法を入れる。
——————–
「FIXED式を書くことは中間テーブルを作ること」なので、FIXED式の書き方次第で、「中間テーブル」の構成も変わっていきます。いくつか例を並べます。
(1)中間テーブルの粒度:顧客ごとの売上
→{FIXED [顧客名] : SUM([売上])}
顧客ごとの売上合計 :SUM({FIXED [顧客名] : SUM([売上])})
顧客ごとの売上平均 :AVG({FIXED [顧客名] : SUM([売上])})
顧客ごとの売上最大値:MAX({FIXED [顧客名] : SUM([売上])})
顧客ごとの売上最小値:MIN({FIXED [顧客名] : SUM([売上])})
(2) 中間テーブルの粒度:顧客ごとの購買日数
→{FIXED [顧客名] : COUNTD([オーダー日])}
顧客ごとの購買日数合計 :SUM({FIXED [顧客名] : COUNTD([オーダー日])})
顧客ごとの購買日数平均 :AVG({FIXED [顧客名] : COUNTD([オーダー日])})
顧客ごとの購買日数最大値:MAX{FIXED [顧客名] : COUNTD([オーダー日])}
顧客ごとの購買日数最小値:MIN{FIXED [顧客名] : COUNTD([オーダー日])}
(3) 中間テーブルの粒度:顧客ごとの初回購買日
→{FIXED [顧客名] : MIN([オーダー日])}
顧客ごとの初回購買日最大値:MAX({FIXED [顧客名] : MIN([オーダー日])})
顧客ごとの初回購買日最小値:MIN({FIXED [顧客名] : MIN([オーダー日])})
(4) 中間テーブルの粒度:各サブカテゴリの1日当たりの売上
→{FIXED [オーダー日],[サブカテゴリ] : SUM([売上])}
各サブカテゴリの1日当たりの売上合計 :SUM({FIXED [オーダー日],[サブカテゴリ] : SUM([売上])})
各サブカテゴリの1日あたりの売上平均 :AVG({FIXED [オーダー日],[サブカテゴリ] : SUM([売上])})
各サブカテゴリの1日あたりの売上最大値:MAX({FIXED [オーダー日],[サブカテゴリ] : SUM([売上])})
各サブカテゴリの1日あたりの売上最小値:MIN({FIXED [オーダー日],[サブカテゴリ] : SUM([売上])})
(5) 中間テーブルの粒度:一番最新のオーダー日
→{ MAX([オーダー日]) } ※ディメンションを指定しない場合は、「:」以前を省略できます。
書き方1つで自由な粒度での中間テーブルを作成できますね。なのでFIXED式は任意の粒度での集計が可能なわけです。
続いてFIXEDをビュー内で扱う上での注意点を説明します。
・FIXEDは宣言したディメンション以外の存在を無視する
FIXEDはFIXED式内で宣言されたディメンション以外の存在は基本的に無視します。
どういうことでしょうか。例として、AVG({FIXED [カテゴリ],[出荷モード]: SUM([売上])})という式を以下の2つのビューに入れてみました。
作成画面はこんな感じです。
①は問題なく集計されていますが、②は、「顧客区分」が集計で考慮されていません。
これは、[顧客区分]がFIXED式の中で宣言されていないためです。もし顧客区分を考慮して欲しいなら、FIXED式内で[顧客区分]を宣言する必要があります。
このように、ビュー内で使用しているディメンションであっても、FIXED式内で記載されていないディメンションは存在が考慮されません。
フィルターも同様です。フィルターで使用しているディメンションがFIXED式内で宣言されていなかったら、何もフィルターがかかっていないのと同じ状況になります。
※ただ、ビュー内に使用しているディメンションでFIXED式内で宣言したディメンションが欠損している場合は、値が思うように出ない場合もあります。(ややこしいですが、、)この事象に関しては、この記事が参考になります。
この「宣言されたディメンション以外は無視する」というFIXEDの特性は、むしろ活用されることが多いです。LOD表現トップ15(公式)の4,10などもその活用例ですね。
———-
ちなみに、これがFIXEDがINCLUDE/EXCLUDEの最大の違いの1つです。INCLUDEやEXCLUDEは「ビュー内のディメンジョンを全て考慮した上で、式内の宣言ディメンジョンを足し引きする関数」です。宣言されたディメンション以外は無視するFIXEDとは、ここが根本的に異なります。
FIXEDは都度ディメンションの宣言が必要なため、ビュー内のディメンションが多い時には少し面倒です。また、うっかり必要なディメンションの宣言を忘れたら、間違えた集計結果が出てしまう可能性があります。そのような場面に活躍するのが、INCLUDEやEXCLUDEになります。
———-
・FIXED式の結果はディメンションとして扱える→ヒストグラムを作れる
最後にもう1つ、LOD式の中でFIXED式にしかない、とても便利な特徴を説明します。
FIXED式で作った中間テーブルの値を用いて「ヒストグラムを作る」ことが出来るのです。
個人的にはこのFIXED×ヒストグラムは使用場面が頻発しています。思うがままの粒度でヒストグラムが作れるので、様々な視点での分析が行えるからです。
例えば、サンプルスーパーストアを使ってこんなことをしてみました。
「顧客ごとの購買回数」のビンを作り、顧客区分ごとに顧客の個別カウント数を視覚化しています。
さらに、二軸に合計に対する累積比率を入れることで、「購買が〜回の人までで客の〜割を占める」と言ったような視点での分析を可能にしました。
このようなVizでもFIXEDの手にかかれば以下の手順であっという間に作れます。
① 顧客区分×顧客ごとのオーダー回数を算出するFIXED式を作成する。
② ①の結果をビンに変換する。※作成した計算フィールドを右クリック→作成→ビン
③ビンを列に、顧客名の個別カウント数を行に入れる
④表計算で顧客名の個別カウント数の累計を出す。→「表計算の編集」→「セカンダリ計算の追加」で「合計に対する割合」を選択
※TableauPublicでワークブックのダウンロードも可能なので、興味ある方はご確認ください。
とても便利な機能です!
・まとめ
最後までお読みいただきありがとうございました。
FIXED関数は一度理解したら間違いなく大活躍し、Tableauライフをより一層素敵なものにするでしょう。
私はFIXEDの仕組みが最初さっぱり分からず、FIXEDが必要な場面では、狙った値が出るまで式をひたすら直す時期が続いていました。
ただ、『FIXEDは中間テーブルを作る関数」だということに気付いてからは、FIXEDに対する様々な疑問が一気に解決されました。
覚えるには実際に触っていただくのが一番なので、この記事を参考程度に読みながら使って頂けると幸いです。
次回はINCLUDEについて説明します。
FIXEDが理解出来ればINCLUDEは容易いものです!
————-
エクスチュアは国内では希少なTableau Certified Professionalも在籍するTableauのパートナー企業です。
また、Google Cloud Platform、Adobe Marketing Cloudといったマーケティングテクノロジーに精通した経験豊富なスタッフが、御社のビッグデータ分析をサポートします。
お問い合わせはこちらから
ブログへの記事リクエストはこちらまで