6

我有以下情况:列表 A 有两列(名称,金额),在列表 B(名称)中我想添加一个计算列,它应该是列表 A 中与列表 B 中同名的所有条目的总和。 例子:

清单 A:

NAME      Amount
L0011     100
L0011     50
L0020     234

因此,在 List BI 中,希望计算的列显示:

NAME      Amount
L0011     150
L0020     234

如何才能做到这一点?工作流程(只要我在列表 A 中添加/修改条目,更新列表 B)还是其他?谢谢

4

3 回答 3

7

lem.mallari 的答案是一个巨大的痛苦,除非您可以假设列表 A 中的金额永远不会改变,因为它没有跟踪项目是否已经添加到总和中。工作流无法遍历 SharePoint 列表,这意味着没有简单的方法来计算多个列表项的总和或平均值。

实现这一点的正确方法将需要一些开发。SharePoint 开发人员培训(2010 年2013 年)实际上将为您提供大部分的帮助:当在列表 A 和 B 中添加或更改项目时,事件接收器应该触发,使用 SharePoint 的 API 来遍历列表 A 并按名称计算平均值,然后更新列表 B 中的所有(或仅受影响的)项目。或者,您可以使用 JavaScript 显示列表 A 中与列表 B 中的项目同名的所有条目的总和,只要所有数据都显示在您的页。如果您熟悉 XPath 和 InfoPath,则可以将列表 A 作为辅助数据源添加到列表 B 的表单中,并仅选择列表 A 中适用的项目进行汇总。

但如果我们谈论的是工作流程,这里是“仅工作流程”方法。这在 2010 年经过测试并取得成功。使用以下列创建自定义列表 C:

  • 标题(字符串,强制,强制唯一值)
  • TotalItems(整数,强制,默认 0)
  • 总和(数字,小数位随意,必填,默认 0)
  • 平均值(计算,=IF(TotalItems=0,0,Sum/TotalItems))(可选)

将列表 A 和 B 中的 Name 列替换为指向列表 C 的查找列。删除列表 B 中的 Amount 列,而不是包括 Sum 列作为附加列。将以下列添加到列表 A,并确保用户不能直接更改它们。这可以通过制作 InfoPath 表单或制作替代视图和编辑表单来限制。

  • AmountArchive(数字,与Amount相同,默认0)
  • AmountHasBeenSubmitted(是/否,默认否)

创建一个工作流,每次在列表 A 中创建或修改项目时运行。使用这些命令(我使用列表是为了便于阅读;当格式化为代码时它变得很难看):

  • 如果 Current Item:Amount 不等于 Current Item:AmountArchive
    • 将变量:项目计数设置为(数据源:列表 C;来自源的字段:TotalItems;查找列表项目:字段标题;值:当前项目:名称(返回字段为:查找值(作为文本)))
    • 计算变量:ItemCount 加 1(输出到变量:ItemCount)
    • 计算列表 C:Sum(与上面类似的设置;一定要使用查找值(作为文本)而不是字符串!)减去当前项:AmountArchive(输出到变量:SumWithoutValue)
    • 计算变量:SumWithoutValue 加上当前项目:金额(输出到变量:NewSum)
    • 如果 Current Item:AmountHasBeenSubmitted 等于 No
      • 将 AmountHasBeenSubmitted 设置为 Yes
      • 更新列表 C 中的项目(将 TotalItems 设置为变量:ItemCount;将 Sum 设置为变量:NewSum;以与字段:标题相同的方式查找列表项;值:当前项目:名称(返回字段为:查找值(作为文本) )
    • 别的
      • 更新列表 C 中的项目(不对 TotalItems 执行任何操作;使用相同的逻辑将 Sum 设置为 Variable:NewSum)
    • 将金额设置为当前项目:AmountArchive
于 2013-10-11T21:03:22.403 回答
5

这不能使用计算列来完成,因为计算列只能用于同一列表中的列。

使用 SharePoint Designer 工作流,您可以只使用Create List ItemUpdate List Item操作,以便每当用户为 L0011 添加值时,该金额将添加到已包含先前金额的另一个列表的列中。

如果您需要有关 SharePoint 方法的更详细答案,请告诉我,我将为您提供有关如何操作的分步说明。

于 2013-04-30T20:31:21.693 回答
0

使用 DSum 函数怎么样?https://support.office.com/en-us/article/DSum-Function-08F8450E-3BF6-45E2-936F-386056E61A32

清单 B

NAME      Amount
L0011     =DSum("[Amount]","List A","[NAME]=''" & [NAME] & "'")
L0020     =DSum("[Amount]","List A","[NAME]=''" & [NAME] & "'")
于 2017-12-28T21:04:08.987 回答