使用 DAX 查询视图

在 Power BI 中使用 DAX 查询视图,可以在语义模型中查看和使用 Data Analysis Expressions (DAX) 查询。

DAX 查询

在 Power BI 中,DAX 公式用于为数据定义不同类型的计算,也可用于定义角色安全性。 另一方面,DAX 查询可用于从模型返回数据。

DAX 查询类似于 SQL 查询,因为它们可以显示你已有的数据。 DAX 查询不会在模型中创建项,也不会在报表中创建视觉对象。

DAX 查询有两个主要部分:

  • EVALUATE 语句,此部分为必需。 它指定查询中返回的数据和返回的方式。
  • DEFINE 语句,此部分为可选。 它用于定义要在查询中使用的 DAX 公式,例如度量值。 使用 DAX 查询 DEFINE MEASURE 创建或更新的度量值是 DAX 查询范围的度量值,仅在 DAX 查询的上下文中运行。 可以使用 CodeLens 更新模型操作或“通过更改更新模型”按钮,将 DAX 查询范围的度量值添加到模型。

若要详细了解查询的使用方式,请参阅 DAX 参考中的 DAX 查询

打开 DAX 查询视图

在 Power BI Desktop 中,选择左侧的“DAX 查询视图”图标。

Power BI Desktop 中的 DAX 查询视图图标的屏幕截图。

在 Power BI 服务或 Fabric 门户工作区中,从上下文菜单中选择“写入 DAX 查询”

在 Power BI 服务或 Fabric 门户语义模型详细信息页面中,从页面顶部选择“写入 DAX 查询”

DAX 查询视图布局

让我们更深入地了解 Power BI Desktop 中的 DAX 查询视图。

显示 DAX 查询视图布局的关系图。

DAX 查询视图包含以下元素:

功能区

DAX 查询视图功能区具有编写 DAX 查询时使用的常见操作。

DAX 查询视图功能区的屏幕截图。

让我们仔细了解一下功能区中的元素:

设置查询格式

选择“设置查询格式”功能区按钮,或使用 SHIFT+ALT+F 设置当前查询的格式。 查询使用制表符进行缩进。 DAX 函数将改为 UPPERCASE,并会添加其他行。 设置 DAX 查询的格式被视为是最佳做法,可提高 DAX 查询可读性。 设置格式时还可以通过折叠和展开查询各部分的方式进行缩进。

“格式化查询”按钮的屏幕截图。

注释和取消注释

