"Calculated columns cannot contain volatile functions like Today and Me" Sharepoint 上的错误消息

"Calculated columns cannot contain volatile functions like Today and Me" error message on Sharepoint

我尝试向共享点列表添加一个新的计算列,该列将显示经过的天数。我输入 name 并写一个 公式,如 ;

=ABS(ROUND(今天创建;0))

此公式返回的数据类型为:单行文本

当我想保存时,我收到类似

的错误

Calculated columns cannot contain volatile functions like Today and Me.

我发现了一些关于这个问题的对话。很多人建议新建一个日期时间列,visible为false,默认值为Today's Date,命名为Today。然后我们可以在我们的公式中使用这一列。

我尝试了这个建议,是的,错误消失了,公式被接受,但计算列的值是错误的。我设置了 Today 列可见并选中,它是空的。默认值今天的日期不起作用。当我为这个问题寻找解决方案时,我粗心地删除了列 Today。然后我意识到计算列的值是正确的。

终于;我不知道什么是技巧,但是在你的公式中使用 Today 关键字之前,如果你创建一个名为 Today 的列,并且在你的公式保存之后,如果你删除 Today 列,它正在工作。

更新

在@Thriggle 的回答之后,我意识到这种方法并不奏效。是的,计算列保存时公式不会导致错误,但它仅在第一次正常工作,第二天计算列显示旧值,因为它的值是静态的,如 Thriggle .

计算的列值仅根据需要重新计算

SharePoint 列中的值——甚至计算列中的值——存储在 SharePoint 的基础 SQL 服务器数据库中。

计算列中的计算不会在页面加载时执行;相反,它们仅在项目更改时重新计算(在这种情况下,仅为该特定项目重新计算公式),或者在列公式更改时(在这种情况下,公式为所有项目重新计算)。

(作为旁注,这就是为什么在 SharePoint 2010 中您不能在超过 5000 个项目的列表视图阈值的列表上创建或更改计算列的原因;这将需要大量更新值在所有这些项目中,这可能会影响数据库性能。)

因此,为了使计算列准确存储 "volatile" 值,如 "Me" 和 "Today",SharePoint 需要以某种方式不断地重新计算这些列值并不断更新列值在数据库中。这根本不可能。

计算列的替代项

我建议完全采用不同的方法,而不是为此目的使用计算列。

  1. 条件格式:您可以应用条件格式来突出显示满足特定条件的记录。这可以使用 SharePoint Designer 或 HTML/JavaScript.
  2. 完成
  3. 筛选列表视图:由于列表视图是实时查询和生成的,因此您可以在列表视图过滤器中使用可变值。您可以设置仅显示 Created 等于 [Today] 的项目的列表视图 Web 部件。由于您可以在一个页面上放置多个列表视图 web 部件,因此您可以有一个部分用于今天的项目,另一个 web 部件用于所有其他项目,从而使您在视觉上分开。
  4. 工作流、计时器作业或计划任务:您可以使用重复过程每天设置正常(非计算)列的值。您需要谨慎使用此方法以确保良好的性能;例如,如果列表超过列表视图阈值,您不希望它查询和更新列表中的每个项目。