DATA Saber Ord7 復習

はじめに

2023/4/2時点でOrd7はクリアしているのですが、
最終試練に向けて復習事項をまとめてみました。「DATA Saber Boot Camp Week5 "Designing Dashboard for Performance」、また私が個人的に調べた事柄、あと個人的な見解から記述しています。

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

くるくる回っているアイコンを見るとイライラして集中できなくなってしまう。私の使っている社内Tableau Serverがそんな感じになりつつある….
人によっては、自分が作ったほうが早い!と思って似たようなワークブックが量産されてしまう→さらにサーバーが圧迫されて悪循環。

誰がなにを処理するか

  • DB側での処理

    • 結合

    • 集計

    • 計算

  • Tableau側での処理

    • マーク

    • 表計算

    • ソート

データを集計するパートがDB側、ビューをレンダリングするパートがTableau側で行われる。

VizQLとは

Tableauでドラッグアンドドロップなどをしてカテゴリや売上のマークを移動すると、Tableau側がそれをクエリに変換してDBに渡す、その結果がまたTableauに返ってきてみんなの前には棒グラフなどvizになって返ってくる

遅くなった時に考えること

遅くなった時、自分のPCが頑張っているのか、DBが頑張っているのかで対応が違ってくる。マーク数が多すぎて遅くなっているときにDB側でチューニングしても効果がない。

Desktop vs Server

サーバは同時に色んな仕事をしている。また、多人数から同時にアクセスを受け付けている。

遅いとき、フィルターをしてレコード数を減らしてもよい

  • 抽出フィルター

    • データを抽出して利用する際にフィルターしてレコード数を絞ることができる

  • データソースフィルター

    • データソースにフィルターを作成し、データソース内のデータ量を削減することができる。「データソース」タブの右上「追加」から設定が可能。

あらかじめデータを準備

個人的にこれは大変心苦しいのですが、私は社内Tableau Serverの制限からこれやってます。(シンドイ…)パフォーマンスを上げるためではなく、やらなきゃいけなくて。ただし事前にデータを集計しておくことは、パフォーマンス向上につながるそうです。私が社内Tableau Serverに挙げてるデータソースはめっちゃ軽いはずなのに、Tableau Desktopと比べるとめちゃくちゃ重い…

データ接続の方法

  • 結合

    • 同じデータベースにあり、トランザクションとマスタの結合

  • ブレンド

    • 違うデータベースにあり、異なる粒度同士、トランザクション同士の結合

  • クロスデータベース結合

    • 違うデータベースにあり、トランザクションとマスタの結合

抽出vsライブ接続

データエンジンとは、データの読み込み、変換、最適化、クエリの実行を担当する部分です。データの抽出を行う際にはデータエンジンが使われます。最適化されていないデータベースではデーエンジンが早いので抽出の方が早くなりますが、きちんと最適化されたデータベースの場合データエンジンが比較的遅いのでライブ接続の方が早いです。

抽出を高速化

  • 表示単位に集計

    • データを抽出する際のオプションで、「表示されているデータで集計」を選択できます。集計するとそれ以上ロールダウンできないのでパフォーマンスを上げられます。

  • 不要なディメンションメンバーをフィルター

    • 前述の「抽出フィルター」がこれにあたります。レコード数を減らせます。

  • 使用していないフィールドを非表示

    • vizを作るとき、「この項目要らないな」というのがあると思います。そういうフィールドをあらかじめ抽出で非表示にしておくことで高速化できます。


行レベル計算とは

if [カテゴリ] = [選択されたカテゴリ] then 売上 end

このように集計されていない計算式のこと

集計計算とは


sum([利益]/sum([売上])

このように集計された計算式のこと。
行レベル計算、集計計算ともにDB側で処理されている。
行レベル計算と集計計算まとまった式を作成するときには、行レベル計算を先に作成して集計計算で一つにまとめた方がいい。

計算フィールドvsネイティブ機能

ネイティブ機能は計算フィールドよりも速いので、ネイティブ機能をなるべく使いましょう。

データ型の速さ

整数型>ブール型>文字列型
なるべく文字列を使わないようにしましょう。
パラメータには整数を、ロジック計算にはブール値を使用しましょう。

日付関数

日付になっていない型を日付に変換したい場合、前述のとおり、計算フィールドよりネイティブ機能を使った方が早いです。しかし、私の社内Tableau Serverでは型変換ができず計算式を使わざるを得ません(涙)

日付フィルター

  • 不連続フィルター

    • 1個1個日付を取得してその都度判定する

  • 連続フィルター

    • 最初と最後の範囲だけ取得すればよい

  • 相対日付フィルター

    • 例えば「今日」から何日目など。「今日」も「何日目」もデータじゃないので計算が速い。

クイックフィルター

項目が表示されているフィルターは遅いです。そのためにデータを取ってこなければならないから。項目が表示されていないフィルターはデータに依存しないので速く取ってくることができる。

2種のクイックフィルター

「関連値のみ」オプションを使うことで、例えば「カテゴリ」で家具を選んだら家具の「サブカテゴリ」のフィルタだけ表示される。
ただ、この分クエリがまたクエリが走ることになる。
とても便利だが、遅くなるので、パフォーマンスとビジュアル/ナビゲーションはトレードオフの関係にある

クエリパイプライン

こちらを参照
Tableauの操作の順序

チャートvsクロス集計

マーク表示の方が行列が少ないが、テキストテーブルは行列が多い。その場合大量のメモリを消費する。

ダッシュボード

「自動」を使うと、ユーザごとに画面に合わせて毎回レンダリングすることになる。画面サイズを変えるたびにも毎回描画する。
人が見て心地いいものを追求していくとそれはパフォーマンスの良いダッシュボードになる。

おわりに

長くなってしまいましたが、私個人の見解も入れました。
Ord7はいったんクリアしましたが復習してみると「なぜそうなるのか?」に新たな気づきがありました。
これからも学び続けていきたいと思います。

Rieko







この記事が気に入ったらサポートをしてみませんか?