
Performance Best Practice(Ord7)
先日、ord7の勉強会に参加してきました。復習して改めて知識が定着できていないことが分かったので、今のうちに記録に残しておきたいと思います。
なぜパフォーマンスが大事か
タスクに対する分析フロー中にパフォーマンス劣化により処理が長時間化した場合、以下のような悪影響が発生してしまいます。
・答えを得るのに時間がかかる
・フローに乗れない
・イライラする
・本当のタスクを忘れる
Tableauの処理フローなどを理解し、パフォーマンス劣化に原因を切り分けて特定し、対処できる必要があります。
前提知識①:処理フロー
処理フローは下記の通りです。Tableau Desktopの場合、DBもTableauも処理を実行しているPCということになります。Tableau Serverの場合、DBはサーバ側、TableauはPC側で処理することになります。

前提知識②:フィルター/計算等処理順
フィルターの処理順は下記の通りです。これらを覚えておくことで、パフォーマンス劣化の原因を突き止め、フィルターを使用し、件数を削減して対応することもできます。(抽出フィルター、データソースフィルター)

1.抽出フィルター



2.データソースフィルター



3.コンテキストフィルター


4.LOD表現(FIXED)


5.ディメンションフィルター

6.LOD表現(INCLUDE/EXCLUDE)



7.メジャーフィルター

パフォーマンスのベストプラクティス
1.Tableau Server vs Tableau Desktop
サーバは同時タスク/同時アクセスを処理しているため、Tableau Desktopで表示が遅くてもTableau Serverで高速に表示できるわけではないです。
2.データ量 vs パフォーマンス
近年、ハードウェアの性能が向上する一方で、データ量も増加傾向です。ハードウェアなどの性能には上限があるので、データ量を適切な量にして処理する必要があります。
レコード数を削減する(抽出/データソースフィルターを利用)
ディメンション項目におけるNULLを避ける
DB側で集計済みデータを準備する
3.結合 vs ブレンディング vs クロスデータベース結合


4.ライブ接続 vs 抽出接続
データエンジンとは、データの読み込み、変換、最適化、クエリの実行を担当する部分です。データの抽出を行う際にはデータエンジンが使われます。最適化されていないデータベースではデーエンジンが早いので抽出の方が早くなりますが、きちんと最適化されたデータベースの場合データエンジンが比較的遅いのでライブ接続の方が早いです。
5.計算フィールド vs ネイティブ機能
ネイティブ機能は計算フィールドよりも速いので、ネイティブ機能をなるべく使いましょう。
■データ型の速さ
整数型>ブール型>文字列型
なるべく文字列を使わない方がよいです。例えば、パラメータには整数を、ロジック計算にはブール値を利用するのが望ましいです。
■日付関数
日付になっていない型を日付に変換する場合、計算フィールドではなく、できるだけネイティブ機能を利用するのが望ましいです。

■日付フィルター
日付フィルターには以下の三種類があります。この中では、相対日付フィルターが最も処理スピードが速くなります。
不連続フィルター
連続フィルター
相対日付フィルター
6.クイックフィルター vs アクションフィルター
クイックフィルターにて、項目表示する際にもクエリの処理を行っています。したがって、クイックフィルターの項目数が多い場合はパフォーマンスに影響が出る場合があります。そのような場合は、カスタムリストなどの利用が望ましいです。
ただ、Tableauの利点を活かすのであれば、クイックフィルターはなるべく少なくし、アクションフィルターを活用することを考えながらダッシュボードを作成する必要があります。