使用视觉计算(预览版)

注意

视觉计算目前以 预览版提供。

视觉计算是直接在视觉对象上定义和执行的 DAX 计算。 通过视觉计算,可以更轻松地创建以前难以创建的计算,从而简化 DAX、简化维护,带来更好的性能。

下面是一个视觉计算示例,用于定义销售金额的累加和。 请注意,所需的 DAX 非常简单:

Running sum = RUNNINGSUM([Sales Amount])

用于视觉计算的 DAX 的屏幕截图。

计算可以引用视觉对象中的任何数据,包括列、度量值或其他视觉计算,从而消除了语义模型的复杂性,并简化了编写 DAX 的过程。 可以使用视觉计算来完成常见的业务计算,例如累加总和或移动平均。

视觉计算不同于 DAX 中的其他计算选项:

  • 视觉计算不存储在模型中,而是存储在视觉对象上,这意味着视觉计算只能引用视觉对象上的内容。 必须先将模型中的任何内容添加到视觉对象,然后视觉计算才能引用该视觉对象,从而释放视觉计算,使其与筛选器上下文和模型的复杂性相关。

  • 视觉计算将计算列中上下文的简单性与度量值按需计算的灵活性相结合。

  • 与度量值相比,视觉计算对聚合数据(而不是细节级别)进行操作,通常会带来性能优势。 当可以通过新度量值或视觉计算实现计算时,后者通常会带来更好的性能。

  • 由于视觉计算是视觉对象的一部分,因此可以引用视觉结构,从而提高灵活性。

有关在 Power BI 中添加计算方式的更深入比较,请参阅在 Power BI Desktop 中使用计算选项

启用视觉计算后,可以:

  • 向报表添加视觉计算
  • 隐藏某些字段
  • 使用模板快速创建视觉计算
  • 通过引用视觉对象的轴进行灵活的视觉计算

以下部分详细介绍了前面项目符号中描述的每个元素会如何处理视觉计算。

启用视觉计算

若要使用视觉计算,必须在选项和设置>选项>预览功能中启用它。 选择视觉计算,然后选择“确定”。 重启 Power BI Desktop 后,将启用视觉计算。

添加视觉计算

若要添加视觉计算,请选择视觉对象,然后选择功能区中的“新建计算”按钮:

在功能区中选择“新建计算”按钮的屏幕截图。

视觉计算窗口将在“编辑”模式下打开。 “编辑”模式屏幕由三个主要部分组成,如下图所示:

  • 视觉对象预览会显示你正在使用的视觉对象
  • 公式栏,可在其中添加视觉计算
  • 视觉矩阵显示视觉对象中的数据,并在添加视觉计算时显示视觉计算结果

显示视觉计算编辑屏幕各区域的屏幕截图。

若要添加视觉计算,请在编辑栏中键入表达式。 例如,在一个包含按“Fiscal Year”分列的“Sales Amount”和“Total Product Cost”的视觉对象中,只需键入以下内容,即可添加一个视觉计算,计算出每年的利润:Profit = [Sales Amount] – [Total Product Cost]

输入视觉计算的屏幕截图。

默认情况下,视觉对象上的大多数视觉计算会按行计算,如计算列。 在上一个示例中,对于视觉矩阵的每一行,当前销售额总产品成本相减,结果在利润列中返回。 虽然可以,但没有必要像在度量中那样添加 SUM 这样的聚合函数。 事实上,最好不要在不需要聚合时添加此类聚合,因此可以更轻松地区分度量值和视觉计算表达式。

添加视觉计算时,它们将显示在视觉对象的字段列表中:

在视觉对象的字段列表中显示视觉计算的屏幕截图。

此外,视觉对象上还会显示视觉计算:

在视觉对象上显示视觉计算的屏幕截图。

可以在视觉计算中使用许多现有的 DAX 函数。 还可以使用特定于视觉计算的函数。 由于视觉计算在视觉矩阵的范围内工作,因此依赖于模型关系(如 U标准版RELATIONSHIPRELATED 或 RELATEDTABLE)的函数不可用。

隐藏视觉对象中的字段

在视觉计算编辑模式下,可以隐藏视觉对象的字段,就像在建模视图中隐藏列和表一样。 例如,如果只想显示利润视觉计算,则可以从视图中隐藏销售额总利润成本:

隐藏视觉对象视图中元素的屏幕截图。

隐藏字段不会从视觉对象或视觉对象矩阵中删除它们,因此视觉计算仍可以引用它们并继续工作。 隐藏字段仍会显示在视觉矩阵上,但不会显示在生成的视觉对象上。 建议仅在视觉计算正常运行时包含隐藏字段。

使用模板

