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架构元数据中标识。 包含列:ErrorCode、ErrorMessage、ErrorDescription和源位置字段。 架构元数据还包括FaultCode(十六进制错误代码)和FaultString(错误消息)。
在响应中记录批处理使用LZ4_FRAME压缩。 pyarrow 库会自动处理此问题。 对于 .NET,请安装 Apache.Arrow.Compression NuGet 包。
重要
查询错误返回 HTTP 200,箭头流中带有错误行集。 始终检查架构元数据, IsError 即使在成功的 HTTP 状态代码上也是如此。
以下Python示例演示如何使用
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 参数
| 名称 | 在 | 必需 | 类型 | 说明 |
|---|---|---|---|---|
|
dataset
|
path | True |
string (uuid) |
数据集 ID |
请求正文
| 名称 | 必需 | 类型 | 说明 |
|---|---|---|---|
| query | True |
string |
查询文本。 |
| applicationContext |
string |
包含有关操作的其他信息的 JSON 结构。 |
|
| culture |
string |
控制特定于区域设置的查询格式的区域性代码,例如 |
|
| customData |
string |
用于动态 RLS 的自定义数据。 例如, |
|
| 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 |
控制特定于区域设置的查询格式的区域性代码,例如 |
| customData |
string |
用于动态 RLS 的自定义数据。 例如, |
| effectiveUsername |
string |
查询的有效用户名。 |
| memoryLimit |
integer (int64) |
查询的内存限制(以 KB 为单位)。 |
| query |
string |
查询文本。 |
| queryTimeout |
integer |
查询超时(以秒为单位)。 |
| resultSetRowCountLimit |
integer |
要返回的最大行数。 默认值为 1,000,000 行。 |
| roles |
string[] |
分配给用户的角色。 |
| schemaOnly |
boolean |
查询是否必须仅返回架构。 |