创建计算列

本主题说明如何基于 DAX 示例工作簿中的数据创建“计算列”,并且包括有关在生成公式时如何使用自动完成功能的信息。有关公式的详细信息,请参阅为计算生成公式

理解计算列

计算列是添加到现有 PowerPivot 表中的列。您可以创建用于定义列值的 DAX 公式,而不是在列中粘贴或导入值。计算列可用于数据透视表或数据透视图中,您可以像使用任何其他数据列一样使用计算列。

计算列中的公式非常类似于您在 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 用户界面

使用自动完成功能创建计算列

  1. 在 PowerPivot 窗口中,单击包含 Promotion 表的选项卡。为了看到 Promotion 选项卡,您可能需要单击显示的选项卡右侧的向下箭头。

  2. 在 PowerPivot 窗口中的“设计”选项卡上,在“列”组中单击“添加”

    “添加列”将在最右侧的空列之上突出显示,并且光标将移到公式栏。

  3. 键入一个等号,然后单击函数按钮 (fx)。

  4. 由于 EOMONTH 是日期和时间函数,因此从“选择类别”下拉列表中选择“日期和时间”

    “插入函数”对话框中提供的 DAX 函数按类别分组。可以通过选择“全部”来查看可用函数的完整列表。

    • 按下 Tab 键可以在函数类别的下拉列表、函数的下拉列表以及“确定”“取消”按钮之间移动。

    • 按向上和向下箭头键可以选择函数类别或单个函数。

    • 在您选择每个函数时,PowerPivot 将显示该函数的帮助,包括函数说明以及必需参数和可选参数的列表。

  5. “选择函数”下拉列表中,选择 EOMONTH,然后单击“确定”

    公式栏将更新以显示该函数和左括号,并且光标将自动定位在您将键入下一个参数的位置。

    =EOMONTH( 

    公式栏下的工具提示指示 EOMONTH 函数需要两个参数,第一个是日期,第二个是表示月份的数值。

  6. 键入一个左括号 [,以便显示当前表中的列的列表。

    提示:如果该列位于另一个表中,则键入该列所属的表名称的前几个字母,然后从列表中选择完全限定列名。

    对于此示例,从列表中选择 [StartDate] 并按 Tab 键。

    列名将插入到公式中,如下所示:

    =EOMONTH ([StartDate]
  7. 键入逗号和值 0,然后键入右括号。

    最终的公式应如下所示:

    =EOMONTH([StartDate], 0)
  8. 按 Enter 键以接受该公式。

    整个列将用该公式以及为每一行计算的值填充。

命名计算列

默认情况下,新的计算列将添加到工作表中其他列的右侧,并且自动向该列分配默认名称 CalculatedColumn1、CalculatedColumn2,依此类推。在创建列后您可以重新排列和重命名这些列。请注意对计算列进行更改的以下限制:

  • 每个列名称在表中都必须唯一。

  • 避免使用已用于同一工作簿中的度量值的名称。尽管度量值和计算列可以具有相同的名称,但是如果名称不唯一,计算将很容易出错。为了避免无意中调用度量值,在引用列时请始终使用完全限定的列引用。

  • 当您重命名计算列时,必须更新依赖于现有列的所有公式。如果您没有处于手动更新模式,则更新公式结果将自动发生。但是,此操作可能要花一些时间。

  • 有一些字符不能用于列名中,或者不能用于 PowerPivot 工作簿的对象名称中。有关详细信息,请参阅 针对 PowerPivot 的 DAX 语法规范中的“命名要求”。

重命名或编辑现有的计算列

  1. PowerPivot 窗口中,右键单击包含要重命名的计算列的标题,然后单击“重命名列”

  2. 键入一个新名称,然后按 Enter 键以便接受该新名称。

理解计算列的性能

与用于度量值的公式相比,用于计算列的公式可能会消耗更多的资源。原因之一是:计算列的结果始终是为表中的每一行计算的,而度量值仅是为数据透视表或数据透视图中使用的单元计算的。

例如,某个具有 100 万行的表将始终具有含 100 万个结果的计算列,并且对性能具有相应影响。但是,数据透视表通常会通过应用行和列标题对数据进行筛选;因此,仅为数据透视表的每个单元中的数据子集计算度量值。

一个公式对于在公式中引用的对象(例如其他列或计算值的表达式)具有依赖关系。例如,对于基于其他列的计算列,或对于包含引用列的表达式的计算,只有在计算这些相关列之后,才会计算它们。默认情况下,在工作簿中启用自动刷新;因此,在更新值和刷新公式时,所有此类依赖项都可能会影响性能。

为了避免在创建计算列时出现性能问题,请遵循下列指导原则:

  • 不要创建包含许多复杂依赖关系的单个公式,而应分步创建多个公式并将结果保存到列中,这样您就能够验证结果并评估性能。

  • 修改数据通常要求重新计算计算列。可以通过将重新计算模式设置为手动来避免上述情况;但是,如果计算列中的任何值不正确,则该列将灰显,直到您刷新并重新计算数据。

  • 如果更改或删除表之间的关系,则使用这些表中的列的公式将会失效。

  • 如果创建了一个包含循环或自引用依赖关系的公式,将会发生错误。