見出し画像

メジャーフィルターの複数シート適用に潜む罠[DATA Saber挑戦 #Week12]

DATA Saber BridgeプロジェクトにApprenticeとして参加しています。
週一note更新目指します。

はじめに

Tableauのフィルターは1種類ではなく、データソースフィルターやディメンションフィルターなど何種類も存在します。
その中でもメジャーフィルターは「データを集計した上で絞り込む」ため、ディメンションフィルターとは違った挙動をする部分があります。

そもそもメジャーフィルターとは

その名の通り、メジャーに対してかけることができるフィルターです。

例:カテゴリごとの売り上げ合計金額で表示するカテゴリを絞り込みたい

「分析>表のレイアウト>空の行を表示」にチェックを入れているため、カテゴリ名の表記が残っている。

ディメンションによるフィルターがされた後にメジャーフィルターの計算処理は行われます。
フィルターなどの計算処理の順番については、クエリパイプラインと呼ばれいます。クエリパイプラインについては他の方もいろいろと解説記事も出されているため、この記事での詳しい説明は省きます。

Tableauの操作の順序 - Tableau より引用。
親の顔より見た図表である。

メジャーフィルターを複数シートに適用させる場合は要注意

ワークシートごとに設定できるフィルター機能ですが、他のシートにも適用範囲を広げることができます。ディメンションはもちろんメジャーも適用先ワークシートを設定できるのですが、特にメジャーフィルターの適用先ワークシートを拡大する場合は集計範囲に気を付ける必要があります。

フィルターシェルフから、フィルターを適用させる範囲を設定できる。

具体例

例を挙げて説明します。

例:カテゴリ別売上金額の合計を使って、ダッシュボード全体のデータをカテゴリ毎に絞り込みたい

ここでは、カテゴリ別売上金額の合計値をスライダー形式でフィルタリングしたいと思います。

【NG設定】カテゴリ・サブカテゴリ別売上のサンプルダッシュボード。
Tableau Public で公開中。
【NG設定】〈ワークシート1〉カテゴリ別売上割合
【NG設定】〈ワークシート2〉サブカテゴリ別売上

上記のような設定をすればよいかと思いますが、このままでは想定とは異なる挙動をしてしまいます。

以下のように、売上金額の最大値を変えても〈ワークシート1〉カテゴリ別売上割合のカテゴリのみ表示項目が変化し、逆に売上金額の最小値を変えると〈ワークシート2〉サブカテゴリ別売上の一部サブカテゴリのみ表示項目が変化しています。

〈ワークシート1〉と〈ワークシート2〉のフィルターが想定通りには連動していない。

なぜこのような処理となってしまっているのでしょうか?

Viz LODとメジャーフィルターの関係性

この事象から、メジャーフィルターとViz LODの関係性について説明します。
Viz LODとは、Tableauのワークシート内でデータが集計される単位(粒度)のことを指します。

(参考)Viz LODとは

通常、Tableau でこのような作業を行う場合は、関心のあるディメンション ([City (都市)]、[State (州)] など) をビューにドロップします。 ビューに追加するディメンションに応じて、データが適切に集計されます。この時に集計されるレベルが「Viz 詳細レベル」 (略して Viz LOD) です。

詳細レベル (LOD) 表現について - Tableau より引用

フィルターが他ワークシートに適用されない場合は特にViz LODを意識しなくてもグラフが作れますが、メジャーフィルターを他ワークシートにも適用させる場合は話が変わってきます。

例えば、スライダー形式の売上フィルターを¥1,279K~¥70,000Kに設定した場合、〈ワークシート1〉でも〈ワークシート2〉でも売上¥1,279K~¥70,000Kのデータに絞られているのですが、

  • 〈ワークシート1〉ではカテゴリ別売上の合計が¥1,279K~¥70,000Kのカテゴリ

  • 〈ワークシート2〉ではサブカテゴリ別売上の合計が¥1,279K~¥70,000Kのサブカテゴリ

のデータにフィルターされています。

2枚のワークシートはViz LODが異なる。

その結果、

  • 〈ワークシート1〉ではカテゴリ別売上の合計が¥70,000Kを超えていたカテゴリ「家電」「家具」が除外

  • 〈ワークシート2〉ではサブカテゴリ別売上の合計が¥70,000Kを超えていたサブカテゴリが無かったため、除外対象のデータなし

という処理がなされた訳です。

同じメジャーでも、Viz LODが異なるワークシートだと除外対象のレコードも異なる。

Viz LODが異なるシートでも同じ集計値でフィルターするには

上記の例の場合、どのようにすれば想定通りの実装ができるでしょうか?

答えはLOD式の利用です。

LOD式とは、集計するデータの粒度を自在にコントロールできる関数(FIXED関数、INCLUDE関数、EXCLUDE関数)を利用した計算式のことを指します。

今回はEXCLUDE関数を使って「カテゴリ別売上」の計算フィールドを作成し、作成した計算フィールドをフィルターに設定します。

作成した計算フィールド。
作成した計算フィールドをフィルターシェルフに入れた。

EXCLUDE関数を使ったメジャーフィルターを作成することで、2つのワークシートに掛かるメジャーフィルターのLOD(集計計算の粒度)を揃えることができます。

EXCLUDE関数を使用した計算フィールドによって、フィルターのLODを揃えることができた。

その結果、

  • 〈ワークシート1〉ではカテゴリ別売上の合計が¥70,000Kを超えていたカテゴリ「家電」「家具」が除外

  • 〈ワークシート2〉でもカテゴリ別売上の合計が¥70,000Kを超えていたカテゴリ「家電」「家具」が除外

という処理が行われるようになります。

想定通り、〈ワークシート1〉と〈ワークシート2〉のフィルター対象がリンクするようになった。
こちらも、Tableau Public で公開中。

(余談)なぜFIXED関数を使わないのか

上記の解決策ではLOD関数の中でもEXCLUDE関数を使用しました。
LOD計算ではFIXED関数をよく使うと思いますが、FIXED関数とINCLUDE関数/EXCLUDE関数はクエリパイプライン(計算の順序)が異なります

サンプルダッシュボードのように「地域」でもフィルターをする場合には、FIXED関数の計算フィールド使用とEXCLUDE関数の計算フィールド使用とでフィルター結果が変わります。

Tableauの操作の順序 - Tableau より引用した画像を一部加工。
EXCLUDE関数を使った計算は、ディメンションフィルターとメジャーフィルターの間で処理される。

EXCLUDE関数を使った場合は『地域でデータを絞ってからカテゴリ別売上の計算』という順序ですが、FIXED関数を使う場合は『カテゴリ別で売上を計算してから地域でデータと絞る』という順序になります。

FIXED関数を使った計算フィールドを使用するのであれば、「地域」をコンテキストに追加することで、計算の順序を入れ替えることができます。

Tableauの操作の順序 - Tableau より引用した画像を一部加工。
コンテキストフィルターはFIXED関数の計算よりも早い段階で処理される。

おわりに

複数ワークシートにまたがったメジャーフィルターの挙動から、Viz LODについても解説しました。

Viz LODを意識していないと意外なところに落とし穴があるため、今後はよりViz LODを意識してTableauを使っていきたいですね。

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