コンテキストフィルター(タブロー)

コンテキストフィルター(タブロー)

フィルターの順番

コンテキストフィルター

 コンテキストフィルターを使用したタブローVIZ作成を投稿しました。(年次経済財政報告(経済財政白書)第3回)
 このコンテキストフィルターというのが実によくできた機能なのですが案外とご存じでないない方が多みたいです。そこで今回は、便利な機能、コンテキストフィルターの仕組みと使い方を紹介します。

 あらかじめコンテキストフィルターのメリットを記載しておきます。
①簡単な手順で目的にしているデータを表示できる
②クエリ速度が向上して動作パフォーマンスが改善できる可能性がある

データサンプル
日付 会員番号 性別 年代 地域 POS番号 売上金額
2019/10/1 1 男性 30代 東京 1 80,000
2019/10/1 2 女性 30代 東京 2 50,000
2019/10/1 3 男性 40代 東京 1 40,000
2019/10/1 4 女性 40代 東京 2 30,000
2019/10/1 5 女性 30代 大阪 1 10,000
2019/10/2 6 男性 40代 東京 2 100,000
2019/10/2 7 男性 30代 大阪 1 90,000
2019/10/2 8 女性 40代 東京 2 70,000
2019/10/2 9 男性 40代 大阪 1 60,000
2019/10/2 10 女性 30代 大阪 2 20,000
2019/10/2 11 男性 40代 大阪 1 0

 タブローのフィルター機能を解説するために簡単なデータサンプルを作成しました。

接続しているデータ

Tableau 接続イメージ
 上記のデータは店舗のPOSシステムから売上日付を指定してダウンロードしたCSVデータファイルだとします。タブローでCSVデータファイルへ接続します。
 このときタブローで分析できるのは10月1日と10月2日のデータだけです。タブローで売上金額の前年対比を算出することはできません。POSシステムには過去25か月分のデータがあるにもかかわらずです。当然ですがタブローで分析できるデータは接続しているデータに限られます。この場合、POSシステムのデータまで遡ることは不可能です。

 多くの場合、タブローで接続しているデータはフィルター済みのものです。誰もが認識しています。しかし、データが日付だけでフィルターされているものと思っていると落とし穴があります。
 実は会員もフィルターされています。会員別売上高には非会員売上高が含まれません。買い物ポイントが付与される会員カードをレジで提示しなかった顧客の売上高は会員別売上高に含まれないからです。このことを認識していれば日別売上高合計と会員別売上高合計が一致しないとき、その差分が非会員売上高だろうと定義することができるようになります。

データソースフィルター

Tableau データ データソースへ接続しました。タブローの最優先フィルターはデータソースフィルターです。さっそくデータソースフィルターを実践します。

行フィルター

Tableau データソースフィルター データソース最終行の売上金額ゼロの行をフィルターで除外します。右上のフィルターをクリック→フィルター追加をクリック→ 売上金額を選択します。
Tableau フィルター 開く窓はメジャーフィルターと同じです。値の最小値をゼロより大きい数値にすれば完了です。戻すときは右上のフィルターをクリックしてフィルターを削除します。

 もとのCSVデータソースへ行を追加してもデータソースフィルターは適用され続けます。例えばCSVデータソースへ売上金額ゼロの行を10行、売上金額1以上の行を10行追加したとします。データソースの更新をクリックすると、売上金額ゼロの10行は除外されて売上金額1以上の10行だけが追加されます。

フィールドの非表示

Tableau フィールド非表示 分析対象にしない列があるときはフィールドを非表示にします。POS番号はディメンションかメジャーになるフィールドです。データソースフィルターが基本的に行をフィルターフィルターするのにたいしてフィールドの非表示は列をフィルターできます。
Tableau フィールド再表示 再表示するときは右上の「非表示フィールドを表示」をチェックします。そして薄いグレーで表示されるフィールドを右クリックして再表示します。または、ワークシートからも再表示できます。
 データソースフィルターとフィールド非表示はタブローのなかで最優先されるフィルターです。タブローは非表示フィールドとフィルターで除外された行へは接続しないと考えてもよさそうです。データソースフィルターで接続する行・列を減らせばクエリのパフォーマンス向上を期待することができます。

ディメンションフィルター

売上金額上位の会員

Tableau テキスト表 売上金額トップ3の会員を表示したいと考えています。行シェルフのいちばん左側へ会員番号をドロップします。その他のディメンションも確認したいので行シェルフへ入れておきます。
Tableau 並び替え 会員番号を売上金額降順で並び替えます。重要なのは並び替えるのが「会員番号」であって「売上金額」ではないという点です。エクセルなら「売上金額」の列を指定して降順に並び替えます。タブローは「会員番号」を右クリック、並び替えるフィールド、降順・昇順の別、集計方法を指定します。
Tableau 上位フィルター 売上金額トップ3の会員だけをフィルターで表示します。この場合もフィルターする列は「会員番号」(ディメンション)です。メジャーの「売上金額」ではありません。
 会員番号をフィルターのところへ入れて、「上位」のタブからフィールド指定、上位3、売上金額、合計に設定します。
 フィルターの結果、売上金額トップ3の会員はすべて男性でした。なるほど・・・では、会員のなかの女性だけのベスト3を見てみたい、となるとどうすればよいのでしょうか。

複数フィルターはAND

Tableau ディメンションフィルター 売上金額上位フィルターを削除して性別をフィルターします。女性を選択すると5会員が表示されます。
Tableau 複数フィルター もういちど売上金額上位フィルターを追加します。残念ながら何も表示されません。なぜでしょうか。
Tableau フィルター検索 まず女性だけを選択します。タブローはデータソースの性別列全行を検索して女性の行だけを表示します。このとき表へは女性の行だけが表示されます。次に売上金額上位フィルターを追加します。複数フィルターはANDです。女性であり、かつ、売上金額上位3会員を表示しようとします。ANDということは後から追加された売上金額上位フィルターは、女性の行だけではなく、売上金額列の全ての行を検索しなければなりません。表には女性の行しか表示されていなくても、内部ではデータソースすべての行を上から下まで検索して売上金額上位3会員にフィルターしているのです。結果として女性AND上位3会員の行がないため真っ白というわけです。

コンテキストフィルター

コンテキストに追加

Tableau コンテキストに追加 性別を右クリックしてコンテキストに追加を選択します。
Tableau コンテキストフィルター フィルターのマークがグレーへ変わります。フィルターを表示して女性を選択します。女性の売上金額上位3会員が表示されました。

検索範囲が違う

 コンテキストフィルターにしても複数フィルターの結果はAND表示です。コンテキストフィルターが何をしているのかというと、売上金額上位フィルターにたいして女性の行だけを検索するよう指示しているのです。一般のフィルターはデータソースの全行を検索するから全行のなかから上位3会員を選ぶ、コンテキストフィルターは女性の行だけを検索するから結果的に売上金額上位3会員は女性になる。

 検索されるデータソースの範囲が違うからフィルターの結果が違うということです。フィルターとしての機能というのかアルゴリズムというのかは同じなのだろうと思います。検索されるデータの範囲が狭いほどクエリのパフォーマンスはよくなります。
  コンテキストフィルターの優先順位はデータソースフィルターと一般のフィルターとの間に位置すると考えててもかまいません。
 複数のコンテキストフィルターを使用することも可能です。組み合わせを工夫することで目的にしているデータに近づくことができるかもしれません。