一般的なパフォーマンスの問題のトラブルシューティング

完了

個々の最適化手法は価値がありますが、実際のパフォーマンスの問題が 1 つのカテゴリにきちんと収まることはほとんどありません。 遅いレポートには、DAX の問題、カーディナリティの問題、ビジュアルデザインの問題が一度に発生する可能性があります。 体系的なトラブルシューティングアプローチは、問題を効率的に見つけて修正するのに役立ちます。

体系的な診断ワークフローに従う

レポートが遅い場合は、次の 3 段階のアプローチを使用します。

  1. ビジュアル、DAX、またはデータですか? パフォーマンス アナライザーを開き、キャッシュをクリアして、すべてのビジュアルを更新します。 DAX クエリ、ビジュアル表示、およびその他のタイミング メトリックを比較して、時間が費やされた場所を決定します。
  2. 根本原因を特定します。 低速な DAX クエリをコピーし、DAX クエリ ビューで実行します。 クエリの速度が速くてもビジュアルが遅い場合、問題はレンダリングです。 クエリがどこでも遅い場合、問題はメジャーまたはデータ モデルです。
  3. 修正して確認します。 適切な修正プログラムを適用し、パフォーマンス アナライザーをもう一度実行して、パフォーマンスが向上したことを確認します。 修正が機能したと想定しないでください。それを測定してください。

このワークフロー (症状→診断→修正→検証) により、間違った問題に時間を費やすことがなくなり、変更が実際に役立つかどうかを確認できます。

ベスト プラクティス アナライザーを実行して一般的な問題をキャッチする

ベスト プラクティス アナライザー (BPA) は、パフォーマンス、DAX 式、エラー防止、およびメンテナンスに対応する 60 を超えるルールのセットに対してセマンティック モデルをチェックします。 BPA は、すべての列とメジャーを手動で検査する代わりに、モデル全体をスキャンし、未使用の列、高カーディナリティ キー、不足している説明、非効率的な DAX パターンなどの問題にフラグを設定します。

Microsoft Fabricでは、BPA は、Power BI サービスのセマンティック モデルから直接開くことができるサンプル ノートブックを通じて利用できます。 セマンティック モデルを選択し、[ ホーム ] リボンまたは [モデルの正常性 ] ドロップダウンから BPA ノートブックを選択します。 ノートブックはセマンティック リンクを使用してモデルに対して実行され、分類された推奨事項が返されます。 コンパニオン Memory Analyzer ノートブックには、テーブル、列、リレーションシップのストレージ統計が表示されます。

BPA は、パフォーマンスの問題が発生する前の予防的なチェックとして最も役立ちます。 モデルを構築または大幅に変更した後に実行し、結果を使用して、このモジュールで前に説明した最適化手法をガイドします。

Note

Fabricにアクセスできない場合は、テーブル エディター (サード パーティの外部ツール) に、Power BI デスクトップ モデルまたは XMLA エンドポイントを介して発行されたモデルに対して同じルール セットをローカルで実行する BPA 機能が含まれています。

複雑なビジュアルに対処する

多すぎるデータを要求するビジュアルは、一般的なパフォーマンスの問題です。 レポート ページ上の各ビジュアルはセマンティック モデルに個別の DAX クエリを送信し、多くのメジャー、データ ポイント、またはクロスフィルター依存関係を持つビジュアルは複雑なクエリを生成します。

視覚的なパフォーマンスに関する一般的な問題:

  • 1 つのビジュアルで指標が多すぎます。 20のメジャーを持つテーブルビジュアルは、大規模で複雑なクエリを生成します。 指標の数を減らすか、情報を複数のビジュアルに分割します。
  • データ ポイントが多すぎます。 個々のポイントが 100,000 個の散布図または 50,000 行のテーブルは、レンダリングに時間がかかります。 上位 N 個のフィルターを適用して、返される行を制限します。
  • 1 ページのビジュアルが多すぎます。 各ビジュアルは、クエリを個別に送信します。 30 個のビジュアルを含むページは、読み込み時にモデルに 30 回クエリを実行します。 ドリルスルー ページとツールヒントを使用して、すべてを 1 ページに詰め込むのではなく、ページ間で情報を配布します。

ヒント

一般的なガイドラインとして、レポート ページごとに 8 つ以下のビジュアルを目指します。 それ以上に読み込み時間が長くなり、レポートの使用が困難になります。

不適切に設計されたリレーションシップを修正する

