了解 DAX 计算类型
通过使用 Data Analysis Expressions (DAX),您可以将三种类型的计算添加到语义模型:
- 计算表
- 计算列
- 度量值
注意
DAX 还可以用于定义行级别安全性 (RLS) 规则,这些规则是对模型表强制执行筛选的表达式。 但是,规则并不被视为模型计算,因此它们不在本模块的范围内。 有关详细信息,请参阅 Power BI 的行级别安全性 (RLS)。
计算表
您可以编写 DAX 公式,以将计算表添加到您的模型。 该公式可以复制或转换现有模型数据,或创建一系列数据,以生成一个新表。 计算表数据始终导入到模型中,因此它会增加模型存储大小并延长数据刷新时间。
注意
计算表无法连接到外部数据;您需要使用 Power Query 来完成该任务。
计算表在各种情况下都很有用:
- 日期表
- 角色扮演维度
- What-if 分析
日期表
日期表需要应用特殊时间筛选器(称为时间智能)。 DAX 时间智能函数仅在设置日期表时才能正确工作。 当源数据不包括日期表时,可以使用 CALENDAR 或 CALENDARAUTO 函数创建一个日期表作为计算表。
角色扮演维度
如果两个模型表具有多个关系,可能是因为您的模型具有角色扮演维度。 例如,如果您有一个名为 Sales 的表,其中包含两个日期列:OrderDateKey 和 ShipDateKey,这两个列都与 Date 表中的 Date 列相关。 在本例中,Date 表描述为角色扮演维度,因为它可以扮演订单日期 或装运日期 角色。
语义模型仅允许表之间存在一个活动关系,该关系在模型图中用一条实线表示。 默认情况下,活动关系用于传播筛选器,在本例中是从 Date 表传播到 Sales 表中的 OrderDateKey 列。 这两个表之间的其余所有关系都是非活动关系。 在模型图中,这些关系用虚线表示。 仅当使用 USERELATIONSHIP 函数在计算公式中明确请求非活动关系时,才会使用这些关系。
也许更好的模型设计可以有两个日期表,每个表都与 Sales 表具有活动关系。 因此,报表用户可以按订单日期或装运日期筛选,或者同时按这两个日期筛选。 计算表可以复制 Date 表数据来创建 Ship Date 表。
What-if 分析
Power BI Desktop 包含一项名为参数的功能。 创建数值范围参数时,计算表将自动添加到模型中。
数值范围参数允许报表用户按存储在计算表中的值进行选择或筛选。 度量值公式可以通过一种有意义的方式使用所选值。 例如,数值范围参数可以允许报表用户选择假设货币汇率,度量值可以将收入值(以本币计算)除以所选汇率。
值得注意的是,参数计算表与其他模型表无关,因为它们不用于传播筛选器。 因此,它们称为断开连接的表。
计算列
您可以编写 DAX 公式以将计算列添加到模型中的任何表。 针对每个表行计算公式,这会返回单一值。 当添加到 Import 存储模式表时,将在刷新语义模型时计算公式,它会增加模型的存储大小。 当添加到 DirectQuery 存储模式表时,在查询表时,由基础源数据库计算公式。
在数据窗格中,计算列通过特殊图标得到增强。 以下示例显示名为 Age 的 Customer 表中的单个计算列。
度量值
您可以编写 DAX 公式以将度量值添加到模型中的任何表。 该公式可实现对模型数据的汇总。 与计算列类似,此公式必须返回单一值。 但是,与计算列不同的是,计算列在数据刷新时进行计算,而度量值在查询时进行计算。 其结果永远不会存储在模型中。
在数据窗格中,度量值会显示有计算器图标。 以下示例显示 Sales 表中的三个度量值:Cost、Profit 和 Revenue。
在某些情况下,度量值可以描述为显式度量值。 明确地说,显式度量值是使用 DAX 编写的模型计算,通常简称为度量值。 然而,也存在隐式度量值 的概念。 隐式度量值是指可通过视觉对象简单汇总的列,例如 count、sum、minimum、maximum 等。 您可以在数据窗格中标识隐式度量值,因为它们显示有西格玛符号 (∑)。
注意
任何列在添加到视觉对象时都可以进行汇总。 因此,无论它们是否显示有西格玛符号,在将它们添加到视觉对象时,都可以将其设置为隐式度量值。
此外,在表格建模中,不存在计算度量值 这样的概念。 计算 一词用于描述计算表和计算列,用于将其与源自 Power Query 的表和列区分开来。 Power Query 没有显式度量值的概念。