Datetime &引用;计算列不能包含像Today和Me这样的易失性函数;Sharepoint上的错误消息

Datetime &引用;计算列不能包含像Today和Me这样的易失性函数;Sharepoint上的错误消息,datetime,sharepoint,calculated-columns,Datetime,Sharepoint,Calculated Columns,我尝试向sharepoint列表中添加一个新的计算列,该列将显示经过的日期。我输入名称并编写一个公式,如 =绝对值(四舍五入(今天创建;0)) 此公式返回的数据类型为:单行文本 当我想保存时,会出现如下错误 计算列不能包含像今天和今天这样的易失性函数 我 我找到了一些关于这个问题的对话。许多人建议创建一个新的日期时间列,visible为false,默认值为今天的日期,并将其命名为今天。然后我们可以在公式中使用此列 我尝试了这个建议,是的错误消失了,公式被接受了,但计算列的值是错误的。我今天设置的

我尝试向sharepoint列表中添加一个新的计算列,该列将显示经过的日期。我输入名称并编写一个公式,如

=绝对值(四舍五入(今天创建;0))

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

当我想保存时,会出现如下错误

计算列不能包含像今天和今天这样的易失性函数 我


我找到了一些关于这个问题的对话。许多人建议创建一个新的日期时间列,visible为false,默认值为今天的日期,并将其命名为今天。然后我们可以在公式中使用此列

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

最后,;我不知道什么是诀窍,但在公式中使用Today关键字之前,如果您创建了一个名为Today的列,并且在公式保存后,如果您删除Today列,则它会起作用

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

计算列值仅在需要时重新计算。

SharePoint列(甚至计算列)中的值存储在SharePoint的底层SQL Server数据库中

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

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

因此,为了使计算列准确存储“可变”值,如“我”和“今天”,SharePoint需要以某种方式不断重新计算这些列值,并不断更新数据库中的列值。这根本不可能

计算列的备选方案

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

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

  • 感谢您在以下位置解释这么长的答案和解决方法: