テクノロジー
Tableau ダッシュボードが遅いなと感じたら・・・
![](https://engineerblog.mynavi.jp/uploads/samneil_teableau.jpg)
はじめに
データ活用戦略課(現デジタルテクノロジー戦略本部)のT.Sです。
Tableauでダッシュボードがなかなか表示されないなどのことがあったりしませんか?
そんな時は、まず以下のポイントをチェックして、ダッシュボードの見直しを行って見てください。
目安としては、読み込みに2分以上かかる場合は一度見直しましょう。
また、添付のExcelはセルフチェックリストとしてご使用ください。
大前提
大前提の情報を先に書いておきます。
Tableau Desktopでダッシュボードがなかなか開かない場合は、Tableau Serverでも開きません!!
なので、Tableau Desktopで読み込み時間が遅いと感じるダッシュボードをTableau Serverにパブリッシュするのは控えましょう。
Tableau Serverでも読み込みに時間がかかり、なかなか開かないというのが落ちです。
まずはここから(一般的に見直すポイント)
Tableauワークブックはシンプルイズザベストを目指しましょう!
無駄なものはできるだけカットしましょう!
1. 分析に使っていないデータソースはないですか?
1つのダッシュボードに沢山のデータソースを接続すると、パフォーマンスは落ちます。
画像のDBマークをクリックすると、このダッシュボードで使用しているデータソースが何かを確認できます。
この数が少なければ少ない方がパフォーマンスは向上します。
なので、使用していないデータソースがないか今一度確認してみてください。
使用していないデータソースがある場合は削除しましょう!
2. データはリアルタイムである必要はありますか?
Tableauのデータは「ライブ」データと「抽出」データがあります。
「ライブ」データは接続先のデータソースに毎回アクセスをして、データを表示させています。リアルタイムの数字が反映される点は素晴らしい機能ですが、都度接続先にアクセスしに行くため、開くのに時間がかかります。
一方、「抽出」データはデータの鮮度はライブに比べて落ちるのですが、Tableau専用のファイル形式であるため、Tableauが一番パフォーマンスを発揮できるように設計されてます。
リアルタイムの必要はなく、「1週間に1回しかデータが更新されない」などのものに関しては、抽出のデータソースを使用することをお勧めします。
3. 1枚のダッシュボードにたくさんグラフを載せてませんか?
ダッシュボードは、色んな情報を一度に確認できるものですので、皆さんお使いになられているかと思います。
ですが、1つのダッシュボードに沢山グラフを載せすぎると、グラフを表示させるのに時間がかかります。また、パフォーマンスだけでなく、グラフそのものも小さくなってしまい、せっかくきれいに可視化したものが見づらくなってしまいます。
そのため、ダッシュボードを設計する際に、最初はマクロの視点のグラフを載せたダッシュボード、それから徐々に詳細な視点のグラフを載せるという対応を取るといいと思います。
4. 不要なデータ項目ありませんか?
読み込むデータの項目が多いと、その分読み込み時間がかかります。
分析に必要ない項目であると感じたら、項目を削除、または非表示にしましょう。
例えば、画像の「月」という項目が不要であれば・・・
「▼」をクリックして、非表示を選択。
「月」をダッシュボードで見えないようにしましょう。
すると、パフォーマンスは上がります。
データを見直す
5. データをTableau Desktopで加工してませんか?
皆さんが一番やりがちなのは、Tableau Desktop内でデータを結合したり、縦につなげたり、データをブレンドしたりなどを行ってしまうことです。
Tableau Desktop内の機能として、このような操作が出来てしまうのですが、そこは我慢しましょう。
6. 「参照整合性を仮定する」を使ってみましょう
5で結合などの加工はTableau Desktopではやらないと言ったのですが、
どうしてもという場合は、「参照整合性を仮定する」を使ってみましょう。
「データ」タブの下から4番目のところにあります。
これを使用することで、結合でクエリのパフォーマンスを向上させられる可能性があります。
詳しくはこちらを参照下さい。
ただ、やはりTableauDesktopで結合はせず、DataRobot Data Prep(Paxata)やTableau prepなどのデータプレパレーションツール、もしくはデータベースなどでデータを作成してから、Tableau Desktopに接続をしましょう。
7. ODBCドライバーを使っていませんか?
データソースを追加する時、どのドライバーを使っていますか?
ドライバーが用意されていないものに接続をする場合は致し方ないかもしれないのですが、それ専用のドライバーがある場合はそちらを使用しましょう。
8. 不要なレコードは取り込んでいませんか?
例えば、今年度の実績や傾向を調べるためのダッシュボードに、2年前、3年前のデータを読み込ませていませんでしょうか?
前年同月と比較をしたいのであれば、1年前のデータが存在すれば問題ないはずです。
取り込むレコード数はなるべく減らしましょう。
データタブの「データソースフィルターの編集」から設定することが可能です。
9. 抽出を作成する前に、使用していない項目を非表示
2でライブより抽出が適しているとお話をしました。抽出のデータソースを作る際にも、使用していない項目を非表示や削除して、抽出データソースを作成しましょう。
抽出の作成も、項目数やデータレコード数によって、作成の時間やサーバにかかる負荷が変わります。いらないものは削除するようにしましょう。
10. カスタム SQL クエリを使っていませんか?
データソース作成する際に、Tableau Desktop上でSQL(データソースからデータを抽出するためのプログラミングコードのこと)を書くことができます。そのことを「カスタムSQLクエリ」と呼びます。TableauからDBに対して通常の接続を行うと、Tableauは独自で最適化されたクエリを生成して実行しますが、カスタムSQLクエリは記載されたSQL通りに実行されます。そのため、最適なクエリではなくなるため遅くなります。
SQLを書くと他のユーザーも解読が難しいというデメリットもありますため、カスタムSQLクエリを使うのは避けましょう。
11. どうしてもカスタム SQL クエリが必要な場合は「*」や副問い合わせの使用はやめましょう。
SQL文を自分で書く場合、SELECT * FROM ~を使用すると全項目データの取得をすることができます。ただし、全項目分析に使用するか今一度考えてください。不要な項目が混ざっていることがほとんどでありますため、「*」を使用せず項目名を明示的に指定してあげましょう。
また、Tableau DesktopでGUI画面でデータ作成している途中、そのデータをカスタムSQLクエリに切り替えた場合、既に作成されている途中のデータのSQLがデフォルトで準備されます。
例えば、下記画像のように、テーブルを結合したデータソースがあったとします。
こちらを「カスタム SQLに変換」をクリックします。
すると、SQLが自動で生成されます。
このままSQLを使用してしまうと、パフォーマンスが落ちてしまうことがあります。
理由は、分析に不要な項目が残ってしまうため、また、SQLを自動生成する際に副問い合わせが使われている可能性があるためです。
特に途中までユニオンを含んだデータソースを作成している方は、この副問い合わせが含まれたSQLが生成されてしまいますため、その場合は副問い合わせはせずにSQLを書き直してください。(不用意な副問い合わせはパフォーマンスが落ちます。)
画像:ユニオンしたデータソース
画像:上記データソースをカスタムSQLクエリに修正したもの
赤枠のように、FROMの後ろにカッコがあり、そのカッコ内にSELECT文が記載されていましたら、SQLを見直ししてください。
ダッシュボードを見直す
12. Tableauのtwbファイルのサイズが大きくないですか?
3でも話しましたが、ダッシュボードの数やダッシュボードに使用しているビューの数が多いと、ダッシュボードは重くなります。分割できるものは分割しましょう。
13. いらない項目まで、ビューで表示させてませんか?
必要な項目だけをビューで表示させましょう。
いらない項目をビュー内に残しておくと、塵積ではありますが徐々にダッシュボードを開くのに時間がかかっていきます。
14. フィルタをたくさん作っていませんか?
ダッシュボード作成でフィルタをよく作るかと思います。ですがフィルタをたくさん作成することで、そのフィルタの情報を適用するのに時間がかかってしまい、結果ワークブックの挙動が遅くなってしまいます。フィルタは必要なものだけワークブックに表示させましょう。
15. 固定サイズのダッシュボードを使いましょう!
あまり気にされていない部分であるとは思いますが、ダッシュボードのサイズは「固定サイズ」を使用しましょう!
Tableau Desktopで個人使用する分にはサイズをあまり気にする必要はないのですが、
Tableau Serverにパブリッシュをして他のユーザーにダッシュボードを共有する場合は気にする必要があります。
この部分を自動にすると、閲覧者によって画面サイズが異なりますため、Tableau Serverに使用環境ごとのキャッシュが溜まっていってしまいます。
特にサイズにこだわりがなければ、なるべくサイズは固定サイズを使用しましょう。
16. 集計表タイプのレポートを作っていませんか?
Excelやスプレッドシートのような、行数が大量にある表タイプのレポートはTableauは得意としない分野です。
せっかくTableauが使えるのに、集計表を作るのはもったいない気もします。なるべく集計表は使用せず、幅広い表現技法を試してみてください。
フィルタ処理を見直す
17. コンテキストフィルタを使いこなそう
通常のフィルタは他のフィルタに関係なく、データ ソース内のすべてのレコードにアクセスし、フィルタを適用します。一方、コンテキストフィルタは他のフィルタより先にデータをフィルタリングするため、他の通常のフィルタの処理が速くなる可能性があります。このコンテキストフィルタを設定することで、他のフィルタはコンテキストフィルタで残ったデータにのみフィルタを適用するため、レコードの絞り込みが早くなります!
詳しくはこちらを参照ください。
ただし、過度な使用はかえって逆効果で、ダッシュボードの許容を遅くさせてしまします。使用する際は1,2個程度にしておきましょう。
18. 複数のワークシートにまたがってフィルタを使っていませんか?
複数のワークシートにまたがったフィルタを作成することがTableau上では可能です。ですが、これを実施すると複数のクエリ(データにアクセスするためのプログラム)が実行されますため、結果が返ってくるのが遅くなります。複数ワークシートにまたがってのフィルタの多用は要注意です。遅いと感じましたら見直してみましょう。
19. 「適用」ボタン表示させてますか?
フィルタで「適用ボタンを表示」オプションを有効にすると、「適用」ボタンがフィルタ上に表示されます。
この「適用」ボタンがクリックされるまではデータの読み込み、フィルタの処理は行われません。
一方で「適用」ボタンなしだと、1つフィルタの操作をするだけで、すぐにデータを読み込みに行きます。
その分、読み込みが遅くなったり、操作的にも一回フィルタ選択して、データを読み込み、もう一回フィルタ選択して、また読み込み・・・を繰り返さないといけません。
ダッシュボードやビューのフィルタには、適用ボタンを表示させるようにしましょう。
計算処理を見直す
20. Tableauでの計算はなるべく控えましょう
Tableauはデータを可視化するツールであります。計算機能は備わっているものの得意とはしていないです。
データの集計が多かったり、複雑な計算を行いたいときはTableauにデータソースとして取り込む前に処理できないか検討してください。
21. 計算でやらなくても可能なことを計算でやってませんか?
例えば、値をグルーピング(カテゴライズ)する際に、IF関数などを使ったりしていないでしょうか?
その作業は、Tableauの「グループ」を作成するという操作でも作成が可能です。
Tableauのグループの作成は簡単で、グループ化したい項目を右クリックで選択し、「作成」、「グループ」とクリックしていきます。
すると、項目の値が出てくるため、グループ化したい項目を選択します。
選択が終わりましたら、「グループ」をクリックしますと、グループ化されます。
グループの値に名前を付けてあげると、IF文と同じことができます。
全ての設定が完了したら「適用」をクリックしましょう。
このように、関数で計算をしなくても、クリック操作で同じことが出来る可能性がありますので、なるべく計算は使用せずにダッシュボードを作成してみてください。
22. COUNTD関数は計算速度が遅いです
COUNTD関数(ユニークなレコードの件数を数える関数)は接続するデータソースの全レコードにアクセスをして、重複レコードを削除して計算しています。
そのため、COUNTDはなるべく使用するのは避けた方が動きはよくなりますので、COUNTDを使用する必要がない場合はCOUNT関数を使用しましょう。
最後に
Tableauでダッシュボードを作成する方法はたくさんあります。
皆さん思い思いのダッシュボードを作成していただいても構いませんが、
Tableau Serverなどで共有をする際に、今の作成方法だとサーバに負荷がかかってしまう可能性があります。
今までダッシュボードのパフォーマンスを意識したことがなかった方は、
一度、パフォーマンスという観点を意識したワークブックを作成してみてください。
参考資料
●Tableau ワークブックのパフォーマンス チェックリスト (Tableau)
https://help.tableau.com/current/pro/desktop/ja-jp/perf_checklist.htm
●Tableauで作ったダッシュボードが遅い時にチェックする30のポイント #tableau (classmethod)
https://dev.classmethod.jp/articles/tableau-performance-checklist/#toc-17
●Tuning Tableau Server: Performance Best Practices (Tableau)
https://www.youtube.com/watch?v=YYNCudevr6o
●Best Practices for Dashboard Performance (Tableau)
https://www.youtube.com/watch?v=6KGjjcCGxa0
●SQL 副問合せのサンプル(サブクエリ) (ITSakura)
https://itsakura.com/sql_subquery
※本記事は2022年09月時点の内容です。