该dax_request插件针对Power BI语义模型运行数据分析表达式(DAX)查询,并将结果作为表返回。 使用标准 Kusto 查询语言 (KQL) 运算符处理返回的表。 使用 evaluate 运算符调用插件。
该插件使用Power BI执行 DAX 查询 API,该 API 以 Apache Arrow 格式返回结果。 当插件将响应转换为 KQL 表时,该插件将保留支持的列类型。
Prerequisites
- 语义模型必须位于分配给Fabric或Power BI高级容量的工作区中。
- 必须启用数据集执行查询 REST API、允许 XMLA 终结点和分析本地语义模型租户设置Excel。
- 你必须对语义模型具有 “生成”和“读取”权限 。
-
群集标注策略必须允许
dax标注。api.powerbi.com若要更改此策略,需要AllDatabasesAdmin或Ops权限。
Syntax
evaluate
dax_request
(
ConnectionString,DaxQuery) [:OutputSchema]
有关 参考文档的语法约定的详细信息,请参阅语法约定。
Parameters
| Name | 类型 | Required | Description |
|---|---|---|---|
| ConnectionString | string |
是的 | 语义模型 URL 后 ;Impersonate跟 。 有关支持的 URL 格式,请参阅 连接字符串。 |
| DaxQuery | string |
是的 | 要针对语义模型执行的 DAX 查询。 |
| OutputSchema | - | - | 预期输出列的名称和类型。 使用语法 (ColumnName:ColumnType [, ...])。 |
![注意]建议指定 OutputSchema 。 它允许 Kusto 确定插件的输出列和类型,而无需在架构发现期间将 DAX 查询发送到Power BI。 Power BI请求改为延迟到查询执行,以及 KQL 查询的其余部分。 如果返回的架构与声明的架构不兼容,插件将返回错误。
连接字符串
连接字符串由语义模型 URL 和;Impersonate身份验证指令组成。 使用以下格式之一:
工作区中的语义模型:
https://api.powerbi.cn/v1.0/myorg/groups/WorkspaceId/datasets/SemanticModelId;Impersonate我的工作区中的语义模型:
https://api.powerbi.cn/v1.0/myorg/datasets/SemanticModelId;Impersonate
myorg路径段是文本。
*WorkspaceId* 并且 *SemanticModelId* 必须是全局唯一标识符(GUID)。 不要在 SemanticModelId 之后包含查询字符串、片段或尾随路径。
身份验证和授权
该插件使用Microsoft Entra代理身份验证。 引擎获取请求用户的令牌,并在该用户的安全上下文中发送 DAX 查询。 用户必须对语义模型具有 “生成”和“读取”权限 。 为用户配置的任何行级安全性或对象级安全性都适用于查询。
用作 ;Impersonate 身份验证指令。 不支持托管标识、服务主体和应用程序密钥身份验证。
Important
对包含机密信息的任何 字符串使用模糊字符串文本 。 模糊处理的值不会显示在 Kusto 跟踪中。
配置和标注策略
插件对Power BI进行外部调用。 由于默认标注策略阻止dax标注,因此群集管理员必须显式允许Power BI终结点。
以下命令将限制性 dax 规则合并到现有 群集标注策略中:
.alter-merge cluster policy callout @'[{
"CalloutType": "dax",
"CalloutUriRegex": "api\\.powerbi\\.com.*",
"CanCall": true
}]'
验证策略:
.show cluster policy callout
Returns
该插件以 KQL 表的形式返回 DAX 查询结果。 它保留支持的箭头数据类型。 例如,箭头int64、double和utf8date-time值分别映射到 Kustolong、real、string和datetime。
Power BI返回括号列名,例如 [Category]。 在 KQL 中,使用 ['...'] 语法引用这些名称,例如 ['[Category]']。
Warning
该插件使用Power BI执行 DAX 查询 API 的默认行限制(resultSetRowCountLimit)。 如果 DAX 查询生成的行数超过此限制,则返回的表可能不完整,而不会出错。 筛选或聚合 DAX 查询中的数据,使结果保持在限制范围内。 在 KQL 中筛选或聚合后不会恢复省略的行。
Examples
返回表中的所有行
以下示例查询 Sales 表。 返回的结果受 API 的默认行限制的约束。
evaluate dax_request(
'https://api.powerbi.cn/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
'EVALUATE Sales')
使用 Kusto 处理 DAX 结果
以下示例在 DAX 中选择两列,汇总 KQL 中的结果,并按类别筛选:
evaluate dax_request(
'https://api.powerbi.cn/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
'EVALUATE SELECTCOLUMNS(Sales, "Category", Sales[Category], "Amount", Sales[Amount])')
| summarize TotalAmount = sum(['[Amount]']) by ['[Category]']
| where ['[Category]'] == 'Electronics'
Tip
尽可能筛选和聚合 DAX 中的数据量,以减少返回到 Kusto 的数据量。
指定输出架构
以下示例声明预期的输出架构,以便 Kusto 可以在查询分析期间不联系Power BI来确定架构。 声明的架构必须与实时结果架构匹配。
evaluate dax_request(
'https://api.powerbi.cn/v1.0/myorg/groups/<workspace-id>/datasets/<semantic-model-id>;Impersonate',
'EVALUATE ROW("cnt", COUNTROWS(Sales), "sumAmt", SUM(Sales[Amount]))')
: (['[cnt]']:long, ['[sumAmt]']:real)
Troubleshooting
| Error | 原因和解决方法 |
|---|---|
| 无效连接字符串 | 确认 URL 使用受支持的格式,工作区和语义模型 ID 是有效的 GUID,字符串以 ;Impersonate结尾。 |
| 不允许标注 | 配置群集标注策略以允许 dax 调用 api.powerbi.com。 |
| 身份验证或授权错误 | 确认已启用所需的租户设置,并且请求的用户对语义模型具有“生成”和“读取”权限。 |
| HTTP 请求错误 | 确保Power BI 服务可用性、终结点可访问性和语义模型 URL。 |