计算列允许您将派生数据添加到数据模型中的表中。 不必将值粘贴或导入到列中,而是在 Power Pivot 公式中创建数据分析表达式 (DAX) ,以定义列值。
例如,可能需要将销售利润值添加到 FactSales 表中的每一行。 通过添加新的计算列并使用公式 = [SalesAmount] - [TotalCost] - [ReturnAmount],可通过从 SalesAmount 列的每行值减去 TotalCost 和 ReturnAmount 列中每行的值来计算新值。 然后,可以在数据透视表、数据透视图或其他使用数据模型的分析中使用“利润”列。
此图显示了 Power Pivot 中的计算列。
注意
尽管计算列和度量都依赖于公式,但它们服务于不同的用途。 度量值最常用于数据透视表或数据透视图的 “值” 区域。 如果需要为每行存储计算值,并作为数据透视表、数据透视图、切片器、筛选器、行、列或图表轴中的字段提供,请使用计算列。 有关度量值的详细信息,请参阅 Power Pivot 中的度量值。
了解计算列
计算列中的公式与在 Excel 中创建的公式非常相似。 但是,不能为表中的不同行创建不同的公式。 相反,DAX 公式会自动应用于整个列。
当列包含公式时,它会计算每行的值。 输入公式后,将立即计算列中的值,并在基础数据更改或依赖计算更新时重新计算。
计算列可以引用同一数据模型中的其他计算列和度量。 例如,可以创建一个计算列以从文本字符串中提取一个数字,然后在另一个计算列中使用该数字。
示例
可以使用表中已存在的数据创建计算列。 例如,可以选择连接值、执行加法、提取子字符串或比较其他字段中的值。 若要添加计算列,Power Pivot 中应已拥有至少一个表。
例如:
= EOMONTH ([开始日期], 0)
在下面的示例中,公式使用促销表中 StartDate 列中的值。 然后计算促销表中每一行的月末值。 第二个参数指定 StartDate 中该月之前或之后的月数;在这种情况下,0 表示同月。 例如,如果 StartDate 列中的值为 6/1/2001,则计算列中的值将为 6/30/2001。
命名计算列
默认情况下,新的计算列将添加到其他列的右侧,并自动为该列分配默认名称 CalculatedColumn1、 CalculatedColumn2 等。 创建列后,您可以根据需要重新排列和重命名列。
对计算列的更改有一些限制:
- 每个列名在表中都应该是唯一的。
- 避免使用已用于同一数据模型中的度量值的名称。 若要避免混淆,请在引用列时使用不同的名称和完全限定的列引用。
- 重命名计算列时,还必须更新依赖于现有列的任何公式。 除非处于手动更新模式,否则会自动更新公式结果。 但是,此操作可能需要一些时间。
- 不能在列的名称或其他对象的名称中使用 Power Pivot 中的某些字符。 有关详细信息,请参阅 DAX 语法中的“命名要求”。
重命名或编辑现有计算列
- 在 Power Pivot 窗口中,右键单击要重命名的计算列的标题,然后单击“ 重命名列”。
- 键入新名称,然后按 Enter 接受新名称。
更改数据类型
更改计算列的数据类型的方式与更改其他列的数据类型相同。 如果数据包含不兼容的值,转换可能会失败。
计算列的性能
计算列可能比度量值更占用资源,因为它们的值是针对表中的每一行计算和存储的。 相反,仅针对数据透视表或数据透视图中使用的单元格计算度量值。
例如,具有 100 万行的表始终具有包含 100 万个结果的计算列,并对性能产生相应的影响。 但是,数据透视表通常通过应用行标题和列标题来筛选数据。 这意味着仅针对数据透视表每个单元格中的数据子集计算度量值。
公式依赖于公式中的对象引用,例如计算值的其他列或表达式。 例如,基于另一列的计算列或包含具有列引用的表达式的计算在计算另一列之前,无法计算该列。 默认情况下,启用自动刷新。 请记住,公式依赖项可能会影响性能。
要避免在创建计算列时出现性能问题,请遵循以下准则:
- 与其创建包含许多复杂依赖项的单个公式,不如按步骤创建公式,并将结果保存到列中,以便可以验证结果并评估性能变化。 如果可能,请考虑使用度量值而不是计算列来进行不需要为每一行存储的计算。
- 对数据的修改通常会导致对计算列的更新。 可以通过将重新计算模式设置为手动来防止此行为。 如果重新计算设置为手动,则在刷新并重新计算模型之前,计算列结果可能不会反映最近的数据更改。
- 如果更改或删除表之间的关系,在这些表中使用列的公式将会失效。
- 如果创建的公式包含循环或自引用依赖项,将出现错误。
任务
有关使用计算列的详细信息,请参阅在 Power Pivot 中创建计算列。