DATA Saber Ord7 で考えたこと
パフォーマンスの考え方
パフォーマンスを上げるメリット
迅速に答えを見つけることができる
分析のFlowに乗れる
似たようなワークブックを量産せずに済む
パフォーマンスを決める要素
やりたいこと=誰が何のためにどのように使うのか
知識=どういう操作が遅くなるか知る
データ量=RAWデータ量・集計データ・絞ったデータ
処理能力(←金を使えば解決できる部分が大きい)=ハードウェア・DB製品・チューニング
誰が何を処理しているのか?
データベース側が行っている処理なのか、Tableau側が行っている処理なのか?
ベストプラクティス
データが遅ければTableauで早くなることはない
Desktopで遅ければServerで早くなることはない
入れすぎ厳禁
パフォーマンス記録を見られる
ヘルプ>設定とパフォーマンス>パフォーマンスの記録を開始
データソースについて
フィルターを使用して件数を削減する
ディメンションフィルターだと減ってない/抽出フィルター・データソースフィルターを使わないと減らせない
リレーショナル・データベース
インデックスとパーティショニング(←なにそれ)は有効
パーティショニングの参考⇒よく使うデータのキャッシュを残しておくということみたい
インデックスの場合、結合キー・フィルターで使用される列に適用すると有効
なるべくnullを避ける
DB側でテーブルを準備する
(38分40秒くらいからのリレーショナルデータベースの話はよく分からんかった……)
参照整合性の仮定
これもよく分からんかった……これが見た感じ易しめの記事だった
抽出vsライブ接続
抽出のパフォーマンスに影響する要因
行数
列数
データ濃度(カーディナリティ、ディメンションにいる項目数・メンバーの数)
ディメンションvsメジャー
集計された抽出
シートに適用しているディメンションのみで集計⇒フィルターすることで、抽出を高速化できる
全部ダッシュボードを作り終わったあとで「使用していないフィールドをすべて非表示」にすると、早くできる
計算フィールドについて
行レベル計算(IF文など)・集計計算(SUM、AVEなど)⇒データベース側で計算処理
表計算⇒Tableauが計算処理
計算フィールドよりもTableauの計算負荷が高い
そもそも計算フィールドを使わず、ネイティブ機能を使った方が早い
ディメンションメンバーのグルーピング⇒「グループ」機能を使う
ディメンションメンバーの名前変更⇒「別名」機能を使う
メジャー値のカテゴリ化⇒「ビン」機能を使う
ただし、均等な区分に限る
パフォーマンスがよいデータ型:文字<ブール<整数(⇒文字は遅い)
ロジック計算にはブーリアンを使用する
よい例:[DATE]=TODAY()ののち、真/偽を別名で編集する
悪い例:IF [DATE]=TODAY() THEN "TODAY" ELSE "NOT TODAY" END
文字の検索の速さ:FIND<CONTAINS<ワイルドカード照合
日付計算も文字型への変換は非効率
ELSEIF/ElSE IFの使い分け(スペースが入っているかどうか)
スペースが入っているELSE IFだとIF文を新たに付け加えていることになり、その分重くなる
フィルターについて
ディメンションフィルター
不連続フィルターは遅い
すべてのディメンションを取得しに行っている
範囲フィルターは早い
データの濃度が高い場合、範囲フィルターの方が早い
保持・除外フィルターは遅くなりがち(複雑なWHERE句が使われている)
インデックス・パーティションが有効
日付フィルター
不連続は遅い/連続日付は早い⇒相対日付(今日から何年前~みたいなもの)はさらに早い
「今日」「〇年前」の判定はデータにアクセスしなくてもOK⇒「今日」「〇年前」が確定した段階で初めてデータベースにクエリを投げるので、相対日付は早い
クイックフィルター
項目が表示されたクイックフィルターは遅い
複数の値(ドロップダウン)・単一値(ドロップダウン)・数値フィルター・範囲日付フィルター
項目がデータに依存しないクイックフィルターは早い
複数の値(カスタムリスト)・ワイルドカード照合・相対日付フィルター・期間を参照フィルター
2種のクイックフィルター(データベース内のすべての値/関連値のみ)⇒関連値のみ(=ほかのフィルターの結果に応じて表示する値を絞る)のほうが遅い
パフォーマンス/ビジュアル・ナビゲーションはトレードオフの関係
そもそもクイックフィルターの代わりに…
ダッシュボード上ではクイックフィルターの代わりにGuided Analysis(フィルターアクション・セットアクションなど)を活用する
パラメータを活用
フィルターが動く順番(クエリパイプライン)
①抽出フィルター>②データソースフィルター>③コンテキストフィルター>④FIXED>⑤セットフィルター>⑥ディメンションフィルター>⑦EXCLUDE/INCLUDE>⑧メジャーフィルター>⑨表計算フィルター
①②まではデータの件数が減る
ダッシュボードデザイン
不要な「詳細」は外す(詳細=色・ラベルなどには出ないが情報としては保持している、ツールヒントとしては持っている)
行・列の総量が少ないマーク表示は、表形式のものより早く表示できる
クロス集計を表示したい場合はGuided Analysisを使う(見たい項目をクリックしたときに、それに絞ったクロス集計が出てくる)
不要な地理的役割は設定しない
シートやクイックフィルターを少なくする
1シートにつき少なくとも1クエリ/1クイックフィルターにつき少なくとも1クエリが走っているため
タブを非表示にする
タブが表示されているビューはすべてプロセスが走ってしまうため
タブを減らすとパフォーマンスが上がる
':tabs=no'←このパラメータが有効
フィルターアクションの"すべての値を除外"
すべてのデータを取得する重たいクエリを避ける
フィルターをクリアしたときに何も選択されていない状態になる(何かを選択したときだけそれに応じて図を描画する状態になる)
ダッシュボードのサイズは固定する
自動にするとウィンドウサイズごとに毎回描画する必要がある
"自動"はキャッシュヒット率が低い
この記事が気に入ったらサポートをしてみませんか?