创建计算组

通过允许将数据分析表达式(DAX)公式定义为计算项,计算组可以显著减少必须创建的冗余度量值数。 计算项可以应用于模型中的现有度量值。 有关计算组的详细信息,请参阅计算组一文。

在模型视图中添加新的计算组

Power BI 中,编辑语义模型时,导航到 “模型”视图 并选择功能区中的 “计算组 ”按钮。 如果尚未在模型资源管理器中,“数据”窗格将打开到“模型”视图。

功能区中计算组按钮的屏幕截图。

如果阻止隐式度量值属性处于关闭状态,系统会提示你打开一个对话框窗口以启用计算组的创建。

提示启用隐式度量值的对话框窗口的屏幕截图。

隐式度量值发生在报表视图中,直接在视觉对象中使用数据窗格中的数据列。 视觉对象允许将其聚合为一个SUMAVERAGEMINMAX或一些其他基本聚合,从而成为隐式度量值。 将计算组添加到模型时,Power BI 不再显示数据窗格中数据列旁边的求和符号,并阻止将数据列直接作为值添加到视觉对象,从而阻止创建隐式度量值。 已在可视化中创建的现有隐式度量将继续发挥作用。 必须启用“阻止隐式度量值”属性,因为计算项不适用于隐式度量值。 计算项仅适用于度量值或显式度量值。

报表视图和隐式度量值创建的屏幕截图。

在创建新度量值并定义 DAX 表达式以聚合数据列时,将发生度量值或显式度量值。 显式度量值还可以有条件逻辑和筛选器,充分利用 DAX 可以执行的操作。 教程:了解如何在 Power BI Desktop 中创建自己的度量值

注意

对于不希望计算项更改的度量值的情况,可以写入计算项表达式来忽略按名称或数据类型的度量值。

当选择“是”启用禁止隐式度量属性后,一个计算组将被添加,您可以开始在 DAX 公式栏中定义第一个计算项的 DAX 表达式。 如果已启用 阻止隐式度量,对话框将不会显示。

SELECTEDMEASURE 是一个 DAX 函数,充当计算项表达式中度量值的占位符。 可以从其文章中了解 SELECTEDMEASURE DAX 函数

DAX 编辑栏和计算组的屏幕截图。

使用 Power BI TMDL 视图添加计算组

可以在 Power BI Desktop 的表格模型定义语言或 TMDL 视图中 创建计算组。 编辑语义模型并使用此 TMDL 脚本。

createOrReplace

	table 'Calculation group'

		calculationGroup
			precedence: 1

			calculationItem 'Calculation item' = SELECTEDMEASURE()

		column 'Calculation group column'
			dataType: string
			summarizeBy: none
			sourceColumn: Name
			sortByColumn: Ordinal

			annotation SummarizationSetBy = Automatic

		column Ordinal
			dataType: int64
			formatString: 0
			summarizeBy: sum
			sourceColumn: Ordinal

			annotation SummarizationSetBy = Automatic

时间智能示例

Analysis Services 表格模型中的计算组有一个时间智能示例,可用于填充某些计算项。 该示例可以添加到具有 Date 表的任何模型,也可以从 DAX 示例模型 -DAX 下载 Adventure Works DW 2020 PBIX。

重命名计算组

若要重命名计算组,请在“数据”窗格中双击它,也可以选择它并使用“属性”窗格。

如何重命名计算组的屏幕截图。

重命名计算组列

若要重命名计算组列,请在“数据”窗格中双击它,也可以选择它并使用“属性”窗格。 您选择的列是在可视化或切片器中用于应用特定计算项的列。

如何重命名计算组列的屏幕截图。

重命名计算项

第一个计算项创建为 SELECTEDMEASURE(),因此也可以双击或使用“属性”窗格重命名它。

如何重命名计算项的屏幕截图。

创建更多计算项

若要创建更多计算项,可以使用“计算项”部分或计算组本身的右键单击上下文菜单,然后选择“新建计算项”,或使用“计算项”部分的“属性”窗格

如何创建新计算项的屏幕截图。

添加所有时间智能计算项后,计算组如下图所示。

包含所有时间智能计算项的计算组的屏幕截图。

