Tableauのフィルターが多い場合のダッシュボードの改善
ダッシュボードが遅い要因の一つにフィルターが多すぎることがあります。パフォーマンスを改善するためには、フィルターの数を減らすことができればいいのですが、仕様上減らすことができない場合もあります。
そこで、今回は仕様を変えずにフィルターの数を減らす方法を書きたいと思います。
フィルターは大きく3種類に分けられます。
A. 画面に表示されないフィルター
B. 画面に表示されるフィルター(クイックフィルター)
C. アクションフィルター
それぞれのフィルターの改善方法を記載したいと思います。
A. 画面に表示されないフィルター
こちらは画面に表示されないので、まずはデータソースからそもそも削減できないかを検討します。データソースからなくなれば、フィルターを外すことができます。
データソース上必要な場合は、画面に表示されない複数のフィルターをデータソース上でまとめられないかを検討します。具体的には、DBの世界ではサロゲートキーと呼ばれるような考え方で、複数のカラムを1つにまとめてそのまとめた1つのカラムにフィルターをかける形です。
ダッシュボードのモックを作りながら仕様を決めていき、仕様を決めた後でデータソースを見直す際に「画面に表示されないフィルター」のカラムを1つにまとめられないかを検討するのがいいと思います。
さらに、まとめる際に新しく連番でIDを振りなおして、そのIDでフィルターをかけるとデータ型も小さくできるのでよりパフォーマンスを向上させることができます。手間もかかるので、パフォーマンスをシビアに向上させたい場合に検討する価値があります。
B. 画面に表示されるフィルター(クイックフィルター)
画面に表示されるフィルターはクイックフィルターと呼ばれますが、このクイックフィルターは減らすとダッシュボードの機能が減ってしまうので、直接的に減らすことができません。
探索的にデータを分析するためには多くのフィルターが必要で、パフォーマンスのためにフィルターを削減することは避けたいところです。
その場合に私がよく利用するアイデアは 「絞込ボタンを用意する」 方法です。
Tableauのフィルターは設定するたびに自動的に再計算されてチャートが表示されて便利ですが、複数の条件を指定したい場合は条件を指定するたびに不要な計算処理が発生してしまうので、ユーザビリティが悪化してしまいます。
そこで、各フィルターを設定した後に「絞込ボタン」をクリックすることで再計算されてチャートが新しく描画されるような作りにします。
作成の手順は以下のようになります。
- 検索用データソースを作成する。
- 検索用データソースでフィルターと「絞込ボタン」のみのチャートを作成する。
- 2のチャートをダッシュボードに配置して、アクションフィルターでボタンをクリックした際にチャート用のデータソースにフィルターをかける。
1. 検索用データソースを作成する。
まず、チャート用に利用しているデータソースからクイックフィルターとして利用しているカラムを抜き出して重複を排除します。これにより通常は元のチャート用データソースよりレコード数が減り、初期表示が速くなります。
また、各行ごとに連番となるIDと付与します。これは後ほどチャートを絞り込むする際のフィルターアクションのカラムとして利用します。
2. 検索用データソースでフィルターと「絞込ボタン」のみのチャートを作成する。
次に1で作成したデータソースで絞込ボタンのみのチャートを作成します。ボタンといってもチャート上でボタンに見えるように装飾するだけです。
ボタンを作成する場合は、チャートはマークを「多角形」にして作成することが多いです。さらに詳細のマークとして1で作成した連番となるIDのカラムを設定します。
3. 2のチャートをダッシュボードに配置して、アクションフィルターでボタンをクリックした際にチャート用のデータソースにフィルターをかける。
2で作成したチャートをダッシュボードに配置して、各種フィルターを設定した上でチャートのボタンに対してフィルターアクションを設定します。
チャート側のデータソースにも1で作成した連番となるIDを付与しておき、フィルターアクションで連番となるIDで絞り込むように設定します。
連番となるIDが複数のフィルター条件をユニーク化したものになるので、チャートにはアクションフィルター以外は不要になります。
これによりクイックフィルターの数を減らさず全体のパフォーマンスをアップさせることができます。
パフォーマンスの観点からは以下のようなメリットがあります。
- 初期表示時は検索用データソースのみをロードするのでデータ量が少なく、表示が速くなる。
- フィルターを選択時もデータ量が少ない検索用データソースなのでさくさく動く。
- 「絞込ボタン」をクリックした際はデータ量によって時間がかかる可能性あり。ただし、アクションフィルターの1つに減らせるので、高速化されることも多い。
絞込ボタンが加わることでユーザ側に1アクション増えることになりますが、一般的なシステムのUXに近い動きで違和感はないと思います。その上、各種操作の待ち時間が減るのでユーザビリティとしては向上すると思います。
C. アクションフィルター
アクションフィルターは通常のフィルターよりも個人的な感覚としては遅くなりますので、多用するのは避けるべきかと思います。
私が実際にパフォーマンスチューニングしたケースでは、同じデータソースを利用していくつか違うチャートを作成していた場合に以下の2パターンを比較したところ、2の場合の方が高速化されました。
- フィルターアクションで各シートに同じ条件のフィルターをかける(複数アクション)
- フィルターアクションで1シートに条件フィルターをかけ、そのフィルターの「適用先ワークシート」で他のシートにもフィルターを適用する(1アクション)
ポイントとしては、アクションフィルターはパフォーマンス上よくないので、複数ある場合は減らす方法がないかを検討すべきかと思います。
Tableauのフィルター機能は便利でどんどん追加していくとパフォーマンスが悪化していきます。ここで上げたデータソースの修正も視野に入れて、パフォーマンス改善する方法を検討いただければと思います。
Discussion
大変有益な記事のご共有ありがとうございます。
一年以上前の記事に対するご質問となり恐れ入りますが、以下のコメントについてお目通しいただけますと幸いです。
記事の中でB-1(クイックフィルタにおける検索用データソースの作成)に関してです。
検索用データソースは具体的にどのように作成されているかもう少し詳しくご教示いただけないでしょうか?
具体的に知りたい事項としては、以下の3点となります。
Tableau初心者であり、質問が的を射ていない場合はご指摘いただけますと助かります。
お手数をおかけしますが、どうぞよろしくお願いします。
お返事おそくなってすみません。
この記事は基本的にはデータソースを前処理して高速化するお話になります。なのでSQLなどを利用してデータソースを事前に構築するお話になります。
1は可能かもしれませんが、2はDBなどで別途作成することになります。
3はすみません記事は知りません。私がここに書いているものは独自のものが多く、他の記事をあまり参考にしていないです。
検索用データソースの作成方法の話は機会があれば記事に書きますね。
ご回答いただき誠にありがとうございます。
下記のスミ様とのやり取りを含め、大変参考になりました!
記事を拝見させていただきました。
『「絞込ボタンを用意する」 方法』を実装しようとしているのですが、分からない部分がありご教示いただけますと幸いです。
初期表示の時点で、絞り込みボタンが非活性(フィルタを行っていない)の時、
チャートに全データが表示され、ロード時間がかかってしまいます。
初期表示時に、チャート用データソースをロードしない実装は、どのように行っていらっしゃるのでしょうか。
お手数をおかけしますが、何卒宜しくお願い致します。
フィルターアクションの設定で「選択項目をクリアした結果」の設定を「すべての値を除外」に設定すれば実現されると思いますが、いかがでしょうか?
この設定はフィルターアクションで非活性の時の挙動を表します。
あとは初期表示時にフィルターアクションのフィルターの条件を空にしておくことも忘れずにしてください。
ご回答ありがとうございました。無事、実装することができました!