見出し画像

DATA Saber Ord7

こちらの問題はかなり苦戦しました。。。。DATA Saber目指す中ではかなり重要な部分でした。基本メモ書きなのでつたない文で申し訳ないです。
(写真のアイスは濃厚さがほどほどでおいしかったです…!)

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

・やりたいこと:だれが何のためにどのように使うのか
・知識:どうしたらTableauが遅くなるのかなど
・データ量:全RAWデータ、集計データ、絞ったデータ
・処理能力:ハードウェア、DB製品、チューニング

パフォーマンスが悪くなっている原因を突き止めないといけない
PCなのかTableauなのかDBを保存しているところなのか。

・データが遅ければTableauではやくなることはない
・Destopで遅ければ、Serverではやくなることはない
・入れすぎ厳禁

パフォーマンス記録

レコード数
⇒抽出フィルター
⇒データソースフィルター

リレーショナルデータベース[ライブのとき]
・インデックス
⇒表の結合キーの列
⇒フィルターで使用される列
・パーティショニング
⇒ディメンション項目
・NULL
⇒ディメンション項目ではNullは避ける
⇒Nullをなくしてインデックス効果を向上
・DB側でテーブルを準備
⇒集計データを事前準備
⇒Tableauでの複雑な計算フィールドを回避するために、DB側に必要な値をテーブルに持たせておく

結合・ブレンディング

・結合
⇒同じデータベースであれば表の結合が望ましい
⇒インデックスを有効利用
⇒1本のクエリ
・ブレンド
⇒レコード数が多く、表の結合に適さない場合
⇒集計ビュー
・結合クロスデータ結合
⇒ファクトテーブルとマスタテーブルの結合
・ブレンディング
⇒多対多リレーション市ppなどでJOINした際に値が合わないデータを結合

参照整合性の仮定
⇒ビューで設定している項目が1つのテーブルだけを対象とするケース
⇒クエリパフォーマンスを向上
⇒データメニューから設定

抽出・ライブ接続
⇒データエンジンの性能は相対的

データの抽出
⇒行数
⇒列数(抽出ファイル作成時に影響)
⇒データ濃度(カーディナリティ。ディメンションメンバーの数)
⇒ディメンションvsメジャー

・行レベル計算と集計計算
⇒DB側で計算処理
⇒行レベル計算はスケーラビリティが高い

・行レベル計算と集計計算を分割
⇒行レベル計算を一つの計算フィールドに
⇒集計計算を二つ目の計算フィールドに
・表計算(%に対する割合など)
⇒クエリ結果を受け取りTableauが計算処理
⇒計算フィールドよりもTableau計算負荷が高い

計算フィールドvsネイティブ機能
⇒ネイティブ機能は計算フィールドよりも速いことが多い
 ディメンションメンバーのグルーピング(グループが有効)
 ディメンションメンバーの名前変更(別名の編集が有効)
 メジャー値のカテゴリ化(ビンが有効)

計算フィールド

⇒データ型はパフォーマンスへの影響が大きい
 整数はブールより速い
 整数・ブールは文字よりも速い
⇒ロジック計算にはブーリアンを使用する
 悪い例 IF [DATE]=TODAY() THEN "TODAY" ELSE "NOT TODAY" END
 良い例 [DATE]=TODAY() 出た値の真偽それぞれに名前を付けられる(行レベルのみ)
⇒文字の検索
 CONTAINS()はFIND()より速い
 ワイルドカード照合はCONTAINS()より速い

条件式で参照するパラメータ
VALUEの部分を数字名にしておくとのちのち扱いやすい
(できるだけ文字列を減らそうとしていく流れ!)

