DAX クエリの実行 REST API のマスター

DAX クエリの実行 API を使用すると、Power BIセマンティック モデルに対して DAX クエリを実行し、高パフォーマンス分析用に設計された列形式のバイナリ形式である Apache Arrow IPC 形式 でプログラムによって結果を取得できます。 クエリ結果を方向形式で直接返すことで、API はシリアル化のオーバーヘッドを排除し、厳密に型指定された分析に対応したデータへのアクセスをアプリケーションに提供します。

 DAX クエリの実行 REST API アーキテクチャを示すダイアグラム。クライアント アプリケーション (Python、C#、PowerShell) は POST 要求を送信し、Power BI サービスから Arrow IPC ストリームを受信します。Arrow ストリーム処理パイプラインには、受信、デシリアライズ、検証、マテリアライズ、変換、消費の 6 つのクライアント側ステージが表示されます。

なぜ矢印?

既存の クエリ実行 エンドポイントは、結果を JSON として返します。 新しい DAX クエリ実行 エンドポイントは、高パフォーマンス分析用に設計された列形式のバイナリ形式である Apache Arrow IPC 形式でのみ結果を返します。 次の表は、2 つの応答形式を比較しています。

JSON (クエリの実行 API) 矢印 (DAX クエリの実行 API)
形式 行指向 JSON 縦棒矢印 IPC
ペイロード サイズ 大きい (文字列エンコードのオーバーヘッド) 小さい (バイナリ、圧縮)
型の忠実性 Lossy (すべてが文字列/数値) 無損失 (ネイティブ日付、10 進数、int64)
デシリアライズ 解析 + 型強制 DataFrame へのゼロコピー読み取り
最適な用途 小さなクエリ、シンプルな統合 大規模な結果セット、分析パイプライン

Tip

バイナリの Arrow IPC ストリームを使用できる任意のクライアント アプリケーションに対して DAX クエリ実行 API を使用します。これには、Python (pyarrow)、C# (Apache.Arrow)、Java、Rust、Go、Arrow ライブラリのサポートがあるその他の言語が含まれます。 低コード/コードなしのプラットフォーム、Power Automate フロー、または JSON のみを使用できるその他のソリューションの場合は、引き続き古い Execute クエリ API を使用します。 クエリ実行 API には、DAX クエリの実行で使用できる高度なパラメーター ( queryTimeoutresultsetRowcountLimitなど) はありませんが、JSON 出力が必要な場合は、適切な選択肢のままです。

Apache Arrow IPC 形式

Apache Arrow は、データ エコシステム全体で広く採用されている言語に依存しない列形式のメモリ形式を定義し、最も広くサポートされているデータ表現の 1 つを使用できるようにします。 Arrow IPC (Inter-Process Communication) ストリーミング形式では、列形式のレコード バッチがスキーマ メタデータでラップされ、次の機能が有効になります。

  • ゼロ コピー読み取り — クライアントは、バッファー間でデータを解析またはコピーすることなく、応答をメモリに直接マップできます。
  • 言語サポート — Python (pyarrow)、C# (Apache.Arrow)、Java、Rust、Go、JavaScript などのネイティブ ライブラリが存在するため、ほぼすべての言語で結果を使用できます。
  • 効率的な圧縮 — LZ4 圧縮によりペイロード サイズが削減されます。
  • スキーマ優先設計 — すべての方向ストリームは、列名、型、およびメタデータを宣言するスキーマ メッセージで始まるため、クライアントは行を読み取る前に正確なデータ レイアウトを認識します。

DAX と Arrow 型のマッピング

DAX クエリ実行 API は、DAX データ型を次のように Arrow 型に対応付けます。

DAX 型 矢印の種類 注記
整数 int64 ダイレクト 64 ビット整数
Decimal double 倍精度浮動小数点
通貨 (固定小数点) decimal128(19, 4) 無損失の小数点以下4桁の精度
Double double 倍精度浮動小数点
DateTime date64 Unix エポック以降のミリ秒
ブール値 bool
String utf8 効率を高める目的で既定で辞書エンコード
バイナリ binary
Variant dense_union int64、currency、bool、date64、float64、utf8 の和集合

矢印エンドポイントを使用する場合

次のような場合は、アローエンドポイントを使用します。

  • セマンティック モデルから数百行を超える行を取得します。
  • 結果を pandas、polars、Spark、またはその他の列指向処理フレームワークにフィードします。
  • ダウンストリーム コンシューマーの DAX クエリをプロキシする中間層サービスを構築します。
  • 手動での型変換なしで、正確な数値型または日付型が必要です。

単純で小規模なクエリや、JSON が優先されるクイック アドホック検索の場合、古い クエリ実行 API は単純な選択肢のままです。

考慮事項と制限事項

DAX クエリの実行 API を採用する前に、以前のクエリ実行 API と比較して、次の相違点と制約を確認してください。

クエリの実行 API DAX クエリの実行 API
エンドポイント executeQueries executeDaxQueries
容量の要件 Pro、PPU、Premium/Fabric で動作します Premium または「Fabric」容量のみ
テナント設定 データセット実行クエリ REST API ( [開発者設定] の下) Dataset Execute Queries REST API (Developer 設定) および オンプレミスセマンティック モデルを使用したExcelでの XMLA エンドポイントと分析 (Integration 設定) が必要です。 サービス プリンシパルが Power BI API を使用することを許可 (開発者設定) は、サービス プリンシパルで認証する場合にのみ必要です。
クエリ入力 queries[] 配列 (呼び出しごとに 1 つのクエリ) 1 つの query 文字列 (複数の EVALUATE ステートメントが許可されます)
応答形式 JSON のみ Arrow IPC のみ
追加パラメーター 限られた queryTimeoutresultsetRowcountLimitschemaOnlyexecutionMetricsmemoryLimit
ストリーミング ストリーミングされない エンドツーエンドでストリーミング(チャンク転送)
結果サイズの制限 クエリあたり 100,000 行と 1,000,000 個の値のハード制限 固定の行または値の制限なし (必要に応じて resultsetRowcountLimit を使用して上限を設定)
ページネーション サポートしていません サポートされていません。 大きな結果を得るには、 TOPN または resultsetRowcountLimit を使用します
矢印ライブラリが必要 いいえ (JSON のみ) はい — 応答を逆シリアル化するには、方向ライブラリ ( pyarrowApache.Arrowなど) が必要です