見出し画像

Tableauでフィルターを一括適用してクエリを効率化する方法

Tableauのダッシュボードを利用する際、複数のフィルターを設定し終えるまでビューの更新を待つことに煩わしさを感じたことはありませんか?Tableauのフィルターボタンは、1つずつのフィールドを適用するたびにビューが更新されます。

この問題に対処するために、Tableauのフィルターを一括適用できる設定があります。この設定を活用することで、ビューの更新を待つ手間が省け、効率的な作業が可能となります。本記事では、フィルターの一括適用ボタンだけでなく、以下の機能についても紹介します。

  1. フィルターの一括適用ボタン

  2. 一括適用ボタンの有無によるパフォーマンス比較

  3. フィルターの一括リセットボタン

  4. データがない場合のテキスト表示

Tableau フィルターの前提

本題に入る前に、Tableauのフィルターとビューの更新の仕組みを整理します。簡単なビューを用意しました。Tableauのフィルターをもつビューがあります。Category に Furniture のみを指定するときは、Office Supplies、Technology の 2つを外す必要があります。Office Supplies、Technology を外す度に、クエリが実行されてビューの更新が行われます。

Tableau のフィルターには適用ボタンがあります。適用ボタンを使ったときは、適用ボタンを押すまでビューの更新は行われないため、先ほどの例と比較すると、クエリの実行は 1回に減らすことができます。

ダッシュボードを使用するときに、フィルターする列フィールドが多くある場合はどうでしょうか。

以下のダッシュボードでは、3 つの列のフィルターがあります。前述した各フィルターの適用ボタンを使ったとしても、3 つのフィルターを設定してビューの更新を行いたい場合は少なからず、3回のビューの更新を待たなければなりません。

Order Date の年のフィルターを設定して 1 回、Ship Mode のフィルターを設定して 1 回、Segment のフィルターを設定して 1 回、計 3 回といった具合です。懸念すべき点は、フィルターによるビューの更新の待ち時間だけでなく、ダッシュボード上のワークシートのビュー更新のために度々実行されるクエリ実行回数です。

フィルターの設定によるクエリ実行数は下記となります。

フィルターの数 × ダッシュボード上のワークシート数

上記のダッシュボードでは、3 つのフィルターを設定してからビューの結果を表示したい場合、シート1 〜 3 までの 3つのシートがあるため、3 × 3 のクエリが実行されます。フィルターの値が異なれば、クエリは同一ではないため、キャッシュを用いることはできません。

データソースが Tableau の Hyperファイルであれば、クエリの実行回数はお金の観点では問題にはならないと思います。Google BigQuery や Snowflake など、クエリ課金のクラウドDWHにライブ接続している場合はどうでしょうか。フィルタの数、ダッシュボードのビューの数に応じて、DWHには異なるクエリが実行され課金されることになります。フィルターを設定し終わった後にビューを表示させたい場合、そこに至るまでの無駄なクエリーは避けたいところです。フィルタの一括適用ボタンで、クエリとビューに反映されるのが効率化できるなら、時間もコストも節約できます。

Youtube で学ぶ

Youtube で設定方法の手順を 10 分の動画にまとめました。

1. フィルターの一括適用ボタンの作り方

サンプルダッシュボードは以下の通りです。

フィルターの一括適用ボタンはワークシートで作られています。ここでは、Order Date の年、Ship Mode、Segmentの3つのフィルターの一括適用ボタンを作成します。

1. 新しいワークシートを作成します。

2. 新規に計算フィールドを作成します。

Global Filter Button
'Apply'

'' の中に一括適用ボタンのテキストを入力します。ここでは、'Apply' ですが、'フィルターの適用' など何でも大丈夫です。

3. 行にフィルターに使うフィールドを配置します。

列にはフィルターの一括適用ボタンに含めたい 列フィールドを加えます。
マークは多角形を選択します。
表の書式設定を行い、枠線の書式設定から列の境界線、行の境界線をなしにします。
すべての列のヘッダーの表示をなしにします。

4. (任意)一括適用ボタンの書式設定を行い、網掛けを行う

一括適用ボタンの背景を変更することができます。

