執行 DAX 查詢 API 允許您對Power BI語意模型執行 DAX 查詢,並以程式化方式以 Apache Arrow IPC 格式 取得結果,這是一種為高效能分析設計的欄式二進位格式。 API 直接以 Arrow 格式回傳查詢結果,消除序列化開銷,並讓您的應用程式能夠存取具有強型別且已準備好分析的資料。
為什麼是綠箭俠?
現有的 執行查詢 端點會以 JSON 格式回傳結果。 較新的 Execute DAX Queries 端點僅以 Apache Arrow IPC 格式回傳結果,這是一種為高效能分析設計的欄式二進位格式。 下表比較了兩種回應格式:
| JSON(執行查詢 API) | Arrow(執行 DAX 查詢 API) | |
|---|---|---|
| 格式 | 列導向 JSON | 柱狀箭頭 IPC |
| 有效載荷大小 | 較大(字串編碼開銷) | 較小(二進位、壓縮) |
| 型態精確度 | 有損(所有東西都是字串/數字) | 無損(原生日期、十進位、int64) |
| 反序列化 | 句法分析 + 型別強制 | 零複製讀取至 DataFrame |
| 適用對象 | 小查詢,簡單整合 | 龐大的結果集與分析管道 |
Tip
對於任何能使用二進位 Arrow IPC 串流的用戶端應用程式,請使用 Execute DAX Queries API——包括 Python(pyarrow)、C#(Apache.Arrow)、Java、Rust、Go 以及其他支援 Arrow 函式庫的語言。 對於低程式碼/無程式碼平台、Power Automate流程或其他只能使用 JSON 的解決方案,仍可繼續使用舊版的 Execute Queries API。 雖然執行查詢 API 缺乏執行 DAX 查詢中可用的進階參數(如 queryTimeout 和 resultsetRowcountLimit),但當需要 JSON 輸出時,它仍然是合適的選擇。
Apache Arrow IPC 格式
Apache Arrow 定義了一種與語言無關的欄位記憶體格式,已被廣泛採用於資料生態系,使其成為目前支援最廣泛的資料表示方式之一。 Arrow IPC(Inter-Process Communication)串流格式會以結構元資料包裹欄位記錄批次,啟用:
- 零複製讀取 — 用戶端可以直接將回應映射到記憶體,無需在緩衝區間解析或複製資料。
-
跨語言支援 — 原生函式庫支援Python(
pyarrow)、C#(Apache.Arrow)、Java、Rust、Go、JavaScript 等,因此你幾乎可以用任何語言取得結果。 - 高效壓縮 — LZ4壓縮可減少有效載荷尺寸。
- Schema-優先設計 — 每個 Arrow 串流都以一個 schema 訊息開始,宣告欄位名稱、類型和元資料,讓客戶端在讀取任何行之前就能清楚知道資料的精確配置。
DAX 到 Arrow 類型的映射
執行 DAX 查詢 API 將 DAX 資料型態映射到 Arrow 類型,具體如下:
| DAX 類型 | 箭頭類型 | 附註 |
|---|---|---|
| 整數(不可分割的整數) | int64 |
直接 64 位元整數 |
| Decimal | double |
雙精度浮點運算 |
| 貨幣(固定十進位) | decimal128(19, 4) |
無損小數點四位精度 |
| Double | double |
雙精度浮點運算 |
| 約會時間 | date64 |
Unix 時代以來的毫秒 |
| 布林值 | bool |
|
| String | utf8 |
預設為字典編碼以提升效率 |
| Binary | binary |
|
| Variant | dense_union |
int64、貨幣、布林值、date64、float64、utf8 的聯合體 |
何時使用 Arrow 端點
使用 Arrow 端點當你:
- 從語意模型中擷取超過數百列。
- 將結果輸入 pandas、polars、Spark 或其他柱狀處理框架。
- 建立一個中階服務,代理 DAX 查詢給下游消費者。
- 需要精確的數字或日期類型,且不需手動類型轉換。
對於簡單、小型的查詢或偏好使用 JSON 的快速臨時查詢,舊有的 Execute Queries API 仍是直接的選擇。
考慮事項與限制條件
在採用執行 DAX 查詢 API 之前,請檢視與舊版執行查詢 API 相比的以下差異與限制:
| 執行查詢 API | 執行 DAX 查詢 API | |
|---|---|---|
| 終點 | executeQueries |
executeDaxQueries |
| 容量需求 | 可在 Pro、PPU 和 Premium/Fabric 上運作 | 僅限 Premium 或 Fabric 容量 |
| 租用戶設定 | 資料集執行查詢 REST API (在 開發者設定中) | Dataset Execute Queries REST API(在 開發者設定中)以及 允許 XMLA 端點和使用本地語意模型的 Excel 分析(在 整合設定中)。 允許服務主體使用 Power BI API(在開發人員設置)僅在與服務主體進行驗證時才需要。 |
| 查詢輸入 |
queries[] 陣列(呼叫時進行一次查詢) |
單 query 字串(允許多個 EVALUATE 語句) |
| 回應格式 | 僅限 JSON | 僅限於 Arrow IPC |
| 其他參數 | Limited |
queryTimeout、、 resultsetRowcountLimit、 schemaOnly、 executionMetrics、 memoryLimit |
| 串流 | 沒有串流 | 端到端串流(分塊傳輸) |
| 結果大小限制 | 每筆查詢的硬性限制為 100,000 列與 1,000,000 個值 | 沒有固定的行數或數值限制(如有需要可使用 resultsetRowcountLimit 上限) |
| 分頁 | 不支援 | 不支援 — 請使用 TOPN 或 resultsetRowcountLimit 處理大型結果 |
| 需要 Arrow 函式庫 | 沒有(僅限 JSON ) | 是的——需要一個 Arrow 函式庫(例如 pyarrow 或 Apache.Arrow)來反序列化回應 |