视觉计算包括模板,以便更轻松地编写常见计算。 可以通过选择模板按钮并选择要使用的模板来查找模板:

使用模板进行视觉计算的屏幕截图。

提供以下模板:

  • 运行求和。 计算值的总和,将当前值与前面的值相加。 使用 RUNNINGSUM 函数。
  • 移动平均。 通过将值的总和除以窗口的大小,计算给定窗口中一组值的平均值。 使用 MOVINGAVERAGE 函数。
  • 父级百分比。 计算相对于其父级的值的百分比。 使用 COLLAPSE 函数。
  • 占总计的百分比。 使用 COLLAPSEALL 函数计算值相对于所有值的百分比。
  • 子级的平均值。 计算子值集的平均值。 使用 EXPAND 函数。
  • 与上一个相比。 使用 PREVIOUS 函数将值与前面的值进行比较。
  • 与下一个相比。 使用 NEXT 函数将值与后续的值进行比较。
  • 与第一个相比。 使用 FIRST 函数将值与第一个值进行比较。
  • 与最后一个相比。 使用 LAST 函数将值与最后一个值进行比较。

选择模板会将模板插入编辑栏中。 可以将这些模板用作起点。 还可以添加自己的表达式,而无需依赖模板。

Axis

许多函数都有一个可选的 Axis 参数,该参数只能在视觉计算中使用。 Axis 影响视觉计算遍历视觉矩阵的方式。 默认情况下,Axis 参数设置为视觉对象中的第一个轴。 对于许多视觉对象,第一个轴为 ROWS,这意味着视觉计算从上到下计算视觉对象矩阵中的逐行计算。 下表显示了 Axis 参数的有效值:

Axis 图标 Axis 名称 说明
ROWS 从上到下垂直计算各行。
COLUMNS 从左到右横向计算各列。
ROWS COLUMNS 从上到下垂直计算各行,然后从左到右横向计算各列。
COLUMNS ROWS 从左到右横向计算各列,然后从上到下垂直计算各行。

注意

只能使用正在处理的视觉对象中可用的轴值。 并非所有视觉对象都提供所有轴,某些视觉对象不提供轴。

Reset

许多函数都有一个可选的 Reset 参数,该参数只能在视觉计算中可用。 在遍历视觉矩阵时,如果函数将其值重置为 0 或切换到其他范围,则 Reset 会影响其值。 默认情况下,Reset 参数设置为“无”,这意味着永远不会重启视觉计算。 重置要求轴上有多个级别。 如果轴上只有一个级别,则可以使用 PARTITIONBY。 以下列表描述了 Reset 参数的唯一有效值:

  • NONE 是默认值,不会重置计算。
  • HIGHESTPARENT 在轴上最高父级的值更改时会重置计算。
  • LOWESTPARENT 在轴上最低父级的值更改时会重置计算。
  • 一个数值,引用轴上的字段,最高字段为一个。

若要了解 HIGHESTPARENT 和 LOWESTPARENT,请考虑具有多个级别的三个字段的轴:Year、Quarter 和 Month。 HIGHESTPARENT 为 Year,而最低父级为 Quarter。 例如,定义为 RUNNINGSUM([Sales Amount], HIGHESTPARENT)RUNNINGSUM([Sales Amount], 1) 的视觉计算,会返回从 0 开始每年的销售额的累加和。 定义为 RUNNINGSUM([Sales Amount], LOWESTPARENT)RUNNINGSUM([Sales Amount], 2) 的视觉计算,会返回从 0 开始每年季度的销售额的累加和。 最后,定义为 RUNNINGSUM([Sales Amount]) 的视觉计算不会重置,并且将继续将每月的销售额值与以前的值相加,而无需重启。

Axis 和 Reset与 ORDERBY 和 PARTITIONBY

Axis、Reset、ORDERBYPARTITIONBY 是四个函数,可用于成对或一起使用以影响计算的计算方式。 它们形成两对,通常成对一起使用:

  • Axis 和 Reset
  • ORDERBY 和 PARTITIONBY

Axis 和 Reset 仅适用于可在视觉计算中使用的函数,并且只能在视觉计算中使用,因为它们会引用视觉结构。 ORDERBY 和 PARTITIONBY 是可用于计算列、度量值和视觉计算并引用字段的函数。 虽然它们执行相同的函数,但它们在提供的抽象级别不同;引用视觉结构比使用 ORDERBY 或 PARTITIONBY 显式引用字段更灵活。

重置要求轴上有多个级别。 如果轴上没有多个级别(要么是因为轴上只有一个字段或一个级别的多个字段)则可以使用 PARTITIONBY。

