Tableau

Tableau:LOD徹底解説 – FIXED編

こんにちは、エクスチュアの渡部です。
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([売上])}

(2) 中間テーブルの粒度:顧客ごとの購買日数
→{FIXED [顧客名] : COUNTD([オーダー日])}

(3) 中間テーブルの粒度:顧客ごとの初回購買日
→{FIXED [顧客名] : MIN([オーダー日])}

(4) 中間テーブルの粒度:各サブカテゴリの1日当たりの売上
→{FIXED [オーダー日],[サブカテゴリ] : SUM([売上])
}

(5) 中間テーブルの粒度:一番最新のオーダー日
→{ MAX([オーダー日]) } ※ディメンジョンを指定しない場合は、「:」以前を省略できます。

書き方1つで自由な粒度での中間テーブルを作成できますね。なのでFIXED式は任意の粒度での集計が可能なわけです。
続いてFIXEDをビュー内で扱う上での注意点を説明します。

・FIXEDは宣言したディメンジョン以外の存在を無視する

FIXEDはFIXED式内で宣言されたディメンジョン以外の存在は徹底的に無視します。
どういうことでしょうか。例として、AVG({FIXED [カテゴリ],[出荷モード]: SUM([売上])})という式を以下の2つのビューに入れてみました。

作成画面はこんな感じです。

①は問題なく集計されていますが、②は、「顧客区分」が集計で考慮されていません。
これは、[顧客区分]がFIXED式の中で宣言されていないためです。もし顧客区分を考慮して欲しいなら、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/EXCLUDEについて説明します。
FIXEDが理解できれば、INCLUDE/EXCLUDEの理解は容易いものです!

————-

エクスチュアはTableauのテクニカルサポート・ダッシュボード構築をはじめ、
GoogleCloudPlatformやTableauなどを組み合わせたビッグデータ分析基盤の構築、ビッグデータの分析支援を行っております。
お問い合わせはこちらまで

関連記事

  1. Tableau

    Tableau:LOD徹底解説 – 概要編

    こんにちは、エクスチュアの渡部です。今回からLOD計算について、複…

  2. Tableau

    Tableau Viz紹介 : 10.4新機能を使ってダッシュボードを作ってみた

    ----10/10(火)追記本ブログで紹介しているVizが…

  3. Google BigQuery

    Tableau : BigQueryでLOD計算が使えない場合の対処法

    こんにちは、エクスチュアの渡部です。Tableau×BigQu…

  4. Tableau

    Tableau:Presto APIを使ったTreasure Dataへのデータ接続

    こんにちは。エクスチュアの加納です。今回は、WindowsでTab…

  5. Tableau

    Tableau : IF文の「集計」「非集計」の混在を解決

    こんにちは、エクスチュア渡部です。これから定期的にTableauやGo…

最近の記事

  1. Adobe Target: at.jsの「チラつき」を手っ取…
  2. Tableau:LOD徹底解説 – FIXED編…
  3. BigQuery: Adobe Datafeed: even…
  4. Adobe Analytics: SegmentsAPIを使…
  5. Google Compute Engine のLinuxVM…
  1. Adobe Analytics

    Adobe Analytics:ワークスペース:セグメント比較機能の紹介
  2. Adobe Analytics

    Adobe Analytics: BigQueryにロードしたデータフィードをD…
  3. Google BigQuery

    Tableau : BigQueryでLOD計算が使えない場合の対処法
  4. Google BigQuery

    GCP: 今月のGCP課金額をslackに自動的に書き込む
  5. Adobe Analytics

    Adobe Analytics: Legacy s_code.jsからAppMe…
PAGE TOP