DATA Saber Ord7 で考えたこと

  • 効果的なダッシュボードを作成するための 10 のベストプラクティス

    • 誰が・どのように見るか

      • 見る人の知識レベル・見るのにかけられる時間

      • 何のデバイスを使って見る?(パソコン?スマホ?)

    • 読み込みを早くする

      • データベース上で計算を行う(シート単体ではなく)⇒オーバーヘッド(参考)を減らせる

    • ダッシュボード上の位置

      • 左上から最初に見る=左上がスイートスポット

    • ビューの数・色数を少なくする

    • フィルターの連動・インタラクティブ性(ハイライト・セット・パラメーター)を高める

    • 書式設定にこだわる

    • ツールヒントの活用

    • いらないラベルの除去

    • 実際に使ってもらってテスト

  • パフォーマンスの考え方

    • パフォーマンスを上げるメリット

      • 迅速に答えを見つけることができる

      • 分析の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'←このパラメータが有効

    • フィルターアクションの"すべての値を除外"

      • すべてのデータを取得する重たいクエリを避ける

      • フィルターをクリアしたときに何も選択されていない状態になる(何かを選択したときだけそれに応じて図を描画する状態になる)

    • ダッシュボードのサイズは固定する

      • 自動にするとウィンドウサイズごとに毎回描画する必要がある

      • "自動"はキャッシュヒット率が低い

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