表格模型中的计算列允许向模型添加新数据。 无需将值粘贴或导入列,而是创建一个 DAX 公式来定义列的行级别值。 然后,可以在报表、数据透视表或数据透视图中使用计算列,就像任何其他列一样。
注释
在 DirectQuery 模式下的表格模型中不支持计算列。 有关详细信息,请参阅 DirectQuery 模式(SSAS 表格)。
本主题中的部分:
优点
计算列中的公式与 Excel 中的公式非常类似。 但是,与 Excel 不同,不能为表中的不同行创建不同的公式;相反,DAX 公式会自动应用于整个列。
当列包含公式时,将为每一行计算值。 当您输入有效公式时,将计算列的结果。 然后根据需要重新计算列值,例如刷新基础数据时。
您可以创建计算列,这些计算列基于度量值和其他计算列。 例如,可以创建一个计算列来从文本字符串中提取数字,然后在另一个计算列中使用该数字。
计算列是基于现有表中的已有数据或通过使用 DAX 公式创建的。 例如,可以选择连接值、执行加法、提取子字符串或比较其他字段中的值。 若要添加计算列,必须在模型中至少有一个表。
此示例演示计算列中的简单公式:
=EOMONTH([StartDate],0])
此公式从 StartDate 列中提取月份。 然后,计算表中每一行的月结束值。 第二个参数指定 StartDate 中月份之前或之后的月份数;在本例中,0 表示同一个月。 例如,如果 StartDate 列中的值为 2001 年 6 月 1 日,则计算列中的值将为 2001/6/30。
命名计算列
默认情况下,新的计算列将添加到表中其他列的右侧,并且会自动为该列分配 CalculatedColumn1、 CalculatedColumn2 等的默认名称。 还可以右键单击列,然后单击“插入列”,在两个现有列之间创建新列。 可以通过单击和拖动重新排列同一表中的列,并且可以在创建列后重命名列;但是,应注意对计算列的更改的以下限制:
每个列名在表中必须是唯一的。
避免已用于同一模型中度量值的名称。 尽管度量值和计算列可以具有相同的名称,但如果名称不唯一,则会收到计算错误。 为了避免意外调用度量值,引用列时始终使用完全限定的列引用。
重命名计算列时,必须手动更新依赖于该列的任何公式。 除非处于手动更新模式,否则会自动更新公式的结果。 但是此操作可能会需要一些时间。
列名称中不能使用某些字符。 有关详细信息,请参阅 PowerPivot DAX 语法规范中的“命名要求”。
计算列的性能
计算列的公式比用于度量值的公式更资源密集型。 一个原因是,计算列的结果总是对表中的每一行进行计算,而度量则仅对报表、数据透视表或数据透视图中使用的筛选器定义的单元格进行计算。 例如,具有百万行的表将始终具有具有百万个结果的计算列,并相应影响性能。 但是,数据透视表通常通过应用行标题和列标题来筛选数据;因此,仅针对数据透视表的每个单元格中的数据子集计算度量值。
公式依赖于公式中引用的对象,例如计算值的其他列或表达式。 例如,基于另一列的计算列或包含具有列引用的表达式的计算列,在计算其他列之前无法计算。 默认情况下,在工作簿中启用自动刷新;因此,在更新值并刷新公式时,所有此类依赖项都可能会影响性能。
若要避免在创建计算列时出现性能问题,请遵循以下准则:
与其创建包含许多复杂依赖项的单个公式,不如使用保存到列的结果创建步骤中的公式,以便可以验证结果并评估性能。
修改数据通常需要重新计算计算列。 可以通过将重新计算模式设置为手动来阻止这种情况;但是,如果计算列中的任何值不正确,则列将灰显,直到刷新并重新计算数据。
如果更改或删除表之间的关系,使用这些表中列的公式将失效。
如果创建包含循环或自引用依赖项的公式,将发生错误。
相关任务
主题 | DESCRIPTION |
---|---|
创建计算列 (SSAS 表格) | 本主题中的任务介绍如何向表添加新的计算列。 |