5. 一括適用ボタンとなるワークシートをダッシュボードに追加する

ダッシュボードに戻り、作成したワークシートを追加します。

6. ダッシュボードからフィルターを一度すべて削除する

シート1、シート2、シート3 のダッシュボードのフィルターはすべて削除してください。

7. 一括適用ボタンのワークシート(Apply)からフィルターを追加する

シート4 の一括適用ボタンのワークシートから、フィルター列を追加します。

8. ダッシュボードのフィルターアクションを設定する

シート4 (一括適用ボタンのワークシート)をソートシート、ターゲットシートはすべてのシートにチェックします。下段のフィルターは選択したフィールドとし、フィルターにはSegment、Ship Mode、年(Order Date)を入力します。

9 Apply をクリック

ダッシュボードに戻りフィルターをいくつかチェックしてから、Apply をクリックしたときにフィルターがビューに一括で反映されるかを確認します。

2. 一括適用ボタンの有無によるパフォーマンス比較

Tableau のパフォーマンスレコーディングを使い、一括適用ボタンがあるとき、ないときでパフォーマンスを比較しました。比較する上で、同じビューを再現するために、3 つのフィルターの値はどちらも同一としています。

結論から言うと、一括適用ボタンがあることで、クエリのコンパイルや実行、ビューのレンダリングのイベント数が 91 → 27 と圧倒的に少なくなります。紫のバーの合計時間ではDWHにクエリされる時間コストも 1/4 ほどに大きく低減されています。

今回は軽量なデータを使っているため、イベントの合計実行時間は大きく異なりませんが、データ量によって今回の 0.2 秒の差が大きな影響を生むはずです。

2-1. 一括適用ボタンがない場合

2-2. 一括適用ボタンがある場合

3. フィルターの一括リセットボタンの作り方

次に、フィルターの一括リセットボタンの作り方を紹介します。

Order Date の年は 2019、2020、Segmentは Consumer、Corporateのチェックが外れています。

すべてのフィルターの値が選択された状態に戻すために、チェックが外れた値をいちいちチェックを加えていくのは煩わしいです。フィルターの一括りセットボタンはそのようなシーンで役立ちます。

1. 新しいワークシートを作成します

新しいワークシートを作成したら、行にてダブルクリックを行い、アドホック計算を行います。テキストの 'Reset' を入力します。

2. ダッシュボードにリセットボタンのワークシートを加える

1 で作成したシート 5のリセットボタンのワークシートをダッシュボードに加えます。

3. ダッシュボードアクションを設定する

シート5(Reset)はソートシート、ターゲットシートはすべてのシートを選択します。
フィルターには、選択したフィールドでリセットしたいフィルター列を加えます。

複数のワークシートの見つからないフィールドのエラーが出ればOKです。
エラーの意味は、シート5(Reset)には年(Order Date)や Segment などが含まれていないため、ソートシートに選択したフィールドが存在しないことを指します。

フィルターできないということは、すべてフィルターを戻すということが可能になります。

4. Reset をクリック

Reset をクリックすると、先ほどまでチェックが外れていた値にチェックが入ります。

4. データがないときのテキスト表示

フィルターでデータを絞り込んだ場合、表示するデータのレコードがゼロになることがあります。すると、Apply ボタンのワークシートは真っ白になります。データがないため、正しい挙動をしていますが、ダッシュボードを使うユーザーにとっては混乱します。

 表示できるデータがないことを伝えるテキストがあると一目瞭然です。

1. ダッシュボードオブジェクトのテキストを追加

浮動を選択してからオブジェクトのテキストを追加します。

2. 項目の階層を最背面とする

レイアウトの項目の階層から、1 で作成したテキストを一括適用ボタン(Apply)のワークシートであるシート4よりも下に配置します。

3 テキスト表示を確認する

表示できるデータがある場合、Apply ボタンが表示します。

表記できるデータがない場合、データがありませんが表示します。

この記事では、フィルターの一括適用ボタンによるクエリの効率化を主題として、フィルターの一括リセットボタンや、データがない場合のテキスト表示も取り上げました。

参考

内容にリクエストやご質問ありましたら Rintaro Sugimura までご連絡ください。

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