パフォーマンスの問題を修正
場合によっては、レポートの実行時にパフォーマンスの問題に対処する必要があります。 Power BI には、問題を修正してプロセスを合理化するためのパフォーマンス アナライザー ツールが用意されています。
組織内の営業チーム用のレポートを作成するシナリオを考えてみましょう。 DirectQuery を使用して営業チームの SQL データベースへのデータ接続を作成し、データベース内の複数のテーブルに含まれているデータをインポートしました。 暫定的なビジュアルとフィルターを作成したところ、一部のテーブルに対するクエリが他のテーブルよりも高速に実行され、一部のフィルターが他のフィルターと比べて処理に時間がかかることに気付きました。
Power Query のパフォーマンスを最適化する
Power Query のパフォーマンスは、データ ソース レベルでのパフォーマンスに依存しています。 Power Query によって提供されるデータ ソースの種類は幅広く、各ソースのパフォーマンス チューニング技法もさまざまです。 たとえば、Microsoft SQL Server からデータを抽出する場合は、製品のパフォーマンス チューニング ガイドラインに従う必要があります。 適切な SQL Server パフォーマンス チューニング技法として、インデックスの作成、ハードウェアのアップグレード、実行プランのチューニング、データ圧縮などがあります。 これらのトピックについてはここでは説明しませんが、Power BI と Power Query を使用する際にデータ ソースについて理解し、そのメリットを得るための例としてのみ示します。
Power Query では、クエリ フォールディングと呼ばれる技法によってデータ ソースの高いパフォーマンスを活用します。
クエリ フォールディング
Power Query エディター内のクエリ フォールディングを使用すると、Power BI レポートのパフォーマンスを向上させることができます。 "クエリ フォールディング" は、Power Query エディターで行った変換と編集を、変換の実行中にネイティブ クエリ (シンプルな Select SQL ステートメント) として同時に追跡するプロセスです。 このプロセスは、これらの変換を元のデータ ソース サーバーで実行し、Power BI のコンピューティング リソースに負荷をかけないようにするために実装します。
Power Query を使用して Power BI にデータを読み込むことができます。 次に、Power Query エディターを使用すると、列の名前変更や削除、データのアペンド、解析、フィルター処理、グループ化など、データを変換することができます。
売上データ内のいくつかの列の名前を変更し、city 列と state 列を "city state" 形式で結合した場合について考えてみましょう。 このとき、クエリ フォールディング機能によってネイティブ クエリ内でこれらの変更が追跡されます。 その後、データを読み込むときに、元のソースで別個に変換が行われます。これにより、Power BI でパフォーマンスが最適化されます。
クエリ フォールディングには次のような利点があります。
データ更新と増分更新の効率の向上。 クエリ フォールディングを使用してデータ テーブルをインポートすると、Power BI は各変換をローカルで実行する必要がないため、Power BI によってリソースをより適切に割り当て、データをより高速に更新することができます。
ストレージ モード "DirectQuery" および "デュアル" との自動互換性。 すべての DirectQuery およびデュアル ストレージ モードのデータ ソースには、直接接続を作成するためのバックエンド サーバー処理機能が必要です。これは、クエリ フォールディングがこの用途に適した自動機能であることを意味しています。 すべての変換を 1 つの Select ステートメントに還元できる場合は、クエリ フォールディングが行われる可能性があります。
次のシナリオは、クエリ フォールディングの動作を示しています。 このシナリオでは、複数のテーブルに一連のクエリを適用します。 Power Query を使用して新しいデータ ソースを追加し、Power Query エディターに移動した後、次の図に示すように [クエリの設定] ペインに移動し、最後に適用したステップを右クリックします。
[ネイティブ クエリを表示] オプションが使用できない (太字で表示されない) 場合、このステップではクエリ フォールディングを実行できないため、[適用したステップ] 領域で、[ネイティブ クエリを表示] が使用できる (太字で表示される) ステップに達するまでさかのぼって作業する必要があります。 このプロセスによって、セマンティック モデルの変換に使用されるネイティブ クエリが表示されます。
以下の変換では、ネイティブ クエリを使用できません。
- インデックス列の追加
- 2 つの異なるソースでの異なるテーブルの列のマージと追加
- 列のデータ型の変更
覚えておくべきガイドラインとして、変換を GROUP BY、SORT BY、WHERE、UNION ALL、JOIN などの演算子や句を含む Select SQL ステートメントに変換できる場合は、クエリ フォールディングを使用できます。
クエリ フォールディングはデータの取得、インポート、準備の際にパフォーマンスを最適化するための 1 つのオプションですが、もう 1 つのオプションとしてクエリ診断があります。
クエリ診断
クエリのパフォーマンスを調べるために使用できるもう 1 つのツールとして、クエリ診断があります。 データの読み込みと変換、Power Query でのデータの更新、クエリ エディターでの SQL ステートメントの実行などの処理中にどのようなボトルネックが存在する可能性があるかを特定できます。
Power Query エディターでクエリ診断にアクセスするには、[ホーム] リボンの [ツール] に移動します。 Power Query エディターでデータの変換やその他の編集を開始する準備ができたら、[セッションの診断] セクションの [診断の開始] を選択します。 完了したら、必ず [診断の停止] を選択してください。
[ステップを診断する] を選択すると、次の図に示すように、そのステップの実行にかかる時間が表示されます。 この選択により、あるステップが他のステップよりも完了に時間がかかるかどうかがわかり、さらに調査するための出発点が得られます。
このツールは、セマンティック モデルの読み込み、データ更新の実行、その他の革新的なタスクの実行などの作業について、Power Query 側のパフォーマンスを分析するときに役立ちます。
パフォーマンスを最適化するその他の手法
Power BI のクエリ パフォーマンスを最適化するその他の方法として、次のようなものがあります。
元のデータ ソースでできるだけ多くのデータを処理する。 Power Query と Power Query エディターを使用してデータを処理することもできますが、そのタスクを完了するために必要な処理能力のせいで、レポートの他の領域でパフォーマンスが低下する可能性があります。 一般には、可能な限りネイティブのデータ ソースで処理することをお勧めします。
ネイティブ SQL クエリを使用する。 SQL データベースに DirectQuery を使用する場合 (このシナリオの場合など) は、ストアド プロシージャや共通テーブル式 (CTE) からデータを取得しないようにしてください。
日付と時刻が結合されている場合は、分割する。 日付と時刻が結合された列を含むテーブルがある場合は、それらを別個の列に分割してから Power BI にインポートするようにしてください。 この方法により、圧縮機能が向上します。
詳細については、クエリ フォールディングのガイダンスに関する記事とクエリ フォールディングに関する記事を参照してください。