私たちは人事、営業、マーケティングなど様々なダッシュボードをTableauを使ってお客様と一緒に作成してきました。その中で私たちが共通して気を付けているのはダッシュボードを表示する際のパフォーマンスです。
※Tableauは米Tableau Software社(https://www.tableau.com/ja-jp )が提供するセルフBIツールです。
なぜパフォーマンスが重要なのか
まずはなぜTableauでダッシュボードを表示する際のパフォーマンスが重要かをお話しさせていただきます。
パフォーマンスが悪いと以下のことが想定されます。
- 目的とする回答を得るのに時間がかかる
- 仕事の流れが滞る
- ストレスがたまる
- 本来のタスクを忘れることがある
パフォーマンスの悪化はTableauだけでなく、Tableauを使用した一連の業務への影響も出てくる可能性があります。
パフォーマンスを優先してダッシュボードを作成するか、パフォーマンスを二の次に目的を追い求めるかどうかを見極めていく必要があります。
パフォーマンス悪化の原因
~このダッシュボードなんで表示が遅いんですか?~

ここからは実際にTableauのダッシュボードを見ていきましょう。図①はデータ量が約520万件、データベースはMicrosoft SQL Serverを使用しているサンプルのダッシュボードになります。
このダッシュボードは初期表示に1分~2分ほどかかるダッシュボードになります。散布図とテキスト表が1つずつのこちらのダッシュボードはなぜ初期表示にそれだけかかるのでしょうか?
パフォーマンス悪化は様々な要因から考えられます。
- 計算フィールドが複雑になっている
- 1つのダッシュボードに多くのシートが含まれている
- クイックフィルターが多い
- 表示しているデータの数が多い
などなど・・・。また、データベース側でインデックスの付与が適切に行われていないなどの可能性も考えることができます。
そのうえで今回のダッシュボードに目を移してみると、ダッシュボード上に表示されているクイックフィルターの数とクロス集計表で表示しているデータの数が気になります。
その中で今回はクイックフィルターに着目していきたいと思います。
クイックフィルターとは
クイックフィルターとは、Tableauの画面上に表示されているフィルターのことを指します。図②では画面上の黄色い枠で囲われたフィルターを指します。クイックフィルターと言われてもピンとこなかった方も、こちらの画像を見ると普段使用されているダッシュボードにもよく登場しているフィルターだということがお分かりになるかと思います。

クイックフィルターですが、ダッシュボードに表示する際の種類がいくつかあります。
- 単一値のリスト
- 単一値のドロップダウン
- 単一値のスライダー
- 複数値のリスト
- 複数値のドロップダウン
- 複数値のカスタムリスト
この6つから用途に合った表示方法を選択します。この中で複数値のカスタムリスト以外は選択可能な項目が全て表示され、その中から表示したい項目もしくは表示から外したい項目を選ぶ仕組みになっています。
なぜパフォーマンス悪化につながるのか
先述の通り複数値のカスタムリスト以外は選択可能な項目がすべて表示されます。
そのため、初期表示やデータ更新の際にTableau Desktop(もしくはTableau Server)からグラフや表などで表示している値を取得するクエリ以外にクイックフィルターを使用するために値を取得するクエリが発生してしまうのです。
実はこのフィルターの値を取得するクエリがパフォーマンスの悪化につながる可能性のあるクエリになっているのです。
以下の画面は図①サンプルダッシュボードを表示させるときに取得したパフォーマンスサマリからEvents Sorted by Timeのみを表示した画面になります。

Executing Queryという項目がTableauからデータベースに発行されているクエリです。そのうち、黄色い枠で囲われているのがクイックフィルターの値を取得するのに発行されているクエリになります。
全体で10個のクエリが発行され、そのうち8個のクエリがクイックフィルターの取得クエリであることがわかります。クエリの内容自体は以下のようなものがほとんど複雑なSQLではありません。
SELECT [order].[製品名] AS [製品名] FROM [dbo].[order] [order] GROUP BY [order].[製品名] ORDER BY 1 ASC
しかし、一つ一つは簡素なクエリだとしても複数のクエリが同時実行される場合や、もともとのデータベースの件数が多くなってしまっている場合などは全体のパフォーマンスの悪化につながる可能性があります。
次にクイックフィルターを全て削除した状態でパフォーマンスサマリを確認します。するとクエリの数が減り、残ったクエリについても半分ほどの時間で実行が完了していることがわかります。

このように今回の画面ではクイックフィルターの値取得のクエリが多く流れており、且つ時間もかかってしまっている。その結果、散布図とテキスト表の表示に必要な値取得のクエリも遅くなってしまっているということがわかります。
そのクイックフィルター本当に必要ですか?
クイックフィルターは分析を行うにあたって特定の項目を表示したり、非表示にしたりと非常に有効な機能の一つになります。また、画面に追加するのも非常に簡単に行うことができるので、ついついあれもこれもと画面上に増えてしまいがちです。
しかし、そんなときに本当にこのクイックフィルターは必要かな?と立ち止まって考えることがパフォーマンスを悪化させないようにする第1歩になります。この画面に本当に必要なクイックフィルターは何かをきちんと吟味し、表示する数をなるべく減らしてあげることが大事でしょう。
また、クイックフィルターの中では複数値のカスタムリストはユーザー自身が項目値を入力して検索を行うため、フィルターの値を取得するクエリが発生しないため、一つの回避手段になりえます。
ダッシュボードのパフォーマンス改善にはご自身の環境や業務により最適な解決策というのは異なります。それぞれの環境で一番良い解決策を見つけて、日々の業務をより効率的にしていきましょう!