【Tableau】PerformanceのBest Practice①～基本要素を知る～

Tableauはセルフ分析に優れており、データアナリストでなくてもビジュアライズを実現する事が可能です。
そのため色んな役職の人が触る可能性があることで、気付かぬうちにTableauServerや接続先DBにとんでもない負荷をかけていた、なんてこともケースとして少なくないと思います。
例え一時的にリソースを増やして解消されても、creator(VIZの作成者)がパフォーマンスの仕組みを理解していないと、リソースを増やした先でまた同じ問題に衝突します。

パフォーマンスの知識の足並みを揃える事で、皆が使いやすい環境が築けるはずなので
今一度**「自分や周囲の人が作っているダッシュボードはPerformanceのBest Practiceを理解して作成できているか」**
という点を考えていきましょう。

今回の投稿ではパフォーマンスの**基本要素**としてまず知っておいて欲しい情報をまとめます。
そして次回は、以下二本の投稿を予定しています。
・**[【Tableau】PerformanceのBest Practice②～データソース～](https://qiita.com/t_misaki1029/items/e29e8c5e2b38c577d95a#form　"【Tableau】PerformanceのBest Practice②～データソース～")**
・【Tableau】PerformanceのBest Practice③～計算フィールド～
（※それ以外にも続くかもしれません。）

またTableauのバージョンが古いものを利用している場合、オプションが対応されていない場合があります。
ご了承ください。（投稿者は2020.2を利用していますので、それ以降のバージョンであれば問題ないと思います）

#なぜパフォーマンスが大事なのか

ダッシュボードのパフォーマンスが悪い場合どんな影響があるか、考えてみましょう。
<font color="LightSlateGray"><details><summary>パフォーマンスが悪い具体例はこちらOPEN</summary>ex )データ抽出が終わらない、フィルターやアクション機能を切替ても結果が中々かえってこない　など…</details</font>

■悪い影響として
**・決断を下したいのに素早く答えを知る事、見つける事ができない
・待ち時間が発生するのでそこで作業や思考が一時中断されてしまい分析のFlowに乗れない
・似たようなダッシュボードを量産してしまう（遅いと自分で作ったり、既存のダッシュボードにフィルターを追加したり…結果Serverに負荷をかけていた、なんてことも）**

生産性をあげることの出来ないダッシュボードはそのうち活用されなくなります。

「工数たくさんかかったのに、結局viewerに使われていない・・・」なんてこともあるあるだと思います。
こんなあるあるは無くしていきたいですよね。
その為にもパフォーマンスに関する知識を押さえ、活用していく必要があります。

#基本のベストプラクティス3つ
3つのベストプラクティスを前提とします。
一見、当たり前のことが並んでいるように見えるかもしれませんが、これらは重要です。

**　1. データが遅ければ、Tableauで早くなることはない
　2. Desktopで遅ければ、Serverで早くなることはない
　3. 入れすぎや詰め込みは厳禁(シンプルに)**

2のDesktopで遅ければ、Serverで早くなることはない、という点に関して疑問に思う方が多いかもしれません。
私自身もServerの方がスペックが高いから早いんじゃないの？と思っていました。
Serverは色んな処理を同時にこなしています。スケジュールごとに抽出を実施したり、サブスクリプションをとばしたり。
それらの事からServerの負荷は保証できないものになります。
決してServer頼りにならない事をお勧めします。

#パフォーマンスを決める要素とは

大きく以下の4つに分かれます。
![パフォーマンスを決める要素.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/3d9a75e2-afd4-4530-06be-504e52c4d59e.png)


■やりたい事
　・誰が、何のために、どのように使うのか
　（どれくらいのデータ量が適切とか、どんな機能が必要かなど考えることができる材料である）

■知識
　・Tableauはどういう操作が遅くなるのか、何が得意(早い)なのか

■データ量
　・全RAWデータ
　・集計データ
　・絞ったデータ

■処理能力
　・ハードウェア
　・DB製品
　・チューニング

**処理能力・データ量**はお金で解決できる可能性があります。
しかし手前の二つ、**やりたい事・知識**は一人一人が力を養っていく事で解消されることがあります。（＝お金をかけなくても改善できる）
私がこれから何回かに分けて投稿するパフォーマンスについての投稿は、**やりたい事・知識**について説明になります。

#どこでどんな処理がされているのか
パフォーマンスを考えるうえで、**どの処理がtableau側で、どの処理がDB側なのか**という理解が重要になってきます。
以下の図を参考に流れを理解しましょう。

![処理の流れ.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1537142/c5e6909a-fcb0-7fe0-f47e-55b59ae02afc.png)

この女の子が皆さんだと思ってください。ここではcreatorと呼びます。
creatorが、TableauのUI上でドラッグ & ドロップを行います。
その操作をTableauが受け取って、データベースが分かるSQLに変換しパスします。
計算された結果がデータベースからTableauにやってきて、ビジュアライゼーションとして表出される流れになります。

上記はざっくりと処理の全体像になっており、もっと細かく分解することも出来るのでそれは別の機会に投稿したいと思います！

#改善点を見つけるには
実際に負荷をかけている処理をどうやって見つけていくのか？という内容になります。
それにはTableauDesktopの**パフォーマンス記録**を活用しましょう。
名前の通りダッシュボード上での処理(パフォーマンス)を記録できます。
具体的には以下の情報を得ることができます。

**　・何が起こっているのか？
　・何に時間がかかっているのか？**

手順としては以下の通りです。
①TableauDesktopで対象のダッシュボードを開く
「ヘルプ」→「設定とパフォーマンス(Ｐ)」→「パフォーマンスの記録を開始(Ｓ)」の順に選択

②ダッシュボード上で操作を実施する
（フィルターを切替したり、アクション機能を実行したり）
操作が完了したら「ヘルプ」 → 「設定とパフォーマンス(Ｐ)」 → 「パフォーマンスの記録を停止(Ｓ)」の順に選択

③Tableau側で処理が行われるので待つ
処理が完了すると自動でパフォーマンスの記録結果が表示される

④色ごとのイベント種別は、以下リンクのTableau公式サイトで確認可能
https://help.tableau.com/current/pro/desktop/ja-jp/perf_record_create_desktop.htm
対象のイベントを押下すると、どんなクエリが走っているか確認可能

⑤「ファイル」を選択で保存も出来るため、ダッシュボードの仕様を変更前後で比較することが可能

簡単なので是非使ってみてください。

#おわりに
今回の投稿ではパフォーマンスについて前向きに考えるきっかけになれば幸いです。
次は**[【Tableau】PerformanceのBest Practice②～データソース～](https://qiita.com/t_misaki1029/items/e29e8c5e2b38c577d95a#form　"【Tableau】PerformanceのBest Practice②～データソース～")**に続きます。