指定任一对效果都很好,但也可以一起指定 Axis、ORDERBY 和/或 PARTITIONBY,在这种情况下,为 ORDERBY 和 PARTITIONBY 指定的值将替代 Axis 指定的值。 Reset 不能与 ORDERBY 和 PARTITIONBY 结合使用。

可以通过显式指定字段来将 ORDERBY 和 PARTITIONBY 对视为固定字段引用,其中 Axis 和 Reset 是与结构无关的字段,它们指的是结构和结构上正在使用的任何字段。

可用函数

可以在视觉计算中使用许多现有的 DAX 函数。 由于视觉计算在视觉矩阵的范围内工作,因此依赖于模型关系(如 U标准版RELATIONSHIPRELATED 或 RELATEDTABLE)的函数不可用。

视觉计算还引入了一组特定于视觉计算的函数。 其中许多函数更易于使用 DAX 窗口函数的快捷方式。

注意

仅使用下表中提到的视觉计算特定函数。 其他视觉计算特定函数目前仅供内部使用,不应使用。 有关此预览版可用函数的更新情况,请参阅下表。

函数 说明 示例 快捷方式
COLLAPSE 计算在轴的较高级别计算。 父级百分比 = DIVIDE([Sales Amount], COLLAPSE([Sales Amount], ROWS)) 空值
COLLAPSEALL 计算在轴的总级别计算。 总计百分比 = DIVIDE([Sales Amount], COLLAPSEALL([Sales Amount], ROWS)) 空值
EXPAND 计算在轴的较低级别计算。 子级平均值 = EXPAND(AVERAGE([Sales Amount]), ROWS) 空值
EXPANDALL 计算在轴的叶级别计算。 叶级别的平均值 = EXPANDALL(AVERAGE([Sales Amount]), ROWS) 空值
FIRST 指轴的第一行。 ProfitVSFirst = [Profit] – FIRST([Profit]) INDEX(1)
ISATLEVEL 报告指定列是否存在于当前级别。 IsFiscalYearAtLevel = ISATLEVEL([Fiscal Year]) 空值
LAST 指轴的最后一行。 ProfitVSLast = [Profit] – LAST([Profit]) INDEX(-1)
MOVINGAVERAGE 在轴上添加移动平均。 MovingAverageSales = MOVINGAVERAGE([Sales Amount], 2) WINDOW
NEXT 指轴的下一行。 ProfitVSNext = [Profit] – NEXT([Profit]) OFFSET(1)
PREVIOUS 指轴的上一行。 ProfitVSPrevious = [Profit] – PREVIOUS([Profit]) OFFSET(-1)
RANGE 指轴的行的切片。 AverageSales = AVERAGEX(RANGE(1), [Sales Amount]) WINDOW
RUNNINGSUM 在轴上添加一个正在运行的求和。 RunningSumSales = RUNNINGSUM([Sales Amount]) WINDOW

注意事项和限制

视觉计算目前处于预览状态,在预览期间,应注意以下注意事项和限制:

  • 并非所有视觉对象类型都受支持。 使用视觉计算编辑模式更改视觉对象类型。 此外,自定义视觉对象尚未使用视觉计算或隐藏字段进行测试。
  • 已测试以下视觉对象类型和视觉属性,并发现无法处理视觉计算或隐藏字段:
    • 折线图和堆积柱形图
    • 树状图
    • 映射
    • 形状地图
    • Azure 地图
    • 切片器
    • R 视觉对象
    • Python 视觉对象
    • 关键影响因素
    • 分解树
    • 问答
    • 智能叙述
    • 指标
    • 分页报表
    • ArcGIS 地图
    • Power Apps
    • Power Automate
    • 小型序列图
  • 此功能的性能并不代表最终产品。
  • 无法使用复制/粘贴或其他机制重复使用视觉计算。
  • 无法筛选视觉计算。
  • 视觉计算不能以相同或不同的详细信息级别引用自身。
  • 视觉计算或隐藏字段的个性化设置不可用。
  • 无法将发布到 Web功能与使用视觉计算或隐藏字段的报表一起使用。
  • 无法从使用视觉计算或隐藏字段的视觉对象导出基础数据
  • 无法将查看记录钻取功能与使用视觉计算或隐藏字段的视觉对象一起使用。
  • 无法在视觉计算中设置内置或自定义格式字符串
  • 无法对视觉计算应用条件格式
  • 无法对视觉计算设置数据类别
  • 无法在视觉计算上更改聚合
  • 无法更改视觉计算的排序顺序。
  • 使用视觉计算或隐藏字段的报表不支持 Power BI Embedded。
  • 不支持与 SQL Server Analysis Services 的实时连接。
  • 无法将字段参数用于视觉计算。
  • 显示没有数据的项在视觉计算中不可用。

后续步骤

学习和使用视觉计算时,以下文章可能很有用: