⚡ STEP 25: Tableauパフォーマンス最適化の基礎
ダッシュボードを高速化!サクサク動く分析環境を作ろう
📋 このステップで学ぶこと
- パフォーマンスの重要性と目標値
- 抽出(Extract)vs ライブ接続の使い分け
- データ抽出の最適化テクニック
- フィルター効率化の方法
- ビュー軽量化とマーク数削減
- パフォーマンス記録によるボトルネック特定
ゴール:3秒以内に読み込まれる快適なダッシュボードを作れるようになる
🎯 1. パフォーマンス最適化の重要性
なぜパフォーマンスが重要なのか
どんなに美しいダッシュボードでも、読み込みに時間がかかると使われなくなります。パフォーマンスはユーザー体験と信頼性に直結する重要な品質指標です。
| 読み込み時間 | ユーザーの反応 | ビジネスへの影響 |
|---|---|---|
| 1秒以内 | ストレスなし、快適 | 継続利用、意思決定が速い |
| 1〜3秒 | 許容範囲内 | 通常利用、問題なし |
| 3〜5秒 | やや遅いと感じる | 利用頻度が下がり始める |
| 5〜10秒 | 明らかに遅い、イライラ | 50%のユーザーが離脱 |
| 10秒以上 | 使いたくない | ほぼ使われなくなる |
| 操作 | 目標時間 | 備考 |
|---|---|---|
| ダッシュボード初期読み込み | 3秒以内 | 最も重要な指標 |
| フィルター適用 | 1秒以内 | インタラクティブ操作 |
| ビュー切り替え | 2秒以内 | タブ間の移動 |
| データ更新 | 5秒以内 | データ量による |
| ドリルダウン | 1秒以内 | 詳細表示 |
| 原則 | 内容 | 具体的な方法 |
|---|---|---|
| 1. データを減らす | 必要なデータだけを使う | 抽出、フィルター、不要列削除 |
| 2. 計算を減らす | 複雑な計算を避ける | LOD簡略化、事前集計 |
| 3. 描画を減らす | マーク数を最小限に | 集計、Top N、ビジュアル選択 |
💾 2. 抽出(Extract)vs ライブ接続
2つの接続方式の違い
Tableauでは、データソースへの接続方式として抽出(Extract)とライブ接続の2つがあります。それぞれの特徴を理解し、適切に使い分けることがパフォーマンス向上の第一歩です。
| 項目 | 抽出(Extract) | ライブ接続 |
|---|---|---|
| 仕組み | データをローカルにコピー(.hyperファイル) | データベースに直接クエリを送信 |
| 速度 | ◎ 非常に速い | △ データ量・ネットワーク次第 |
| データ鮮度 | △ 更新が必要 | ◎ 常に最新 |
| オフライン作業 | ◎ 可能 | × 不可 |
| サーバー負荷 | ◎ 軽い(初回のみ負荷) | × 重い(毎回クエリ) |
| ストレージ | △ ローカルに保存が必要 | ◎ 不要 |
| 更新頻度 | 手動または自動スケジュール | リアルタイム |
| 状況 | 理由 |
|---|---|
| 大量データ(100万行以上) | Tableauの高速エンジンで圧縮・最適化される |
| 複雑な結合・計算が多い | 事前に計算済みのデータを使える |
| リアルタイム性が不要 | 日次・週次更新で十分な場合 |
| モバイルでの利用 | 通信量を抑えて高速表示 |
| データベースサーバーの負荷軽減 | 本番DBへの影響を最小化 |
| 状況 | 理由 |
|---|---|
| リアルタイムデータが必須 | 在庫状況、株価など最新情報が必要 |
| データ量が少ない(10万行以下) | 抽出のメリットが小さい |
| 頻繁なデータ更新(分単位) | 抽出の更新が追いつかない |
| ストレージ容量が限られている | ローカルに保存できない |
| 手順 | 操作 | 補足 |
|---|---|---|
| 1 | データソースを右クリック | データペインまたはデータソースページで |
| 2 | 「抽出」を選択 | 抽出設定ダイアログが開く |
| 3 | 抽出オプションを設定 | フィルター追加、集計設定など |
| 4 | 「抽出」ボタンをクリック | 処理開始 |
| 5 | 保存先を選択 | .hyperファイルとして保存 |
| 6 | 完了を確認 | データソースアイコンが変化 |
🔧 3. データ抽出の最適化
抽出時にデータを絞り込む
抽出を作成する際に、必要なデータだけを取り込むことで、ファイルサイズを削減し、パフォーマンスを向上させることができます。
| フィルター種類 | 設定例 | 効果 |
|---|---|---|
| 日付フィルター | 過去3年分のみ | 古いデータを除外 |
| 地域フィルター | 東京・大阪のみ | 対象地域に限定 |
| ステータスフィルター | アクティブのみ | 無効データを除外 |
| カテゴリフィルター | 主要カテゴリのみ | 分析対象を限定 |
【抽出フィルターの設定手順】 1. 抽出設定ダイアログで「フィルターを追加」をクリック 2. フィルター条件を設定: 例1: 過去3年分のデータのみ ├─ フィールド: [注文日] ├─ 条件: 相対日付 └─ 設定: 過去 3 年 例2: 特定地域のみ ├─ フィールド: [地域] ├─ 条件: 値の選択 └─ 設定: 東京, 大阪, 名古屋 例3: 一定金額以上のみ ├─ フィールド: [売上] ├─ 条件: 範囲 └─ 設定: 10,000円以上 3. 複数のフィルターを組み合わせ可能(AND条件) 結果: 100万行 → 30万行に削減!
| 集計設定 | 効果 | 注意点 |
|---|---|---|
| 集計なし(デフォルト) | 詳細データをそのまま保持 | ファイルサイズ大 |
| 表示されるディメンションで集計 | 使用するディメンションのみ | 詳細分析は不可 |
| データ種類 | 集計前(行数) | 集計後(行数) | 削減率 |
|---|---|---|---|
| 取引データ→日別集計 | 1,000,000行 | 1,095行(3年分) | 99.9%削減 |
| アクセスログ→月別集計 | 10,000,000行 | 36行(3年分) | 99.99%削減 |
| 顧客データ→地域別集計 | 500,000行 | 47行(都道府県) | 99.99%削減 |
| 非表示にすべきフィールド | 理由 |
|---|---|
| 使用していない列 | 抽出ファイルサイズ削減 |
| 不要なIDフィールド | 分析に使わない識別子 |
| 長文の説明テキスト | 文字列はサイズが大きい |
| 重複データ | 同じ情報を持つ列 |
| 内部管理用フィールド | システム用の列 |
設定方法:データペインでフィールドを右クリック→「非表示」
🎛️ 4. フィルター効率化テクニック
フィルターの種類と実行順序
Tableauには複数のフィルター種類があり、それぞれ実行されるタイミングが異なります。適切なフィルターを選ぶことでパフォーマンスを大幅に改善できます。
| 順序 | フィルター種類 | 速度 | 説明 |
|---|---|---|---|
| 1 | 抽出フィルター | ◎ 最速 | データ抽出時に適用(事前に除外) |
| 2 | データソースフィルター | ◎ 速い | データ読み込み時に適用 |
| 3 | コンテキストフィルター | ○ 普通 | 他のフィルターより先に実行 |
| 4 | ディメンションフィルター | ○ 普通 | ビュー表示時に適用 |
| 5 | メジャーフィルター | △ 遅い | 集計後に適用(最後) |
| 項目 | 内容 |
|---|---|
| コンテキストフィルターとは | 他のフィルターより先に実行されるフィルター。データを事前に絞り込むことでパフォーマンス向上 |
| 設定方法 | フィルターを右クリック→「コンテキストに追加」→フィルターがグレー表示に変化 |
| 効果的な使い方 | 年、地域、カテゴリなど、データを大幅に絞り込むフィルターに設定 |
| 注意点 | すべてのフィルターをコンテキスト化すると逆効果になることも |
【シナリオ】特定の年のTop10商品を表示したい 【通常のフィルター(遅い)】 1. 全データ(100万行)からTop10を計算 2. その後、年でフィルター → 無駄な計算が多い 【コンテキストフィルター(速い)】 1. 年フィルターをコンテキストに追加 2. 先に年でフィルター(10万行に削減) 3. 残りのデータからTop10を計算 → 計算対象が少なく高速! 【設定手順】 1. [年] フィルターを右クリック 2. 「コンテキストに追加」を選択 3. [商品] でTop10フィルターを設定 → パフォーマンス大幅改善!
| 最適化のコツ | 理由 |
|---|---|
| 必須フィルターはデータソースフィルターに | 最も早い段階でデータを絞り込める |
| 大きく絞るフィルターはコンテキスト化 | 後続のフィルター処理が軽くなる |
| 不要なフィルターは削除 | フィルター自体に処理コストがかかる |
| 「すべての値」より「データベース内の値のみ」 | 表示する選択肢を減らす |
| 「複数値」より「単一値」フィルター | リスト描画が軽い |
| メジャーフィルターは最小限に | 集計後に実行されるため遅い |
📊 5. ビュー軽量化テクニック
マーク数がパフォーマンスに与える影響
マークとは、ビュー上に描画される各要素(棒グラフの棒1本、散布図の点1つなど)のことです。マーク数が多いほど、描画に時間がかかります。
| マーク数 | 体感速度 | 対応 |
|---|---|---|
| 〜1,000 | ◎ 快適 | 問題なし |
| 1,000〜10,000 | ○ まあまあ | 改善の余地あり |
| 10,000〜100,000 | △ 遅い | 要最適化 |
| 100,000以上 | × 非常に遅い | 設計見直しが必要 |
確認方法:画面左下に「1,234 マーク」のように表示される
| 方法 | 具体例 | 効果 |
|---|---|---|
| フィルターで絞り込む | 直近1年のみ表示 | 対象データを限定 |
| 集計レベルを上げる | 日別→月別に変更 | 30倍削減 |
| Top Nフィルター | 売上上位100のみ | 大幅削減 |
| 詳細シェルフを空に | 不要なディメンションを削除 | 集計される |
| 抽出時に集計 | 事前に集計済みデータ | 根本的に削減 |
| ビジュアルタイプ | パフォーマンス | 備考 |
|---|---|---|
| テキスト表 | ◎ | 最も軽い、シンプルな表示 |
| 棒グラフ | ◎ | 軽い、基本的なビジュアル |
| 折れ線グラフ | ○ | 普通、データポイント数に注意 |
| 散布図 | △ | マーク数次第、1点1マーク |
| シンボルマップ | △ | マーク数次第、位置計算あり |
| 塗り分け地図 | × | 重い、ポリゴン描画が複雑 |
| 遅くなるパターン | 改善方法 |
|---|---|
| 複数のLOD表現を重ねる | 1つに統合、または計算済み列を作成 |
| 大量データでのFIXED | データソース側で事前計算 |
| ネストしたLOD表現 | シンプルに書き直す、分割 |
| 不要なLOD表現 | 通常の計算で代用できないか検討 |
📈 6. パフォーマンス記録の使い方
ボトルネックを特定するツール
「なんとなく遅い」では対策が打てません。パフォーマンス記録を使って、具体的に何が遅いのかを特定しましょう。
| 手順 | 操作 | 補足 |
|---|---|---|
| 1 | メニュー→「ヘルプ」→「設定とパフォーマンス」 | サブメニューが開く |
| 2 | 「パフォーマンスの記録を開始」をクリック | 記録が開始される |
| 3 | ダッシュボードを操作 | 読み込み、フィルター、ドリルダウンなど |
| 4 | 「パフォーマンスの記録を停止」をクリック | 同じメニューから |
| 5 | パフォーマンスワークブックが自動生成 | 結果が表示される |
| 処理種類 | 内容 | 遅い場合の対策 |
|---|---|---|
| クエリ実行 | データベースへの問い合わせ | 抽出化、インデックス追加、フィルター最適化 |
| データ結合 | テーブルの結合処理 | 結合の簡略化、データソース側で結合 |
| 計算処理 | 計算フィールド、LOD表現 | LOD簡略化、事前計算、不要な計算削除 |
| 描画処理 | ビジュアルの描画 | マーク数削減、ビジュアル変更 |
| フィルター処理 | フィルターの適用 | コンテキスト化、データソースフィルター化 |
| ポイント | 内容 |
|---|---|
| 長い棒を探す | タイムラインで最も長い棒が最大のボトルネック |
| 色で種類を判別 | 色分けで処理種類がわかる |
| クリックで詳細表示 | 棒をクリックすると詳細情報が表示される |
| 定期的に記録 | 開発中も定期的にパフォーマンスをチェック |
| 改善前後を比較 | 最適化の効果を数値で確認 |
📝 STEP 25 のまとめ
- 3秒ルール:ダッシュボード読み込みは3秒以内が目標
- 抽出 vs ライブ接続:大量データは抽出が速い
- データ最適化:フィルター、集計、不要列削除
- フィルター順序:コンテキストフィルターで最適化
- マーク数:1,000〜10,000が目安、少ないほど速い
- パフォーマンス記録:ボトルネックを特定するツール
パフォーマンス最適化は後回しにしないことが重要です。
開発の初期段階からパフォーマンスを意識し、定期的にチェックしましょう。
「動くけど遅い」ダッシュボードは使われません。速度は品質です!
📝 実践演習
データソースのライブ接続を抽出に変更し、フィルターで過去1年分のデータのみに絞り込んでください。ファイルサイズの変化を確認してください。
| 1 | データソースを右クリック→「抽出」 |
| 2 | 抽出設定で「フィルターを追加」 |
| 3 | [日付]フィールドを選択 |
| 4 | 「相対日付」→「過去」→「年」→「1」 |
| 5 | 「抽出」ボタンをクリック |
| 6 | 保存先を選択して保存 |
| 7 | .hyperファイルのサイズを確認 |
既存のダッシュボードでパフォーマンス記録を実行し、最も時間がかかっている処理を特定してください。その処理を改善するための施策を3つ提案してください。
| 1 | メニュー→ヘルプ→設定とパフォーマンス→パフォーマンスの記録を開始 |
| 2 | ダッシュボードを開き、フィルターを操作 |
| 3 | パフォーマンスの記録を停止 |
| 4 | タイムラインで長い処理を確認 |
改善施策例:
| ボトルネック | 改善施策 |
|---|---|
| クエリ実行が遅い | ①抽出に変更 ②不要フィールド非表示 ③データソースフィルター追加 |
| 計算処理が遅い | ①LOD表現の簡略化 ②事前計算列の作成 ③計算フィールドの削減 |
| 描画が遅い | ①マーク数を1万以下に ②集計レベルを上げる ③Top Nフィルター追加 |
10万行以上のデータを使った散布図が遅い(10秒以上)です。以下の手法を組み合わせて、3秒以内に改善してください。
- データ抽出とフィルター
- コンテキストフィルター
- マーク数削減
- 集計
ステップ1:データ抽出と絞り込み
| 操作 | データソースを抽出に変更 |
| フィルター設定 | 直近6ヶ月 + アクティブ顧客 + 主要地域 |
| 効果 | 10万行→2万行に削減 |
ステップ2:コンテキストフィルター
| 操作 | 日付フィルター、地域フィルターをコンテキスト化 |
| 効果 | 他のフィルターより先に実行される |
ステップ3:マーク数削減
| 操作 | Top Nフィルターで売上上位1,000のみ表示 |
| 効果 | 2万マーク→1,000マークに削減 |
ステップ4:検証
- パフォーマンス記録を実行
- 読み込み時間が3秒以内になっていることを確認
- 必要に応じて追加調整(ツールチップ削減、詳細シェルフ整理)
❓ よくある質問
Tableau Serverでは自動更新スケジュールを設定できます(日次、週次など)。日次更新で十分な場合は、抽出のパフォーマンスメリットが大きいです。
どうしてもリアルタイムが必要な場合のみ、ライブ接続を検討しましょう。
すべてをコンテキスト化すると、逆にパフォーマンスが悪化することがあります。
年、地域、カテゴリなど、データを大幅に(50%以上)絞り込むフィルターのみコンテキスト化するのがベストプラクティスです。
10,000マークを超えると体感的に遅くなり始めます。散布図や地図など、マークが多くなりやすいビジュアルは特に注意が必要です。
Top Nフィルターや集計で調整しましょう。どうしてもマーク数が多い場合は、ビジュアルタイプの変更(例:散布図→ヒートマップ)も検討してください。
その棒をクリックすると詳細が表示されます。「クエリ実行」「計算」「描画」のどれが遅いかで、対策が変わります。
最初は一番長い棒から改善していけばOKです。80:20の法則で、最も遅い処理を改善するだけで大きな効果が得られることが多いです。
・抽出フィルター:必要な期間・地域・カテゴリのみに絞り込む
・フィールド非表示:使用していない列を非表示にする
・集計抽出:詳細が不要なら集計済みデータにする
これらを組み合わせることで、ファイルサイズを大幅に削減できます。
・シンプルなLOD表現は問題ない
・複数のLOD表現を重ねると遅くなりやすい
・大量データでのFIXEDは負荷が高い
可能であれば、データソース側で事前計算しておくと、Tableauでの計算負荷を減らせます。
完成後に「遅い」と気づいても、設計から見直す必要があり、大幅な手戻りが発生します。
推奨のタイミング:
・データソース設計時(抽出 vs ライブの選択)
・ビジュアル作成時(マーク数の確認)
・フィルター追加時(コンテキスト化の検討)
・完成前の最終チェック(パフォーマンス記録)
学習メモ
BIツール入門 - Step 25