リレーションシップの設計は、エンジンがテーブル間のフィルター伝達を解決する方法に影響します。 注意すべき問題:

  • あいまいなリレーションシップ パス。 2 つのテーブル間の複数のアクティブ なパスは、エンジンが使用するパスを決定することを強制します。これにより、予期しない結果とパフォーマンスのオーバーヘッドが発生する可能性があります。 代替パスが必要な場合は、メジャーで単一のアクティブなリレーションシップと USERELATIONSHIP を使用します。
  • 双方向のクロスフィルター処理。 双方向リレーションシップは両方向にフィルターを伝達するため、クエリ評価の複雑さが増します。 多対多リレーションシップなど、必要な場合にのみ双方向フィルター処理を使用します。
  • 高カーディナリティのリレーションシップ列 数百万もの一意の値 (GUID など) を持つ列のリレーションシップは、カーディナリティの低い列のリレーションシップよりも走査に時間がかかります。 可能であれば、代わりに整数サロゲート キーを使用します。

フィルター コンテキストの問題を解決する

コストの高いフィルター伝達では、メジャー ロジック自体が単純な場合でもクエリが遅くなる可能性があります。 次のパターンに注意してください。

  • 大きなテーブルの REMOVEFILTERS または ALL。 これらの関数はフィルター コンテキストを削除します。つまり、エンジンは制限なしでテーブル全体を評価する必要があります。 これらを意図的に使用し、必要なスコープでのみ使用します。
  • 大規模なブリッジ テーブルを持つ多対多リレーションシップ。 各クエリは、ブリッジ テーブルを介してマッピングを解決します。 データが大きい場合、このプロセスはコストがかかります。 別のモデリング アプローチ (ロールプレイング ディメンションや統合テーブルなど) のパフォーマンスが向上するかどうかを検討します。

DirectQuery のパフォーマンスのトラブルシューティング

セマンティック モデルで DirectQuery ストレージ モードが使用されている場合、DAX エンジンではなく外部データ ソースからパフォーマンスが低下する可能性があります。 DirectQuery 固有の問題は次のとおりです。

  • クエリの折りたたみエラー。 Power Queryは、変換をデータ ソースにプッシュバックしようとします (クエリ フォールディング)。 変換がフォールドできない場合は、Power BI生データをダウンロードし、ローカルで処理します。 この方法は、はるかに遅くなります。 Power Queryのネイティブ クエリを確認して、折りたたみを確認します。
  • ソース クエリが遅い。 クエリ フォールディングが機能する場合でも、インデックスの欠如、大きなテーブル スキャン、またはリソースの競合による遅延が原因で、ソース データベースでクエリの実行が遅くなる可能性があります。 データベース管理者と協力して、ソースのパフォーマンスを最適化します。
  • ラウンド トリップ レイテンシ. 各ビジュアル操作は、データ ソースにクエリを送信し、応答を待機します。 ネットワーク待ち時間とソース応答時間は、特に多くのビジュアルを含むページでは顕著に加算されます。 概要データのインポートと詳細データ用の DirectQuery を使用した混合ストレージ モードを検討してください。

DAX Studio を使用してより詳細な診断を行う

パフォーマンス アナライザーと DAX クエリ ビューは、ほとんどのトラブルシューティング シナリオを処理します。 エンジン レベルの詳細 (数式エンジンやストレージ エンジンでクエリがボトルネックになっているかどうかなど) が必要な場合は、DAX Studio によってギャップが埋められます。 パフォーマンス アナライザーから低速の DAX クエリをコピーし、DAX Studio に貼り付け、 サーバーのタイミング で時間が費やされた正確な場所を確認できるようにします。 クエリ プラン ビューでは、タイミング データだけでは表示されない非効率的な操作も表示される場合があります。

Note

SQL Server Profiler は、セッション中にすべての DAX クエリと DirectQuery SQL クエリの完全なトレースをキャプチャするためのもう 1 つのオプションです。 Power BI Desktop が実行されているローカルの Analysis Services インスタンスに接続します。 プロファイラーはセッション全体の分析に役立ちますが、ほとんどのビジュアル レベルのトラブルシューティングでは、パフォーマンス アナライザーと DAX Studio の方が実用的です。

トラブルシューティング チェックリストを作成する

低速レポートを調査する場合は、次のチェックを順番に実行します。

  1. キャッシュをクリアし、パフォーマンス アナライザーを実行します。 最も遅いビジュアルとそのボトルネックのカテゴリを特定します。
  2. DAX クエリ時間が長い場合は、DAX クエリ ビューまたは DAX Studio でクエリをコピーして分析します。 大きなテーブル、イテレーター、繰り返しのサブ式に対する FILTER などの高価なパターンを探します。
  3. ビジュアルの表示時間が長い場合は、メジャー、データ ポイントの数を減らすか、フィルターを適用してビジュアルを簡略化します。
  4. キー列のカーディナリティを確認します。 不要なカーディナリティの高い列を削除または減らします。
  5. DirectQuery モデルの場合は、クエリの折りたたみとソースのパフォーマンスを確認します。
  6. 各変更の後、もう一度測定して改善を確認します。

この構造化されたアプローチにより、最も影響の大きい問題に最初に対処し、針を動かさない変更に時間を費やさないようにすることができます。