计算列
本主题说明如何基于 DAX 示例工作簿中的数据创建“计算列”,并且包括有关在生成公式时如何使用自动完成功能的信息。 有关公式的详细信息,请参阅生成计算的公式。
理解计算列
计算列是添加到现有 PowerPivot 表中的列。 您可以创建用于定义列值的 DAX 公式,而不是在列中粘贴或导入值。 计算列可用于数据透视表、数据透视图或 Power View 报表中,您可以像使用任何其他数据列一样使用计算列。
计算列中的公式非常类似于您在 Excel 中创建的公式。 但与在 Excel 中不同,您不能为表中的不同行创建不同的公式;而是 DAX 公式自动应用于整个列。
在某个列包含公式时,将为每一行都计算值。 一旦创建公式后,将立即为列计算结果。 在需要时(例如,在刷新基础数据时),将重新计算列值。
您可以创建基于度量值和其他计算列的计算列。 例如,您可以创建一个计算列以便从文本字符串中提取一个数字,然后在其他计算列中使用该数字。
创建计算列
计算列基于您已添加到现有表的数据。 例如,您可以选择串联值、执行添加、提取子字符串或比较其他字段中的值。 若要添加某一计算列,您必须已将至少一个表添加到您的 PowerPivot 工作簿中。
此示例演示如何使用自动完成功能生成用于新计算列的简单公式。 公式如下所示:
=EOMONTH([StartDate],0])
该公式从 DAX 示例工作簿的 Promotion 表中的 StartDate 列提取月份。 它然后计算 Promotion 表中每一行的月末值。 第二个参数指定 StartDate 中该月前或该月后的月份数;在这个例子中,0 意味着同一月。 例如,如果 StartDate 列中的值为 6/1/2001,则计算列中的值将是 6/30/2001。
有关示例工作簿的信息,请参阅获取 PowerPivot 示例数据。
注意 |
---|
在 Windows Vista 和 Windows 7 中,PowerPivot 窗口中的功能可从功能区中访问,本主题将对此进行讨论。 在 Windows XP 中,这些功能是从一组菜单中访问的。 如果您使用的是 Windows XP,并且希望了解菜单命令如何与功能区命令相关,请参阅 Windows XP 中的 PowerPivot 用户界面。 |
使用自动完成功能创建计算列 |
|
命名计算列
默认情况下,新的计算列将添加到工作表中其他列的右侧,并且自动向该列分配默认名称 CalculatedColumn1、CalculatedColumn2,依此类推。 在创建列后您可以重新排列和重命名这些列。 请注意对计算列进行更改的以下限制:
每个列名称在表中都必须唯一。
避免使用已用于同一工作簿中的度量值的名称。 尽管度量值和计算列可以具有相同的名称,但是如果名称不唯一,计算将很容易出错。 为了避免无意中调用度量值,在引用列时请始终使用完全限定的列引用。
当您重命名计算列时,必须更新依赖于现有列的所有公式。 如果您没有处于手动更新模式,则更新公式结果将自动发生。 但是,此操作可能要花一些时间。
有一些字符不能用于列名中,或者不能用于 PowerPivot 工作簿的对象名称中。 有关详细信息,请参阅 针对 PowerPivot 的 DAX 语法规范中的“命名要求”。
重命名或编辑现有的计算列 |
|
更改数据类型
您可以更改计算列的数据类型,就像更改所有非计算列的数据类型一样。 您不能进行以下数据类型更改:从 text 到 decimal、从 text 到 integer、从 text 到 currency 以及从 text 到 date。 您可以从 text 更改为 Boolean。
理解计算列的性能
与用于度量值的公式相比,用于计算列的公式可能会消耗更多的资源。 原因之一是:计算列的结果始终是为表中的每一行计算的,而度量值仅是为数据透视表或数据透视图中使用的单元计算的。
例如,某个具有 100 万行的表将始终具有含 100 万个结果的计算列,并且对性能具有相应影响。 但是,数据透视表通常会通过应用行和列标题对数据进行筛选;因此,仅为数据透视表的每个单元中的数据子集计算度量值。
一个公式对于在公式中引用的对象(例如其他列或计算值的表达式)具有依赖关系。 例如,对于基于其他列的计算列,或对于包含引用列的表达式的计算,只有在计算这些相关列之后,才会计算它们。 默认情况下,在工作簿中启用自动刷新;因此,在更新值和刷新公式时,所有此类依赖项都可能会影响性能。
为了避免在创建计算列时出现性能问题,请遵循下列指导原则:
不要创建包含许多复杂依赖关系的单个公式,而应分步创建多个公式并将结果保存到列中,这样您就能够验证结果并评估性能。
修改数据通常要求重新计算计算列。 可以通过将重新计算模式设置为手动来避免上述情况;但是,如果计算列中的任何值不正确,则该列将灰显,直到您刷新并重新计算数据。
如果更改或删除表之间的关系,则使用这些表中的列的公式将会失效。
如果创建了一个包含循环或自引用依赖关系的公式,将会发生错误。