日付計算
文字列への変換は非効率
悪い例 DATE(LEFT(STR[YYYYMMDD],4+"-"+MID(STR[YYYYMMDD],4,2)+"-"+RIGHT(STR[YYYYMMDD],2))
良い例 DATDD('DAY',[YYYYMMDD]%100-1,DATEDD('MONTH',INT(([YYYYMMDD]%10000)/100)-1, DATEDD('YEAR',INT([YYYYMMDD]/10000)-1900,#1900-01-01#)))
またはDATEPARSE("yyyy年MM月dd日",[日付])

日付関数
 NOW() システムタイムスタンプ
 TODAY() システム日付

ロジック関数
IF文でできるだけ条件は一つに、シンプルに心がける

フィルター

ディメンションフィルター
不連続フィルターは遅い 
・TableauのDBにクエリ発行し、すべてディメンションを取得していく
範囲(連続)フィルターは速い
・大量の不連続の値を取り込むより早い
・データの濃度が高い場合(1列に入っている値の種類)、範囲フィルターのほうが早い
保持・除外フィルターは遅い
インデックスやパーティションが有効に作用する

日付フィルター
・不連続日付:ひとつひとつ取得しなければならないのでクエリ結果が遅い
・連続日付の範囲指定:範囲で取得するので結果が早い、相対日付はさらに早い

クイックフィルター
項目が表示されたクイックフィルターは遅い
⇒表示する必要のある項目はすべて取得しなければならない
複数の値(ドロップダウン)、単一値(ドロップダウン)、数値フィルター、範囲日付フィルター
項目がデータに依存しないクイックフィルターは速い
⇒フィルターのための項目を探す必要がない
複数の値(カスタムリスト)、ワイルドカード照合、相対日付フィルター、期間を参照フィルター

クイックフィルターの表示項目
2種のクイックフィルターの表示方法
データベース内のすべての値
 ほかのフィルターが変更されたとしても影響されない
関連値のみ
 ほかのフィルターが関連してくる
パフォーマンスVSビジュアル/ナビゲーショントレードオフの関係

ダッシュボード上のクイックフィルター
大量のクイックフィルターは遅い原因
 たくさんのディメンションリストを取得しなければならない
クイックフィルターの代わりにGuided Analyticsを活用する
 異なるディメンションレベルで複数のシートを作る
 フィルターアクションを使用する

クイックフィルターの代わりに…
フィルターアクションを活用する
 PROS
 ・フィルター項目表示用のクエリが不要
 ・データソース間をまたいでフィルターできる
  CONS
 ・単一項目のみしか選択できない
 ・パラメーター+計算フィールド=複雑になりがち

フィルターの順序を意識する
・抽出フィルター
・データソースフィルター
・コンテキストフィルター
・FIXED
・セットフィルター
・ディメンションフィルター
・EXCLUDE/INCLUDE
・メジャーフィルター
・表計算フィルター

ダッシュボードデザイン


ビュー
・本当に必要なものだけを取得・表示する 不要な詳細は外す
・チャートvsクロス集計
 行列の少ないマーク表示は表形式のものより速く表示
  テキストテーブルを描写するには大量のメモリが必要
 詳細なクロス集計を表示するにはGuided Anylysisを使うこと
・不要な地理的役割は付与しない
 生成された緯度経度を参照する時間を省く

ダッシュボード 
・シートやクイックフィルターを少なくする
 1シートに少なくとも1クエリ
 1クイックフィルターに少なくとも1クエリ
・タブを非表示にする
 ・タブの表示されているビューはすべてプロセスが走る
  タブを表示するためにワークブックの構造を把握するプロセスが走る
 ・タブを減らすとパフォーマンスが上がる
  次のパラメータを試してみる';tabs=no'
・フィルターアクションの"すべての値を除外"
 ・すべてのデータを取得する重たいクエリを避ける
・サイズを固定したダッシュボード
 ・異なるウィンドウサイズで毎回描写しなければならない
  ・ViZQL Serverはユーザーごとにレンダリングを行う
  ・"自動"はキャッシュヒット率が低い



いいなと思ったら応援しよう!