使用视觉计算(预览版)
注意
视觉计算目前以 预览版提供。
视觉计算是直接在视觉对象上定义和执行的 DAX 计算。 通过视觉计算,可以更轻松地创建以前难以创建的计算,从而简化 DAX、简化维护,带来更好的性能。
下面是一个视觉计算示例,用于定义销售金额的累加和。 请注意,所需的 DAX 非常简单:
Running sum = RUNNINGSUM([Sales Amount])
计算可以引用视觉对象(包括 columns、度量值或其他视觉对象计算)中的任何数据。 此功能消除了语义模型的复杂性,并简化了编写 DAX 的过程。 可以使用视觉计算来完成常见的业务计算,例如累加总和或移动平均。
视觉计算不同于 DAX 中的其他计算选项:
视觉对象计算不会存储在模型中,而是存储在视觉对象上。 这意味着视觉对象计算只能引用视觉对象上的内容。 必须先将模型中的任何内容添加到视觉对象,然后视觉计算才能引用该视觉对象,从而释放视觉计算,使其与筛选器上下文和模型的复杂性相关。
视觉计算将计算 columns 中上下文的简单性与度量值按需计算的灵活性相结合。
与度量值相比,视觉计算对聚合数据(而不是细节级别)进行操作,通常会带来性能优势。 当可以通过新度量值或视觉计算实现计算时,后者通常会带来更好的性能。
由于视觉计算是视觉对象的一部分,因此可以引用视觉结构,从而提高灵活性。
有关在 Power BI 中添加计算方式的更深入比较,请参阅在 Power BI Desktop 中使用计算选项。
启用视觉计算后,可以:
- 向报表添加视觉计算
- 隐藏某些字段
- 使用模板快速创建视觉计算
- 通过引用视觉对象的轴进行灵活的视觉计算
以下部分详细介绍了 previous 项目符号中描述的每个元素会如何处理视觉计算。
启用视觉计算
2024 年 9 月之前,若要使用视觉计算,必须在“选项和设置”>“选项”>“预览功能”中启用它。 选择视觉计算,然后选择“确定”。 重启 Power BI Desktop 后,将启用视觉计算。
从 2024 年 9 月开始,不再需要此步骤,因为默认情况下启用视觉计算。 虽然它们仍处于预览状态,但可以使用上述设置来禁用视觉计算(如果愿意)。
添加视觉计算
若要添加视觉计算,请选择一个视觉对象,然后选择功能区中的“新建视觉计算”按钮:
视觉计算 window 将在“编辑”模式下打开。 “编辑”模式屏幕由三个主要部分组成,如下图所示:
- 视觉对象预览会显示你正在使用的视觉对象
- 公式栏,可在其中添加视觉计算
- 视觉对象矩阵显示视觉对象中的数据,并在添加视觉对象计算时显示视觉对象计算结果。 应用于视觉对象的任何样式或主题都不适用于视觉对象矩阵。
若要添加视觉计算,请在编辑栏中键入表达式。 例如,在包含 Sales Amount 和 Total Product Cost by Fiscal Year 的视觉对象中,可以通过键入以下内容添加视觉计算来计算每年的利润:
Profit = [Sales Amount] – [Total Product Cost]
默认情况下,视觉对象上的大多数视觉计算会按行计算,如计算列。 在 previous 示例中,对于视觉矩阵的每一行,当前“销售额”和“总产品成本”相减,结果在“利润”列中返回。 虽然可以,但没有必要像在度量中那样添加 SUM 这样的聚合函数。 事实上,最好不要在不需要聚合时添加此类聚合,因此可以更轻松地区分度量值和视觉计算表达式。
添加视觉计算时,它们将显示在视觉对象的字段列表中:
此外,视觉对象上还会显示视觉计算:
可以在视觉计算中使用许多现有的 DAX 函数。 还可以使用特定于视觉计算的函数。 由于视觉计算在视觉矩阵的范围内工作,因此依赖于模型关系(如 U标准版RELATIONSHIP、RELATED 或 RELATEDTABLE)的函数不可用。
隐藏视觉对象中的字段
在视觉计算编辑模式下,可以隐藏视觉对象的字段,就像在建模视图中隐藏 columns 和表一样。 例如,如果只想显示利润视觉计算,则可以从视图中隐藏销售额和总利润成本:
隐藏字段不会从视觉对象或视觉对象矩阵中删除它们,因此视觉计算仍可以引用它们并继续工作。 隐藏的字段仍会显示在视觉对象矩阵上,但不会显示在生成的视觉对象上。 建议仅在视觉计算正常运行时包含隐藏字段。
使用模板
视觉计算包括模板,以便更轻松地编写常见计算。 可以通过选择模板按钮并选择要使用的模板来查找模板:
还可以通过单击“新建视觉计算”按钮的 底部,从功能区创建模板化视觉计算 。
提供以下模板:
- 运行求和。 计算值的总和,将当前值与前面的值相加。 使用 RUNNINGSUM 函数。
- 移动平均。 通过将值的总和除以 window 的大小,计算给定 window 中一组值的平均值。 使用 MOVINGAVERAGE 函数。
- 父级百分比。 计算相对于其父级的值的百分比。 使用 COLLAPSE 函数。
- 占总计的百分比。 使用 COLLAPSEALL 函数计算值相对于所有值的百分比。
- 子级的平均值。 计算子值集的平均值。 使用 EXPAND 函数。
- 与 previous。 使用 PREVIOUS 函数将值与前面的值进行比较。
- 与 next。 使用 NEXT 函数将值与后续的值进行比较。
- 与 first。 使用 FIRST 函数将值与 first 值进行比较。
- 与 last。 使用 LAST 函数将值与 last 值进行比较。
选择模板会将模板插入编辑栏中。 可以将这些模板用作起点。 还可以添加自己的表达式,而无需依赖模板。
Axis
许多函数都有一个可选的 Axis 参数,该参数只能在视觉计算中使用。 Axis 影响视觉计算遍历视觉矩阵的方式。 默认情况下,Axis 参数设置为视觉对象中的 first 轴。 对于许多视觉对象,first 轴为 ROWS,这意味着视觉计算从上到下计算视觉对象矩阵中的逐行计算。 下表显示了 Axis 参数的有效值:
Axis 图标 | Axis 名称 | 说明 |
---|---|---|
ROWS | 从上到下垂直计算 rows。 | |
COLUMNS | 从左到右横向计算 columns。 | |
ROWS COLUMNS | 从上到下垂直计算 rows,然后从左到右横向计算各列。 | |
COLUMNS ROWS | 从左到右横向计算 columns,然后从上到下垂直计算各行。 |
注意
只能使用正在处理的视觉对象中可用的轴值。 并非所有视觉对象都提供所有轴,某些视觉对象不提供轴。
Reset
许多函数都有一个可选的 Reset 参数,该参数只能在视觉计算中可用。 在遍历视觉矩阵时,如果函数将其值重置为 0 或切换到其他范围,则 Reset 会影响其值。 默认情况下,Reset 参数设置为 None,这意味着永远不会重启视觉计算。 重置要求轴上有多个级别。 如果轴上只有一个级别,则可以使用 PARTITIONBY。 以下列表描述了 Reset 参数的唯一有效值:
- NONE 是默认值,不会重置计算。
- HIGHESTPARENT 在轴上最高父级的值更改时会重置计算。
- LOWESTPARENT 在轴上最低父级的值更改时会重置计算。
- 一个数值,引用轴上的字段,最高字段为一个。
若要了解 HIGHESTPARENT 和 LOWESTPARENT,请考虑具有多个级别的三个字段的轴:Year、Quarter 和 Month。 HIGHESTPARENT 为 Year,而最低父级为 Quarter。 例如,以下视觉计算是等效的,并返回每年从 0 开始的 销售额 总和:
RUNNINGSUM([Sales Amount], HIGHESTPARENT)
RUNNINGSUM([Sales Amount], 1)
相比之下,以下视觉计算都返回每季度从 0 开始的销售 金额 总和:
RUNNINGSUM([Sales Amount], LOWESTPARENT)
RUNNINGSUM([Sales Amount], 2)
最后,此视觉计算不会重置,并继续将每月的销售金额值添加到previous值,而无需重启。
RUNNINGSUM([Sales Amount])
Axis 和 Reset 对比 ORDERBY 和 PARTITIONBY
Axis、Reset、ORDERBY 和 PARTITIONBY 这 4 个函数可成对使用或一起使用来影响计算的计算方式。 它们形成两对,通常成对一起使用:
- Axis 和 Reset
- ORDERBY 和 PARTITIONBY
Axis 和 Reset 仅适用于可在视觉计算中使用的函数,并且只能在视觉计算中使用,因为它们会引用视觉结构。 ORDERBY 和 PARTITIONBY 函数可用于计算 columns、度量值和视觉计算并引用字段。 虽然它们执行相同的函数,但它们在提供的抽象级别不同;引用视觉结构比使用 ORDERBY 或 PARTITIONBY 显式引用字段更灵活。
重置要求轴上有多个级别。 如果轴上没有多个级别(要么是因为轴上只有一个字段或一个级别的多个字段)则可以使用 PARTITIONBY。
指定任一对效果都很好,但也可以一起指定 Axis、ORDERBY 和/或 PARTITIONBY,在这种情况下,为 ORDERBY 和 PARTITIONBY 指定的值将替代 Axis 指定的值。 Reset 不能与 ORDERBY 和 PARTITIONBY 结合使用。
可以通过显式指定字段来将 ORDERBY 和 PARTITIONBY 对视为固定字段引用,其中 Axis 和 Reset 是与结构无关的字段,它们指的是结构和结构上正在使用的任何字段。
可用函数
可以在视觉计算中使用许多现有的 DAX 函数。 由于视觉计算在视觉矩阵的范围内工作,因此依赖于模型关系(如 U标准版RELATIONSHIP、RELATED 或 RELATEDTABLE)的函数不可用。
视觉计算还引入了一组特定于视觉计算的函数。 其中许多函数更易于使用 DAX window 函数的快捷方式。
注意
仅使用下表中提到的视觉计算特定函数。 其他视觉计算特定函数目前仅供内部使用,不应使用。 有关此预览版可用函数的更新情况,请参阅下表。
函数 | 说明 | 示例 | 快捷方式 |
---|---|---|---|
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 | 指轴的 first 行。 | ProfitVSFirst = [Profit] – FIRST([Profit]) | INDEX(1) |
ISATLEVEL | 报告指定列是否存在于当前级别。 | IsFiscalYearAtLevel = ISATLEVEL([Fiscal Year]) | 空值 |
LAST | 指轴的 last 行。 | ProfitVSLast = [Profit] – LAST([Profit]) | INDEX(-1) |
MOVINGAVERAGE | 在轴上添加移动平均。 | MovingAverageSales = MOVINGAVERAGE([Sales Amount], 2) | WINDOW |
NEXT | 指轴的 next 行。 | ProfitVSNext = [Profit] – NEXT([Profit]) | OFFSET(1) |
PREVIOUS | 指轴的 previous 行。 | ProfitVSPrevious = [Profit] – PREVIOUS([Profit]) | OFFSET(-1) |
RANGE | 指轴的 rows 的切片。 | AverageSales = AVERAGEX(RANGE(1), [Sales Amount]) | WINDOW |
RUNNINGSUM | 在轴上添加一个正在运行的求和。 | RunningSumSales = RUNNINGSUM([Sales Amount]) | WINDOW |
设置视觉对象计算的格式
可使用数据类型和格式设置选项设置视觉计算的格式。 还可以设置自定义视觉级别格式字符串。 在视觉对象的“格式设置”窗格的“常规”部分中,使用“数据格式”选项设置格式:
注意事项和限制
视觉计算目前处于预览状态,在预览期间,应注意以下注意事项和限制:
- 并非所有视觉对象类型都受支持。 使用视觉计算编辑模式更改视觉对象类型。 此外,自定义视觉对象尚未使用视觉计算或隐藏字段进行测试。
- 已测试以下视觉对象类型和视觉属性,并发现无法处理视觉计算或隐藏字段:
- 树状图
- 切片器
- R 视觉对象
- Python 视觉对象
- 关键影响因素
- 分解树
- 问答
- 智能叙述
- 指标
- 分页报表
- Power Apps
- Power Automate
- 小型序列图
- 散点图上的播放轴
- 此功能的性能并不代表最终产品。
- 无法使用复制/粘贴或其他机制重复使用视觉计算。
- 无法筛选视觉计算。
- 视觉计算不能以相同或不同的详细信息级别引用自身。
- 视觉计算或隐藏字段的个性化设置不可用。
- 无法将发布到 Web功能与使用视觉计算或隐藏字段的报表一起使用。
- 从视觉对象导出数据时,基础数据导出中不包含视觉计算结果。 隐藏字段永远不会包含在导出中,除非导出 基础数据。
- 无法将查看记录钻取功能与使用视觉计算或隐藏字段的视觉对象一起使用。
- 无法对视觉计算应用条件格式。
- 无法对视觉计算设置数据类别。
- 无法在视觉计算上更改聚合。
- 无法更改视觉计算的排序顺序。
- 使用视觉计算或隐藏字段的报表不支持 Power BI Embedded。
- 不支持与 SQL Server Analysis Services 的实时连接。
- 尽管可以对视觉计算使用 字段参数 ,但它们有一些限制。
- 显示没有数据的项在视觉对象计算中不可用。
- 无法将数据限制用于视觉计算。
- 不能在视觉计算上设置动态格式字符串,也不能将视觉计算用作字段或度量值的动态格式字符串。
Next 步
学习和使用视觉计算时,以下文章可能很有用: