了解 DAX 计算类型

已完成

通过使用 Data Analysis Expressions (DAX),您可以将三种类型的计算添加到语义模型:

  • 计算表
  • 计算列
  • 度量值

注意

DAX 还可以用于定义行级别安全性 (RLS) 规则,这些规则是对模型表强制执行筛选的表达式。 但是,规则并不被视为模型计算,因此它们不在本模块的范围内。 有关详细信息,请参阅 Power BI 的行级别安全性 (RLS)

计算表

您可以编写 DAX 公式,以将计算表添加到您的模型。 该公式可以复制或转换现有模型数据,或创建一系列数据,以生成一个新表。 计算表数据始终导入到模型中,因此它会增加模型存储大小并延长数据刷新时间。

注意

计算表无法连接到外部数据;您需要使用 Power Query 来完成该任务。

计算表在各种情况下都很有用:

  • 日期表
  • 角色扮演维度
  • What-if 分析

日期表

日期表需要应用特殊时间筛选器(称为时间智能)。 DAX 时间智能函数仅在设置日期表时才能正确工作。 当源数据不包括日期表时,可以使用 CALENDARCALENDARAUTO 函数创建一个日期表作为计算表。

角色扮演维度

如果两个模型表具有多个关系,可能是因为您的模型具有角色扮演维度。 例如,如果您有一个名为 Sales 的表,其中包含两个日期列:OrderDateKeyShipDateKey,这两个列都与 Date 表中的 Date 列相关。 在本例中,Date 表描述为角色扮演维度,因为它可以扮演订单日期装运日期 角色。

屏幕截图显示两个表:Sales 和 Date。表之间存在两种关系。只有一个关系是活动关系。

语义模型仅允许表之间存在一个活动关系,该关系在模型图中用一条实线表示。 默认情况下,活动关系用于传播筛选器,在本例中是从 Date 表传播到 Sales 表中的 OrderDateKey 列。 这两个表之间的其余所有关系都是非活动关系。 在模型图中,这些关系用虚线表示。 仅当使用 USERELATIONSHIP 函数在计算公式中明确请求非活动关系时,才会使用这些关系。

也许更好的模型设计可以有两个日期表,每个表都与 Sales 表具有活动关系。 因此,报表用户可以按订单日期或装运日期筛选,或者同时按这两个日期筛选。 计算表可以复制 Date 表数据来创建 Ship Date 表。

屏幕截图显示两个表:Sales 和 Date。“Sales”和“Date”表之间存在一种关系,“Sales”和“Ship Date”表之间也存在一种关系。这两种关系都是活动关系。

What-if 分析

Power BI Desktop 包含一项名为参数的功能。 创建数值范围参数时,计算表将自动添加到模型中。

数值范围参数允许报表用户按存储在计算表中的值进行选择或筛选。 度量值公式可以通过一种有意义的方式使用所选值。 例如,数值范围参数可以允许报表用户选择假设货币汇率,度量值可以将收入值(以本币计算)除以所选汇率。

值得注意的是,参数计算表与其他模型表无关,因为它们不用于传播筛选器。 因此,它们称为断开连接的表

计算列

您可以编写 DAX 公式以将计算列添加到模型中的任何表。 针对每个表行计算公式,这会返回单一值。 当添加到 Import 存储模式表时,将在刷新语义模型时计算公式,它会增加模型的存储大小。 当添加到 DirectQuery 存储模式表时,在查询表时,由基础源数据库计算公式。

数据窗格中,计算列通过特殊图标得到增强。 以下示例显示名为 AgeCustomer 表中的单个计算列。

屏幕截图显示“字段”窗格的一部分。在“Customer”表中,有多个字段。一个带有特殊图标,表示这是计算列。

度量值

您可以编写 DAX 公式以将度量值添加到模型中的任何表。 该公式可实现对模型数据的汇总。 与计算列类似,此公式必须返回单一值。 但是,与计算列不同的是,计算列在数据刷新时进行计算,而度量值在查询时进行计算。 其结果永远不会存储在模型中。

数据窗格中,度量值会显示有计算器图标。 以下示例显示 Sales 表中的三个度量值:CostProfitRevenue

屏幕截图显示“字段”窗格的一部分。在“Sales”表中,有多个字段。三个带有计数器图标,表示它们是度量值。

在某些情况下,度量值可以描述为显式度量值。 明确地说,显式度量值是使用 DAX 编写的模型计算,通常简称为度量值。 然而,也存在隐式度量值 的概念。 隐式度量值是指可通过视觉对象简单汇总的列,例如 count、sum、minimum、maximum 等。 您可以在数据窗格中标识隐式度量值,因为它们显示有西格玛符号 (∑)。

注意

任何列在添加到视觉对象时都可以进行汇总。 因此,无论它们是否显示有西格玛符号,在将它们添加到视觉对象时,都可以将其设置为隐式度量值。

此外,在表格建模中,不存在计算度量值 这样的概念。 计算 一词用于描述计算表和计算列,用于将其与源自 Power Query 的表和列区分开来。 Power Query 没有显式度量值的概念。