DAX クエリの実行 API を使用すると、Power BIセマンティック モデルに対して DAX クエリを実行し、高パフォーマンス分析用に設計された列形式のバイナリ形式である Apache Arrow IPC 形式 でプログラムによって結果を取得できます。 クエリ結果を方向形式で直接返すことで、API はシリアル化のオーバーヘッドを排除し、厳密に型指定された分析に対応したデータへのアクセスをアプリケーションに提供します。
なぜ矢印?
既存の クエリ実行 エンドポイントは、結果を 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 クエリの実行で使用できる高度なパラメーター ( queryTimeout や resultsetRowcountLimitなど) はありませんが、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 ( [開発者設定] の下) | |
| クエリ入力 |
queries[] 配列 (呼び出しごとに 1 つのクエリ) |
1 つの query 文字列 (複数の EVALUATE ステートメントが許可されます) |
| 応答形式 | JSON のみ | Arrow IPC のみ |
| 追加パラメーター | 限られた |
queryTimeout、resultsetRowcountLimit、schemaOnly、executionMetrics、memoryLimit |
| ストリーミング | ストリーミングされない | エンドツーエンドでストリーミング(チャンク転送) |
| 結果サイズの制限 | クエリあたり 100,000 行と 1,000,000 個の値のハード制限 | 固定の行または値の制限なし (必要に応じて resultsetRowcountLimit を使用して上限を設定) |
| ページネーション | サポートしていません | サポートされていません。 大きな結果を得るには、 TOPN または resultsetRowcountLimit を使用します |
| 矢印ライブラリが必要 | いいえ (JSON のみ) | はい — 応答を逆シリアル化するには、方向ライブラリ ( pyarrow や Apache.Arrowなど) が必要です |