dax_request插件

该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。