掌握执行 DAX 查询的 REST API

使用执行 DAX 查询 API,可以针对Power BI语义模型运行 DAX 查询,并通过编程方式以 Apache Arrow IPC 格式(专为高性能分析设计的列式二进制格式)检索结果。 通过直接以 Arrow 格式返回查询结果,API 消除了序列化开销,并使应用程序能够访问强类型化、分析就绪的数据。

显示执行 DAX 查询 REST API 体系结构的示意图。客户端应用程序(Python、C#、PowerShell)发送 POST 请求并从 Power BI 服务接收 Arrow IPC 流。Arrow IPC 流处理管道显示了六个客户端阶段:接收、反序列化、验证、具体化、转换和使用。

为什么使用箭头?

现有的 执行查询 终结点将结果作为 JSON 返回。 较新的 执行 DAX 查询 终结点以 Apache Arrow IPC 格式(一种专为高性能分析设计的列式二进制格式)以独占方式返回结果。 下表比较了两种响应格式:

JSON (执行查询 API) 箭头(执行 DAX 查询 API)
格式 面向行的 JSON 柱形箭头 IPC
有效负载大小 较大(字符串编码开销) 更小(二进制,压缩)
类型保真度 Lossy (所有内容都是字符串/数字) 无损(本地日期、十进制、64位整数)
反 序列 化 分析 + 类型强制 零拷贝读取到 DataFrame
最适用于 小型查询,简单的集成 大型结果集,分析流程

小窍门

使用执行 DAX 查询 API 适用于任何可以使用二进制 Arrow IPC 流的客户端应用程序,包括支持 Arrow 库的 Python(pyarrow)、C# (Apache.Arrow)、Java、Rust、Go 和其他语言。 对于低代码/无代码平台、Power Automate流或其他只能使用 JSON 的解决方案,请继续使用较旧的 Execute Queries API。 尽管执行查询 API 缺少执行 DAX 查询(例如 queryTimeoutresultsetRowcountLimit中可用的高级参数,但在需要 JSON 输出时,它仍然是适当的选择。

Apache Arrow IPC 格式

Apache Arrow 定义了一种独立于语言的列式内存格式,该格式在数据生态系统中被广泛采用,使其成为最广受支持的数据表示形式之一。 Arrow IPC(Inter-Process 通信)流式处理格式使用模式元数据包装列式记录批,从而实现:

  • 零复制读取 - 客户端可以直接将响应映射到内存中,而无需分析或复制缓冲区之间的数据。
  • 跨语言支持 — 存在适用于 Python(pyarrow)、C#(Apache.Arrow)、Java、Rust、Go、JavaScript 等的本机库,因此几乎可以使用任意语言处理结果。
  • 高效压缩 — LZ4 压缩可减少有效负载大小。
  • 架构优先设计 — 每个箭头流都以声明列名、类型和元数据的架构消息开头,因此客户端在读取任何行之前知道确切的数据布局。

DAX 到箭头类型映射

执行 DAX 查询 API 将 DAX 数据类型映射到箭头类型,如下所示:

DAX 类型 箭头类型 备注
整数(完整数) int64 直接 64 位整数
Decimal double 双精度浮点
货币(固定十进制) decimal128(19, 4) 无失四小数位精度
Double double 双精度浮点
日期/时间 date64 自 Unix 纪元以来的毫秒数
布尔 bool
字符串 utf8 默认情况下,字典编码以提高效率
Binary binary
变量 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 仅限高级版或Fabric容量
租户设置 数据集执行查询 REST API (在 开发人员设置下) Dataset 执行查询 REST API(在 Developer 设置下)和 允许 XMLA 终结点及使用本地语义模型在 Excel 中进行分析(在 Integration 设置下)是必需的。 允许服务主体使用 Power BI API(在 开发者设置下)仅当使用服务主体进行身份验证时才需要。
查询输入 queries[] 数组(每个调用一个查询) 单个 query 字符串(允许多个 EVALUATE 语句)
响应格式 仅限 JSON 仅箭头 IPC
其他参数 有限 queryTimeoutresultsetRowcountLimitschemaOnlyexecutionMetricsmemoryLimit
流媒体 未流式传输 端到端流式传输(分块传输)
结果大小限制 每个查询的硬限制为 100,000 行和 1,000,000 个值 没有固定的行或值限制(如需限制,请使用 resultsetRowcountLimit
分页 不支持 不支持 - 使用 TOPNresultsetRowcountLimit 用于大型结果
所需的箭头库 否(仅限 JSON) 是:反序列化响应需要使用箭头库(例如 pyarrowApache.Arrow