请注意指示错误的红色三角形图标。 存在这些错误是因为示例 DAX 表达式使用名为 DimDate 的 Date 表,因此我需要更新 DAX 表达式以改用名称 Date。 下图显示了更正之前的 DAX 表达式。

不正确的 DAX 表达式的屏幕截图。

对 DAX 表达式进行更正后,错误就会消失。

更正后的 DAX 表达式的屏幕截图。

在计算项中对每个错误进行更正后,不再显示红色三角形警告图标。

计算项区域中更正后的 DAX 表达式的屏幕截图。

重新排序计算项

若要以所需的任何逻辑方式对计算项重新排序,可以在“属性”窗格中选择“计算项”部分,或右键单击计算项的上下文菜单,在列表中向上或向下移动计算项。

重新排序计算项的屏幕截图。

将动态格式字符串添加到计算项

默认情况下,计算项使用基础度量值格式。 我们可能需要改为将 YOY% 显示为百分比。 为此,请选择 YOY% 计算项,然后在属性窗格中打开“动态格式字符串”,这样就可以指定 DAX 表达式来创建格式字符串。 对于此示例,它不需要任何条件元素,因此只需 #,##0.00% 将此计算项应用时的格式更改为百分比,如下图所示。

更改基础数据项的格式的屏幕截图。

在报表中使用计算组

若要在报表中使用新的计算组,请转到报表视图,创建矩阵视觉对象并添加以下内容:

  1. 日期表到行的月份
  2. 从时间智能计算组到列的时间计算
  3. Orders 度量值到值

注意

如果在模型中未创建度量Orders,可以使用其他度量,或者转到功能区,选择新建度量,以使用此 DAX 表达式来创建。

Orders = DISTINCTCOUNT('Sales Order'[Sales Order])

下图显示了生成视觉对象。

在报表中使用计算组的屏幕截图。

矩阵视觉对象中列的计算项显示按每个计算项分组的度量 Orders 的顺序。 还可以通过将计算组列添加到切片器视觉对象,将单个计算项应用于多个度量值。

将单个计算项应用于多个度量值的屏幕截图。

在度量值中使用计算项

可以通过使用应用于特定度量值的计算项的表达式来创建新度量值。

若要创建 [Orders YOY%] 度量值,可以将计算项与 CALCULATE 配合使用。

Orders YOY% = 
    CALCULATE(
        [Orders],
        'Time Intelligence'[Time Calculation] = "YOY%"
    )

设置计算组优先级

最后,如果将更多计算组添加到模型,则可以指定它们应用于具有优先属性的度量值的顺序。 可以在 “计算组”部分 属性窗格中调整计算组优先级,如下图所示。

设置计算组优先级的屏幕截图。

可以在 Analysis Services 表格模型中的“计算组”文章中了解有关计算组优先级的详细信息。

运算组的选择式

可以为计算组设置选择表达式,以对计算组返回的内容进行细致控制。这样,当用户进行多个选择、无效选择或没有进行任何选择时,您都可以精确地管理计算组的返回结果。 请参阅 选择表达式

注意事项

模型指标更改为变体数据类型

将计算组添加到语义模型后,Power BI 报表会为所有度量值使用 变体 数据类型。 如果之后,将从模型中删除所有计算组,度量值将再次还原为其原始数据类型。

变体数据类型可能导致使用度量值的度量值动态格式字符串时出现错误。 使用 FORMAT DAX 函数强制将变体度量值再次识别为字符串数据类型。

FORMAT([Dynamic format string], "")

或者,可以将表达式重新用于具有 DAX 用户定义函数 的动态格式字符串。

当计算项对非数值进行数学运算时,出现视觉呈现错误。

非数值度量值通常用于视觉对象中的动态标题和度量值的动态格式字符串。 错误 无法将类型为“文本”的值转换为“数值”类型的消息显示在受影响的可视化对象上。 计算项表达式可以通过添加检查来避免此错误,以查看度量值是否为数值,然后再应用数学运算。 在计算项中使用 ISNUMERIC

Calculation item safe = 
    IF ( 
        // Check the measure is numeric
        ISNUMERIC( SELECTEDMEASURE() ),
            SELECTEDMEASURE() * 2,
            // Don't apply the calculation on a non-numeric measure
            SELECTEDMEASURE()
        )

以下文章提供了更多有关数据模型的信息,并详细介绍了 DirectQuery。

DirectQuery 文章: