Tableau フィルターとは？

## このブログで分かること

Tableauのフィルターではどのように処理が行われているか、これらを使えるようになるところを目指していただこうと思います。

## はじめに

他の記事で書きましたが、Tableauを使っていると「LOD（Level of Detail）計算」を使う場面が出てきます。いきなりLODを理解しようとしてもよくわからなくなってしまう場合があります（私がそうでした）。

そこで本記事では、フィルターについてどのような処理が行われているかを追いかけることを主目的として、他の記事でLOD計算を合わせて学習していただくことを全体の目的としたいと思います。

ディメンションフィルター・メジャーフィルターについては「[**Tableauによる最強・最速のデータ可視化テクニック: データ加工からダッシュボード作成まで**](https://www.amazon.co.jp/Tableau%E3%81%AB%E3%82%88%E3%82%8B%E6%9C%80%E5%BC%B7%E3%83%BB%E6%9C%80%E9%80%9F%E3%81%AE%E3%83%87%E3%83%BC%E3%82%BF%E5%8F%AF%E8%A6%96%E5%8C%96%E3%83%86%E3%82%AF%E3%83%8B%E3%83%83%E3%82%AF-%EF%BD%9E%E3%83%87%E3%83%BC%E3%82%BF%E5%8A%A0%E5%B7%A5%E3%81%8B%E3%82%89%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5%E3%83%9C%E3%83%BC%E3%83%89%E4%BD%9C%E6%88%90%E3%81%BE%E3%81%A7%EF%BD%9E-%E6%9D%BE%E5%B3%B6-%E4%B8%83%E8%A1%A3/dp/4798159743/ref=m_crc_dp_lf_d_t1_d_sccl_3_6/358-5761291-6740806?pd_rd_w=lFjGw&content-id=amzn1.sym.f70a26a1-fc60-40fc-9896-743b13d07a8a&pf_rd_p=f70a26a1-fc60-40fc-9896-743b13d07a8a&pf_rd_r=NMACWC12MF5MHMKNKWZP&pd_rd_wg=qbG1k&pd_rd_r=892c92e6-045c-4e1f-be62-5ed5f037b229&pd_rd_i=4798159743&psc=1)」という著書を参考に勉強しました。

---

# フィルター計算処理について　概要

フィルター処理は以下の順で行われます。

![image (18).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/284b0c47-70c2-439e-aed5-08ee67031d14.png)

### 抽出フィルター：

私の環境ではなぜか表示されなかったのでTableau公式の画像を拝借しますが（Addの方にハイライトされててややこしいですが…）Connectionのある方に着目してください。

接続方式をライブか抽出の2つが選択できます。この2つを切り替えることで、以下のように処理が変わります。

ライブ（Live）：元データが変更されたら、読み込み中のデータも更新する。

抽出（Extract）：Tableau上で更新ボタンを押さないと、読み込み中のデータは更新されない。

![image (19).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/49d5c2be-d4e3-46c9-870f-6eb8c5a87e7c.png)

### データソースフィルター：

データソースフィルターとは、データ読み込み時にフィルターをかけることで、実際のViz作成時にかかる計算量を削減する目的で使用されます。

サンプルスーパーストアで見てみます。データは10000行でこのようになっています。

今回は出荷モードの「ファーストクラス、セカンドクラス」となっているデータを除去した上で分析に臨みたいという状況だとします。

![image (20).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/b034d5a4-d45e-4944-9d3c-5e6fba6fcf20.png)


まずデータソースフィルターを追加します。

追加直後は以下のような画面になるので、追加ボタンを続けて押します。

![image (21).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/dd4e54a5-ceab-4ec5-83b4-a871bf6316e2.png)


フィルターの追加で出荷モードを選びます。

![image (22).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/e316caaa-bd92-47bc-8ca6-149aa60ed578.png)


ファーストクラス、セカンドクラスを省きたいので、チェックを外します。

![image (23).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/e84790e3-4061-47de-830a-3f54aa72433d.png)


データが10000件あったものが6588件になり、出荷モードの2行目以降にあったファーストクラスなどが無くなっていることがわかります。

![image (24).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/dfca6a86-a43b-4549-ac3e-2918b60b7756.png)


### コンテキストフィルター：

FIXED関数を用いると、指定した列ではフィルターがかからなくなります。

ただ、このFIXEDよりも先にフィルターをかけることができるのがコンテクストフィルターです。

使い方は簡単で、フィルターをかけた後に「コンテクストへ変換」をクリックするだけです。これでフィルターがグレーになり、フィルターが以下のフィルターよりも早い段階でかかるようになりました。

![image (25).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/69314286-09b4-498b-ac72-7dd63523d600.png)

![image (26).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/cb57a1ea-abdd-46b8-bd5d-e4290fcbcb2b.png)


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

ディメンションフィルターには厳密に言うと2通りあります。以下の散布図で説明します。

### 1. データを選択してフィルターをかける方法

以下のような散布図があるとします。

![image (27).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/e5c94127-ff63-445c-82a5-83cb35f5f6d1.png)


散布図上でドラックし、複数個の点を選択します。今回は数量が100以下のものを(なるべく上手く狙って)選択します。

ここで「保持」を選択します。

![image (28).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/5962ad85-77ab-4dc1-a8bb-ef5531368d36.png)


保持を押した直後で、数量が100よりも大きなものは見えなくなりました。

![image (29).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/ab9ab719-87dd-4965-887e-3351c890838a.png)

### 2. フィルターシェルフを使う方法

次にもう1つの方を紹介します。フィルターシェルフを使用するものです。普段は多くの方がこちらを使用されてると思います。

フィルターシェルフにカテゴリを入れてみます。

次に表示されたウィンドウで事務用品のみチェックを外してみます。

![image (30).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/4e9263e4-bdfb-430d-8712-bfeab552c749.png)


家電と家具のみになり、事務用品が見えなくなりました。

![image (31).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/051e943c-0017-42be-ac0f-378d75d70354.png)


### メジャーフィルター：

メジャーフィルターは、簡単に言うとメジャーデータ(数値データ)をフィルターにかけるものです。

先程の散布図と同じデータで試してみます。

「数量」をフィルターシェルフに入れて、合計を選びます。

![image (32).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/f854ad95-9605-4d82-92ec-e2f65fbea5b0.png)

メジャーフィルターではこのように表示されて、どこからどこまでを抽出するかをシークバーで選べるようになります。前回と同じ結果を目指したいので、数量の合計が100以下になるようにしてみます。

![image (33).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/3b2300c6-7f6b-4e0e-8e8f-361fe4a2356c.png)

無事にフィルターできました。こちらの方が先程の散布図の場合と違って、間違った選択などしなくて済みそうです。

![image (34).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/9acacb9b-d895-4271-b544-9771071fb7b3.png)


### Tableau Calcフィルター：

計算フィールドの中でIF文などを用いることで、抽出するフィルターになります。

上記と同じく、散布図の例で試してみたいと思います。

以下のように計算フィールドを書いてみます。数量の合計が100以下ならそのまま合計、そうでなければNullにする(表示されない)というものです。

![image (35).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/73eec438-ff8d-4d85-96a2-8dbee532dc0a.png)


実行した結果を右に、実行してない結果を左に表示してみました。横軸が100より大きな部分が表示されるorされないといった違いが見て取れるかと思います。

![image (36).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2884129/2c4eaa9c-9f69-4128-9182-ad1d0b2ee190.png)


## 3. おわりに

これまで紹介させていただいたように、フィルターの種類と順序は上記のように決まっています。

個人的な感想にはなってしまいますが、フィルターは順序の方が重要だと考えています。理由としては順序が変わるとフィルターされて出てくる結果も全然違いますし、予定していたフィルターのかかるorかからないが変わってくるので重要視すべきだと思います。

以上です。ご意見や感想などございましたらお願いします。

万が一間違ってる場合はご教示いただけますと幸いです。

ありがとうございました！