Datasets - Execute Dax Queries

针对提供的数据集执行数据分析表达式 (DAX) 查询。 数据集必须驻留在 “我的工作区”中。 响应以 Apache Arrow 格式返回。

权限或查询错误将导致:

  • 响应错误,例如 XMLA endpoint feature is disabled. Turn on the tenant setting 'Allow XMLA endpoints and Analyze in Excel with on-premises semantic models' to enable this feature.
  • 成功的 HTTP 状态代码(200),其中包含错误详细信息的记录批处理。

Permissions

必须在 集成设置下找到 数据集执行查询 REST API的租户设置。

用户必须具有数据集读取和生成权限。 有关详细信息,请参阅 管理数据集访问权限

所需范围

Dataset.ReadWrite.All 或 Dataset.Read.All

Limitations

  • 此 API 仅适用于容量上托管的数据集。
  • 不支持托管在 Azure Analysis Services 中或与本地 Azure Analysis Services 模型建立实时连接的数据集。
  • 每个 API 调用一个查询,但查询可以有多个评估语句。
  • 无论查询的数据集如何,每个用户的查询请求数限制为每分钟 120 个。
  • 若要使用服务主体,请确保管理员租户设置 允许服务主体在启用 开发人员设置 下使用 Power BI API。 有关使用 RLS 的语义模型的详细信息,请参阅 RLS 限制
  • 目前仅支持 DAX 查询和 INFO 函数。 不支持 MDX 和 DMV 查询。

响应格式

响应正文包含一个或多个串联 的 Apache Arrow IPC 流。 每个流自包含其自己的架构和记录批处理。 若要处理响应,请使用 Apache Arrow 客户端库。

响应可能包括以下行集类型,这些类型由架构级别元数据标识(箭头架构上的键值对):

  • 数据行集:包含查询结果。 没有特殊的元数据键。 列名和类型由 DAX 查询确定。
  • 错误行集:在 IsError = true 架构元数据中标识。 包含列: ErrorCodeErrorMessageErrorDescription和源位置字段。 架构元数据还包括 FaultCode (十六进制错误代码)和 FaultString (错误消息)。

在响应中记录批处理使用LZ4_FRAME压缩。 pyarrow 库会自动处理此问题。 对于 .NET,请安装 Apache.Arrow.Compression NuGet 包。

重要

查询错误返回 HTTP 200,箭头流中带有错误行集。 始终检查架构元数据, IsError 即使在成功的 HTTP 状态代码上也是如此。

以下Python示例演示如何使用 pyarrow0 读取数据和检查错误:

import io
import pyarrow as pa

# response = requests.post(url, headers=headers, json=request_body)
stream = io.BytesIO(response.content)
results = []

while stream.tell() < len(response.content):
    try:
        reader = pa.ipc.open_stream(stream)
        table = reader.read_all()
        metadata = {
            k.decode(): v.decode()
            for k, v in (reader.schema.metadata or {}).items()
        }
        if metadata.get("IsError") == "true":
            raise RuntimeError(
                f"Query error [{metadata.get('FaultCode')}]: "
                f"{metadata.get('FaultString')}"
            )
        else:
            results.append(table)
    except pa.ArrowInvalid:
        break

print(results[0].to_pandas())

对于.NET,请使用此 SDK 中的 DaxQueryArrowResponseReader 类,该类处理流分析、错误检测和 LZ4 解压缩。

POST https://api.powerbi.com/v1.0/myorg/datasets/{datasetId}/executeDaxQueries

URI 参数

名称 必需 类型 说明
datasetId
path True

string (uuid)

数据集 ID

请求正文

名称 必需 类型 说明
query True

string

查询文本。

applicationContext

string

包含有关操作的其他信息的 JSON 结构。

culture

string

控制特定于区域设置的查询格式的区域性代码,例如 en-US。 有关受支持的区域性代码的详细信息,请参阅 Power BI支持的语言和国家/地区。

customData

string

用于动态 RLS 的自定义数据。 例如, North America 可以由模型的 CUSTOMDATA() 函数引用。

effectiveUsername

string

查询的有效用户名。

memoryLimit

integer (int64)

查询的内存限制(以 KB 为单位)。

queryTimeout

integer

查询超时(以秒为单位)。

resultSetRowCountLimit

integer

要返回的最大行数。 默认值为 1,000,000 行。

roles

string[]

分配给用户的角色。

schemaOnly

boolean

查询是否必须仅返回架构。

响应

名称 类型 说明
200 OK

string

已成功执行查询。 返回 Apache Arrow 格式的二进制数据。

Media Types: "application/vnd.apache.arrow.stream"

示例

Execute query with culture
Execute query with custom data
Execute query with effective username
Execute simple DAX query

Execute query with culture

示例请求

POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
  "query": "EVALUATE ROW(\"Formatted Date\", FORMAT(DATE(2024, 12, 31), \"Long Date\"))",
  "culture": "en-US"
}

示例响应

Execute query with custom data

示例请求

POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
  "query": "EVALUATE FILTER('Sales', 'Sales'[Region] = CUSTOMDATA())",
  "customData": "North America"
}

示例响应

Execute query with effective username

示例请求

POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
  "query": "EVALUATE SUMMARIZECOLUMNS('Sales'[Region], \"Total\", SUM('Sales'[Amount]))",
  "effectiveUsername": "user@contoso.com",
  "roles": [
    "SalesRole"
  ],
  "queryTimeout": 300
}

示例响应

Execute simple DAX query

示例请求

POST https://api.powerbi.com/v1.0/myorg/datasets/cfafbeb1-8037-4d0c-896e-a46fb27ff229/executeDaxQueries
{
  "query": "EVALUATE VALUES('Product'[Category])",
  "queryTimeout": 600,
  "schemaOnly": false,
  "resultSetRowCountLimit": 100000
}

示例响应

定义

DatasetExecuteDaxQueriesRequest

针对数据集执行查询的请求

名称 类型 说明
applicationContext

string

包含有关操作的其他信息的 JSON 结构。

culture

string

控制特定于区域设置的查询格式的区域性代码,例如 en-US。 有关受支持的区域性代码的详细信息,请参阅 Power BI支持的语言和国家/地区。

customData

string

用于动态 RLS 的自定义数据。 例如, North America 可以由模型的 CUSTOMDATA() 函数引用。

effectiveUsername

string

查询的有效用户名。

memoryLimit

integer (int64)

查询的内存限制(以 KB 为单位)。

query

string

查询文本。

queryTimeout

integer

查询超时(以秒为单位)。

resultSetRowCountLimit

integer

要返回的最大行数。 默认值为 1,000,000 行。

roles

string[]

分配给用户的角色。

schemaOnly

boolean

查询是否必须仅返回架构。