在 Power BI 中查询指标视图

重要

此功能在 Beta 版中。

BI 兼容模式允许使用标准 SQL 聚合函数查询 Power BI 中的 Unity 目录指标视图 ,而无需更改 Power BI 报表或数据模型。

本页介绍要求、如何启用 BI 兼容性模式、工作原理、支持的查询模式和已知限制。

要求

  • 运行 Databricks Runtime 18.0 或更高版本的 SQL 仓库
  • 使用 ADBC 驱动程序的 Power BI 连接,默认启用该驱动程序用于新连接。 有关详细信息,请参阅 为 Power BI 配置 ADBC 或 ODBC 驱动程序
  • 如果使用 Power BI Desktop,则需要 v:2.151.1052.0 或更高版本(2025 年 2 月版本)。

启用 BI 兼容性模式

在 Power BI Desktop 或服务中手动 创建新的 Azure Databricks 连接时启用 BI 兼容性模式:

  1. 在 Power BI Desktop 或服务中,创建与 Azure Databricks 的新连接。
  2. 输入 Azure Databricks Server 主机名 和 SQL 仓库 HTTP 路径
  3. “高级选项”下,将“指标视图 BI 兼容性模式”设置为“高级配置”下启用。
  4. 完成连接设置。 有关如何手动创建 Power BI 连接的详细步骤,请参阅如何连接到 Power BI 服务Power BI Desktop

BI 兼容性模式的工作原理

BI 工具通常无法区分度量值和维度,将每列视为标准数据字段。 这会导致几个问题:

  • 聚合不匹配:若要查询度量值,用户使用 MEASURE() 函数(例如 SELECT region, MEASURE(totalrevenue) FROM mv GROUP BY region),但 BI 工具会生成标准的 SQL,例如 SELECT region, SUM(totalrevenue) FROM mv GROUP BY region
  • 非聚合查询:BI 工具使用 SELECT * 或非聚合查询来填充数据预览、提取列域或执行“查看数据”操作。 如果没有兼容模式,这些查询会失败,因为度量值需要聚合上下文。

BI 兼容性模式会自动在 Databricks Runtime 中处理所有这些情况。 启用后,它会对指标视图的查询应用以下转换。

聚合重写

应用于度量值列的标准聚合函数会自动重写为 MEASURE()

BI 工具发送 Azure Databricks 重写为
SUM(measure_col) MEASURE(measure_col)
COUNT(measure_col) MEASURE(measure_col)
MAX(measure_col) MEASURE(measure_col)
MIN(measure_col) MEASURE(measure_col)

这意味着指标视图的原始度量定义始终保持不变,无论 BI 工具采用何种聚合函数。 例如,如果度量值被定义为SUM(price * quantity),那么COUNT(total_revenue)AVG(total_revenue)SUM(total_revenue) 都会返回相同的结果,也就是SUM(price * quantity)

分解查询

在没有聚合函数(例如 SELECT *SELECT measure1, measure2 FROM model)的情况下选择度量值列时,将返回 null 值,而不是引发错误。

维度列通常返回其值。 仅影响度量值列。

支持的查询模式

启用 BI 兼容模式时,以下查询模式按预期运行。

情景 示例
基本聚合查询 SELECT dim, SUM(measure) FROM mv GROUP BY dim,重写 SUMMEASURE().
带有度量值的 ORDER BY SELECT region, SUM(total_cost) FROM mv GROUP BY region ORDER BY SUM(total_cost) DESC
具有度量值的 HAVING 子句 SELECT region, SUM(total_cost) FROM mv GROUP BY region HAVING SUM(total_cost) > 20
基于度量值的窗口函数 SUM(SUM(total_cost)) OVER (PARTITION BY region ORDER BY sku)
现有 MEASURE() 调用 如果查询已使用 MEASURE(),则它无需双包装即可运行。
非度量值聚合 在非度量值列(例如 COUNT(DISTINCT sku))上的标准聚合函数按预期工作,并且未被重写。
SELECT * 和非聚合查询 度量列返回 null 值,它支持数据预览和架构发现。

最佳做法

  • 将所有度量值列的默认聚合保留为 SUM。 更改为其他聚合(例如COUNTDISTINCTVARIANCE)可能会导致错误。
  • 不要将度量值用作分类值。 而是将度量列拖动到图形中的数值或定量字段中。

局限性

将 BI 兼容性模式与 Power BI 配合使用时,以下限制适用。

相同的聚合结果

由于SUMCOUNTMIN并且MAX全部重写为 MEASURE(),因此它们返回相同的值。 这有两个副作用:

  • 在数据透视表和矩阵可视化中,汇总总计可能会显示意外值。 例如,选择 COUNT 作为聚合后会显示总计行中的总和。
  • 该聚合 AVG 显示 1.0。 Power BI 将AVG计算为SUM / COUNT在内部。 由于两者都返回相同的度量值,因此结果大致 1相同。

若要避免意外总计和平均值,请使用 SUM Power BI 中所有度量值列的默认聚合。

不支持的聚合引发错误

以下聚合类型发送没有聚合包装器的查询,这些指标视图不支持度量值列:

  • 计数(唯一)
  • 标准偏差
  • 差异
  • 中线

度量值不能用作分类值或维度值

如果将度量值列拖动到轴、图例、GROUP BY或切片器作为分类值时,查询会失败,并出现以下错误:

Measure columns cannot be used in GROUP BY clause or as categorical values. We recommend wrapping them with an aggregate function such as SUM() for the expected behavior.

不应把度量列作为维度、分组字段或筛选对象。

包含多个度量值的计算字段

表达式(例如 SUM(m1 + m2) 合并多个度量列为一个聚合)并且不会被 BI 兼容模式重写。 这些表达式生成错误或意外结果。

Power BI 度量列上的定量切片器悄然失效

度量值列上的定量切片器似乎起作用,但不应用筛选器,因为指标视图不支持将度量值用作筛选器谓词。

维度筛选和切片

使用 BI 兼容模式时,Power BI 视觉对象不支持对维度列执行以下操作:

  • 将筛选器应用于维度
  • 将维度用作切片器控件
  • 视觉对象之间的交叉筛选维度值

其他资源