选择“注释”功能区按钮,将双反斜杠 (//) 添加到光标所在行或所有选定行的开头。 此操作会注释掉行,当运行 DAX 查询时,将忽略这些行。

选择“取消注释”功能区按钮,移除光标所在的任意行或所有选定行的开头的 //。 它不适用于添加多个行注释表示法的行。

还可以使用 Ctrl+/ 在注释和取消注释之间切换。

DAX 查询视图功能区中“注释”和“取消注释”按钮的屏幕截图。

查找和替换

选择“查找”功能区按钮或使用 Ctrl+F 在 DAX 查询编辑器中搜索文本。 查找包含多个选项,如区分大小写、整字匹配、使用正则表达式,以及循环浏览当前查询的所有匹配项。 还可以选择“查找”框左侧的 V 形进入“替换”。

DAX 查询视图功能区中“查找”按钮的屏幕截图。

选择功能区中的“替换”按钮,或使用 CTRL+H 在 DAX 查询编辑器中搜索和替换文本。 替换也包括多个选项,如保留大小写、一次替换一个或全部替换。

DAX 查询视图功能区中“替换”功能的屏幕截图。

命令面板

选择“命令面板”功能区按钮或使用 CTRL+ALT+P 打开命令面板框。 可以搜索其他 DAX 查询编辑器操作并查看其关联的键盘快捷方式。

DAX 查询视图命令面板的屏幕截图。

命令栏

DAX 查询视图命令栏包含使用 DAX 查询视图时最重要的操作。

运行和取消

运行”按钮执行 DAX 查询或查询的选定行。 运行查询后的状态将显示在下方的状态栏中。

DAX 查询视图命令栏的屏幕截图。

查询运行时,该按钮将变为“取消”按钮,可用于停止正在运行的查询。

DAX 查询视图取消的屏幕截图。

通过更改更新模型

点击“通过更改更新模型”按钮,系统将使用 DAX 查询范围的度量值的 DAX 公式添加或覆盖模型度量值。 DAX 查询范围的度量值是 DEFINE MEASURE 块中的度量值。 或者,可以选择使用出现在每个度量值上方的 CodeLens 文本单独添加或覆盖模型度量值。

DAX 查询编辑器

DAX 查询视图包括查询编辑器,可在其中编写和编辑查询。 这不仅仅是一个更大的 DAX 公式栏。 它的功能更强大,与 VS Code 中提供的 DAX 编辑器有很多相似之处。

DAX 查询编辑器具有以下元素:

建议和 Intellisense

键入查询,并在编辑时获取有关建议和 Intellisense 的帮助。

DAX 查询编辑器 Intellisense 的屏幕截图。

使用 ENTER 或 TAB 添加突出显示的 Intellisense,或使用 SHIFT+ENTER 或 ALT+ENTER 移动到另一行,而无需添加 intellisense 选项。 选择 ESC 可关闭任何覆盖层。

悬停可查看度量值公式

当 DAX 查询中包含度量值时,可以将鼠标悬停在上面以查看公式、名称和说明。

悬停鼠标以查看度量值公式功能的屏幕截图。

选择可查看度量值灯泡快速操作

在没有 DEFINE 语句的查询中,选择 EVALUATE 语句中的度量值将显示快速操作灯泡。 选择“定义”或“使用引用定义”以使用此度量值的公式(带或不带引用度量值 DAX 公式)创建 DEFINE 语句。

使用 CodeLens 更新模型度量值

创建度量值时,使用 DEFINE MEASURE 很有帮助,因为这样就可以首先将度量值创建为 DAX 查询范围的度量值。 可以在一个窗口中编辑多个度量值,然后运行查询以查看所有度量值的结果,或者通过特定组(按列划分)仅查看其中某些结果。 无需在报表视图中创建表视觉对象并在度量值公式之间来回切换。 CodeLens 在功能上更进一步,当模型中已存在度量值时它会提供提示,如果不存在度量值,它还可以进行添加。

CodeLens 是显示在 DEFINE MEASURE 块上方的可单击文本。 对于模型中尚不存在的 DAX 查询范围的度量值,“更新模型:添加新度量”CodeLens 会出现。单击该文本时,系统会添加模型度量值。 对于模型中已存在的 DAX 查询范围的度量值,当 DAX 范围的度量值 DAX 公式不同时,“更新模型:覆盖度量值”CodeLens 会出现。单击该文本时,系统会将模型度量值更改为此 DAX 公式。

或者,可以通过单击“命令”栏中的“通过更改更新模型”按钮,一次性添加或覆盖多个度量值。

度量值更新工作流

灯泡快速操作和 CodeLens 可以在完整的工作流中一起使用:

  1. 在度量值的上下文菜单中,选择“快速查询”,然后选择“评估”,以便在新的“查询”选项卡中为你创建查询。
  2. 选择查询中的度量值以定义或使用引用定义,从而添加 DEFINE 语句。
  3. 对度量值进行表达式更新,然后运行 DAX 查询以显示更改。
  4. 如果更改按预期显示,则使用 CodeLens 更新模型:覆盖度量值以将其保存回模型。

以下方法可以更直观地了解工作流:

工作流的示意图。

结果网格

运行查询时,结果将显示在“结果”网格中。

结果网格的屏幕截图。

如果查询编辑器中有多个 EVALUATE 语句,则可以返回多个结果。 可以使用“结果”下拉列表在各个结果之间切换。 “复制”按钮将整个网格复制为带标题的制表符分隔的表。 可以使用右上角箭头调整网格大小,也可以使用结果网格和查询编辑器之间的边框上的光标进行手动调整。

如果查询导致错误,结果网格会显示该错误。

结果网格中错误消息的屏幕截图。

复制按钮会将错误发送到剪贴板。 错误的开头指示查询中错误的位置。 在上图中,错误为:

“查询 (4, 23) 无法确定“Sales 2”的值。该列不存在,或者此列没有当前行。”

查询 (4, 23)”表示错误位于第 4 行,第 23 个字符处。

查询选项卡

DAX 查询视图可以有多个查询选项卡,可以重命名或移除这些选项卡。 它们还会显示查询的当前状态。

“查询”选项卡的屏幕截图。

每个选项卡都包含状态指示器:

  • 在运行查询之前,不会显示任何指示器。
  • 绿色选中标记表示查询运行成功。
  • 红叉表示发生了错误。
  • 包含实心方块的圆圈表示查询已取消。
  • 时钟指示查询正在运行。

查询可以在后台运行,使你能够继续处理其他查询选项卡。

保存 DAX 查询

从 Power BI Desktop 保存时,DAX 查询视图查询选项卡将保存在文件中,因此可以在再次打开文件时从离开的位置继续。 如果使用开发人员模式保存 Power BI 项目,则每个查询选项卡将作为 .dax 文件包含在语义模型文件夹的 DAXQueries 文件夹中,或者如果在实时连接报表中创建选项卡,则将包含在报表文件夹中。 在 Power BI 开发人员模式文档中查看详情。

目前,无法查看或编辑以前在 Power BI 服务的 Power BI Desktop 中添加的 DAX 查询。 报表或语义模型的查看者看不到随语义模型一起保存的 DAX 查询。

从 Power BI 服务或 Fabric 门户写入 DAX 查询时,DAX 查询视图选项卡在关闭时会被丢弃。

“数据”窗格

数据”窗格显示模型中的项,以帮助编写查询。 查询视图中阻止了其中大多数项的编辑路径。

快速查询

数据”窗格上下文菜单包括“快速查询”。 使用快速查询在表、列和度量值的新查询选项卡中创建查询。 快速查询旨在提高常见任务的工作效率,并且可以轻松地进一步修改这些任务。 所有快速查询都是在新查询选项卡中创建的,并且会自动运行。

任何位置
  • 定义模型中 的所有度量值会创建一个查询,其中包含查询中显示的所有度量值公式。 轻松搜索所有度量值公式。

  • 定义新度量值 会创建包含定义度量值块的查询。 使用此函数可在 DAX 查询视图中创建自己的度量值,然后在准备就绪时添加到模型。

  • “显示前 100 行”通过使用 SELECTCOLUMNS() 创建查询来显示表的前 100 行。 列显示在每一行中,支持通过注释掉行来轻松修改。 还包含 ORDER BY 以指定排序顺序。

    显示前 100 行的屏幕截图。

  • “显示列统计信息”会创建一个查询,其中显示表中每一列的统计信息。 请参阅多个公式,了解如何将列聚合为 MIN、MAX、AVERAGE、COUNT 等。

  • “定义此表中的所有度量值”会创建一个查询,其中包含查询中显示的此表的度量值公式。

  • “显示数据预览”使用 DISTINCT() 创建查询以查看列的值。

    显示数据预览的屏幕截图。

  • “显示列统计信息”会创建一个查询,其中显示此特定列的统计信息。 请参阅多个公式,了解如何将列聚合为 MIN、MAX、AVERAGE、COUNT 等。 返回的查询因列的数据类型而异,将显示数字、文本和日期列的不同统计信息。

    显示列预览的屏幕截图。

度量值
  • “计算”将创建一个查询以显示度量值的结果。 SUMMARIZECOLUMNS() 用于按列添加任何组,以按特定组(如国家/地区、产品等)显示度量值。

    评估度量值的屏幕截图。

  • “定义和计算”将创建一个查询来显示度量值的结果,并在可修改的 DEFINE 语句中显示度量值的公式。

    定义和评估度量值的屏幕截图。

  • “使用引用定义并计算”将创建一个查询来显示度量值的结果,并且不仅会在可修改的 DEFINE 语句中显示度量值公式,还会显示度量值公式中引用的任何其他度量值。 编辑度量值的完整上下文中的任何部分。

    使用引用和评估定义的屏幕截图。

从性能分析器获取可视化 DAX 查询

报表视图中的视觉对象将通过创建 DAX 查询从模型获取数据。 可以使用性能分析器在 DAX 查询视图中查看视觉查询。 性能分析器可以让你深入了解视觉对象可能显示意外值的原因,或者只是作为快速启动查询的一种方式来对查询做进一步更改。

在“报表视图”中,转到“优化”功能区,然后选择“性能分析器”。 选择“开始录制”,然后选择“刷新视觉对象”。 在下表中,展开视觉对象以查看用于复制查询或在 DAX 查询视图中运行的选项。 在 DAX 查询视图中选择“运行”获取可视化查询,将其添加为 DAX 查询视图中的新“查询”选项卡,然后运行它。

性能分析器功能中视觉 DAX 查询的屏幕截图。

Power BI Desktop 中的 DAX 查询视图和实时连接

若已在 OneLake 数据中心中选择语义模型,则可单击“连接”,将 Power BI Desktop 实时连接到已发布的 Power BI 语义模型。 在“报表”视图的右下角,将显示“实时连接到 Power BI 语义模型”。 DAX 查询视图可用于在实时连接时编写 DAX 查询。

模型度量值

实时连接到已发布的 Power BI 语义模型时,无法查看或编辑模型度量值。 “快速查询”选项仅限于“评估”

报表度量值

实时连接到已发布的 Power BI 语义模型时,可以创建报表度量值。 可以使用“报表”和“模型”视图中的“新建度量值”操作创建报表度量值,但顾名思义,这些度量值只能在当前报表中使用。 创建后,DAX 查询视图中的“快速查询”会显示用于定义引用和评估的选项。 DAX 查询在语义模型上运行,因此报表度量值必须始终转换为 DEFINE MEASURE 块中要运行的 DAX 查询范围的度量值,因为它们在模型本身中不存在。

“通过更改更新模型”按钮和 CodeLens“更新模型”选项不适用于报表度量值。

Web 中的 DAX 查询视图

从已发布的语义模型编写 DAX 查询使用 Web 中的 DAX 查询视图。 Web 中的 DAX 查询视图与 Power BI Desktop 中的体验相同,但有几种例外情况。

  • 用户可在 Power BI 服务(预览版)中编辑数据模型,需要启用 Power BI 工作区设置才能编写 DAX 查询。 请参阅在 Power BI 服务中编辑数据模型,了解更多信息。
  • DAX 查询会在关闭时被丢弃。 Power BI Desktop 中的 DAX 查询会被保存到模型中,语义模型可能已将 DAX 查询保存在模型中。 Web 中的 DAX 查询视图当前不会显示语义模型中可能存在的任何以前保存的 DAX 查询,并且在关闭浏览器后系统不会保留在 Web 中创建的查询。
  • 写入 DAX 查询需要对语义模型具有写入权限。 工作区查看器必须使用与语义模型实时连接的 Power BI Desktop,才能编写 DAX 查询。

注意事项和限制

需记住的注意事项:

  • 在 DAX 查询编辑器中输入 500 个以上的行时将出现明显的延迟。
  • 仅当查询选项卡中没有 DEFINE 语句时,才会显示度量值的灯泡快速操作。
  • 命令面板显示一些尚不起作用的命令。
  • 结果网格尚未显示具有指定格式的列和度量值,例如货币和千位整数等。
  • 从 Power BI 服务下载此文件不包括在已发布的语义模型中保存的 DAX 查询。
  • 从工作区设置初始 Git 集成不包括在已发布的语义模型中保存的 DAX 查询。 在 Fabric Git 集成了解详情。

还有一些限制需要注意:

  • 每个查询的数据大小最多不超过 15MB。 超过 15MB 后,会完成当前行,但不会写入其他行。
  • 每个查询最多包含 1,000,000 个值。 如果查询 20 列,可以返回最多 50,000 行(100 万行除以 20)。
  • 当度量值超过 500 时,定义此表或模型中的所有度量值不可用。

在 Web 中运行 DAX 查询还有其他限制:

  • 每个查询最多返回 99,999 行。
  • 对语义模型的写入权限。 具有生成权限的查看者可以使用 Power BI Desktop 实时连接并使用 DAX 查询视图来运行 DAX 查询。
  • 仅适用于非默认语义模型。 可以使用 Power BI Desktop 实时连接到默认语义模型,并使用 DAX 查询视图运行 DAX 查询。
  • 用户可在 Power BI 服务(预览版)中编辑数据模型,需要启用 Power BI 工作区设置才能编写 DAX 查询。 请参阅在 Power BI 服务中编辑数据模型,了解更多信息