エクスチュア渡部です。今回はLODブログの第3弾です。
INCLUDEと、INCLUDEとFIXEDとの違いについて説明します。
これまでも説明した通り、LODの基本は「データソースでは実現できない粒度での集計を実現すること」です。
この説明がピンとこない場合、下記記事を読んでください。
では、INCLUDEはどのようにして任意の粒度での集計を実現するのでしょうか?
実はINCLUDEはある大きな1点を除いてFIXEDと基本的に考え方が一緒です。その違いは最後に説明するので、
それまではあえて前回のFIXED説明ブログと同じ表現で記載します。
・INCLUDEが任意の粒度で集計する仕組み
実は、「通常の集計関数を使った集計」と「INCLUDE関数を使った集計」では集計に使うデータソースが違います。
通常の集計関数は当然、データソースをそのまま用います。それに対してINCLUDEを使った集計は
「データソースを基に作成した中間テーブル」を使って集計を行うのです。(これはTableauがDB側に発行するSQLを読み解くと理解できます)。
例えば、サンプルスーパーストアの例を使って、「都道府県別顧客一人当たりの平均購買日数」を出してみましょう。
サンプルスーパーストアは1行1行のデータが、「1オーダー×製品別?」という粒度なのでこの集計には以下のようなステップが必要です。
① :顧客名ごとの購買日数(COUNTD([オーダー日])で集計した中間テーブルを作る
② :①の平均を都道府県別に出す
この①をINCLUDEで実現します。下記画像のようなイメージです。
今回の場合、まず中間テーブルを作るにあたり下記のように書くだけです。
{INCLUDE [顧客名] : COUNTD(オーダー日)}
今回出したいのはこの結果の平均なので、これをAVG関数で囲みます。
AVG({INCLUDE [顧客名] : COUNTD([オーダー日])})
これで出した結果を配置すれば、都道府県ごとの「都道府県別顧客一人当たりの平均購買日数」を出すことが可能です。
・活用例
「INCLUDE式を書くことは中間テーブルを作ること」なので、FIXED式の書き方次第で、「中間テーブル」の構成も変わっていきます。いくつか例を並べます。
(1)中間テーブルの粒度:顧客ごとの売上
→{INCLUDE [顧客名] : SUM([売上])}
顧客ごとの売上平均 :AVG({INCLUDE [顧客名] : SUM([売上])})
顧客ごとの売上最大値:MAX({INCLUDE [顧客名] : SUM([売上])})
顧客ごとの売上最小値:MIN({INCLUDE [顧客名] : SUM([売上])})
(2) 中間テーブルの粒度:顧客ごとの購買日数
→{INCLUDE [顧客名] : COUNTD([オーダー日])}
顧客ごとの購買日数平均 :AVG({INCLUDE [顧客名] : COUNTD([オーダー日])})
顧客ごとの購買日数最大値:MAX({INCLUDE [顧客名] : COUNTD([オーダー日])})
顧客ごとの購買日数最小値:MIN({INCLUDE [顧客名] : COUNTD([オーダー日])})
(3) 中間テーブルの粒度:顧客ごとの初回購買日
→{INCLUDE [顧客名] : MIN([オーダー日])}
顧客ごとの初回購買日最大値:MAX({INCLUDE [顧客名] : COUNTD([オーダー日])})
顧客ごとの初回購買日最小値:MIN({INCLUDE [顧客名] : COUNTD([オーダー日])})
(4) 中間テーブルの粒度:各サブカテゴリの1日当たりの売上
→{INCLUDE [オーダー日],[サブカテゴリ] : SUM([売上])}
各サブカテゴリの1日当たりの売上平均 :AVG({INCLUDE [オーダー日],[サブカテゴリ] : SUM([売上])})
各サブカテゴリの1日当たりの売上最大値:MAX({INCLUDE [オーダー日],[サブカテゴリ] : SUM([売上])})
各サブカテゴリの1日当たりの売上最小値:MIN({INCLUDE [オーダー日],[サブカテゴリ] : SUM([売上])})
書き方1つで自由な粒度での中間テーブルを作成できますね。それを集計関数によって囲むことで様々な集計を可能にしています。
そうしてINCLUDE式は任意の粒度での集計を可能にするわけです。
・FIXED関数との違い
では、INCLUDEとFIXED式の決定的な違いを説明します。
それは、「ビュー内に既に存在するディメンションを考慮するかしないか」です。
例えば、下記の2つの結果を見比べてみましょう。
左側の式:AVG({INCLUDE [カテゴリ]: SUM([売上])})
右側の式:AVG({FIXED [カテゴリ]: SUM([売上])})
カテゴリごとの合計売上の平均というよく分からない例ですがご容赦ください。
2つの結果が明らかに違いますね。その理由は、「LOD式内で宣言している以外のディメンションを考慮するかしないか」です。
INCLUDEは既にビュー内に配置されているディメンション(都道府県や地域・年のフィルター)を考慮した上で、カテゴリごとの合計平均を出しているのに対して、
FIXEDはそれらを無視してます。
そのため、この2つには以下のような違いがあります。
左側のグラフ:AVG({INCLUDE [カテゴリ]: SUM([売上])})
→2018年の関西地方における都道府県別の「カテゴリごとの合計売上の平均」
右側のグラフ:AVG({FIXED [カテゴリ]: SUM([売上])})
→ただの「カテゴリごとの合計売上の平均」※フィルターはかかっていない
FIXEDはビュー内に配置されているディメンションでも、FIXED式内で宣言されていなければ基本的に無視します。
そのため、FIXED式で今回のフィルターを考慮した集計にしたい場合は、以下のように書く必要があります。
AVG ({FIXED [年(オーダー日)],[地域],[都道府県],[カテゴリ]: SUM([売上])})
実際に入れてみました。数字がINCLUDEと一致しますね。
つまり、既に配置されているビューを考慮して欲しいならINCLUDEを使い、
あえて考慮して欲しくないディメンションがあるならFIXEDを使用すれば良いのです。
そのため、今回のような用途ではINCLUDEを使うのをお勧めします。
(シンプルですしディメンションの宣言し忘れによる集計ミスも防げるためです)
以上がINCLUDEの説明になります。
次回はEXCLUDEについて説明します!
————-
エクスチュアは国内では希少なTableau Certified Professionalも在籍するTableauのパートナー企業です。
また、Google Cloud Platform、Adobe Marketing Cloudといったマーケティングテクノロジーに精通したスタッフが、
デジタルマーケティングからビッグデータ分析まで統合的にサポートします。
お問い合わせはこちらからどうぞ
ブログへの記事リクエストはこちらまで