累计汇总字段
累计汇总字段会自动计算相关记录中的值。您可以创建累计汇总字段,使其值基于主表/子表关系中某个子表的字段值汇总,并在主记录中显示该汇总结果。子表记录必须通过主表/子表直接与主记录相关。例如,您要在客户的发票相关列表中显示所有相关发票自定义对象记录的发票总金额。您可在名为“发票总金额”的自定义金额字段中定义这一汇总信息。
可以使用累计汇总字段执行不同类型的汇总计算。比如可以计算与主记录相关的子记录的数量,也可以计算子记录中字段的总和、最小值或最大值。
创建累计汇总字段
在对象(位于主表/子表的主侧)上定义累计汇总字段。
如果关系已经不存在,请首先在子表侧创建一个主对象与子对象之间的主表/子表关系,用于表示正在汇总的记录的值与被汇总的记录之间的关系。
在您希望显示累计汇总字段值的对象上新建字段。 汇总字段汇总了相关对象上的记录中的值,因此该对象(您在上面创建了该字段)应位于主表/子表关系的主侧。
- 所属对象:即主表/子表关系中的主对象。
- 显示名称:希望该汇总字段显示的名称。
- 字段名:该字段的唯一性api名称。
- 字段类型:请选择“累计汇总”。
- 默认值:因为字段值是计算得出的,所以默认值在此处无效。
- 字段分组:希望该字段显示在哪个分组上。
- 精度:数值字段的精度。
- 小数位数:希望该汇总结果保留的小数位数。
- 要汇总的对象:选择主表/子表关系中子表上的对象,该对象包含您要汇总的记录。
- 汇总类型:
- COUNT:汇总子表一共有多少条记录,返回记录总条数。
- SUM:对在“要聚合的字段”选项中选择的字段的值进行累加汇总。仅数字、金额和百分比字段类型可用。
- AVG:对在“要聚合的字段”选项中选择的字段的值进行总和平均值计算。仅数字、金额和百分比字段类型可用。
- MIN:对在“要聚合的字段”选项中选择的字段的值进行大小比较并取出最小值。仅数字、金额、百分比、日期和日期时间字段可用。
- MAX:对在“要聚合的字段”选项中选择的字段的值进行大小比较并取出最大值。仅数字、金额、百分比、日期和日期时间字段可用。
- 要聚合的字段:请选择子表上的某个字段,这个字段就是要进行SUM/AVG/MIN/MAX进行聚合计算的字段。对于除COUNT外的其他汇总类型,此项必填,反之不需要填写该字段。
- 过滤条件:如果要在汇总计算时,只包含特定的记录组,请在过滤条件中输入筛选条件,比如只汇总2021年1月1号早上8点前创建的记录。
- 其他:勾选上需启用的功能开关等,单击保存结束操作。
汇总时过滤条件
如果要在汇总计算时,只包含特定的记录组,可以在过滤条件中输入对应的筛选条件。
- 这些过滤条件过滤的是子表记录而不是主表记录。
- 字段输入框中列出的是子表对象中可用于过滤的字段名称供选择。
- 运算符输入框中列出的是基于左侧选中字段的字段类型所支持的过滤条件运算符,比如字符类型的字段有“包含”运算符,而金额类型没有。
- 值是一个纯文本输入框,当左侧字段类型不同时,请按不同的输入规范输入文本字符:
- 数值、金额、百分比:请输入合法的数值,比如1.2,3000。
- 布尔:请输入
"true", "True", "TRUE", "1"
表示真,或输入"false", "False", "FALSE", "0"
表示假。 - 日期:请输入类似
2020-02-12
格式的值,它表示的值是2020-02-12T00:00:00.000Z
,即这里转换为按utc的0点时间值来过滤。 - 日期时间:请输入类似
2020-02-12 12:00
格式的值,它表示的值是2020-02-12T04:00:00.000Z
,即这里会按当前时区转换为utc时区下的时间值来过滤。 - 相关表:请输入记录的_id值,比如
rbNxQ3mK6CFs8LWbr
要表示要引用记录的ID值。 - 主表/子表:同相关表。
- 其他:按文本值过滤。
- 可以输入多个过滤条件,最终会按AND逻辑连接输出这些条件,不支持按OR或更复杂的逻辑过滤。
批量重算汇总值
对于已经存在的历史记录数据,很多情况下累计汇总字段值不会重新计算,此时您应该选择累计汇总字段后台详细配置页面上的“批量重算汇总值”按钮来手动重新计算该值。这些情况包括但是不限于以下情况:
- 更改累计汇总定义(如对象、要聚合的字段、汇总类型、过滤条件等)。
- 更改在累计汇总字段“要聚合的字段”中引用字段的相关属性,比如更改其字段类型,更改其公式字段的表达式等。
在正式环境中请谨慎修改对象的某些字段属性,比如字段类型,字段公式表达式,下拉选择框可选项列表等,因为对于已经存在的历史记录数据可能不会重新触发字段值重算,对于累计汇总字段值,只能通过手动操作这里的“批量重算汇总值”按钮来修正历史数据。
实施提示
- 可在所有具有主表/子表关系的主侧对象上创建累计汇总字段,无论两侧对象是标准对象还是自定义对象。
- 当某个对象上无法创建累计汇总字段时,请先在该对象的子表上创建主表/子表关系。
- 累计汇总字段中能够计算的字段类型取决于汇总类型及其要聚合的字段的字段类型。例如:
- 当选择 SUM 或 AVG 作为累计类型时,数字、金额和百分比字段均可用。
- 当选择 MIN 或 MAX 作为累计类型时,数字、金额、百分比、日期和日期时间字段均可用。
- 当选择COUNT作为累计类型时,将直接汇总子表记录条数总合而与子表的字段无关,不需要选择“要聚合的字段”。
- 有时,您无法更改您在累计汇总字段中引用字段的字段类型,这是因为累计汇总字段中能够计算的字段类型依赖于要聚合的字段的字段类型,管理后台暂时未处理此类逻辑校验,请谨慎随意变更正式环境中的字段类型。
- 在对象上创建了累计汇总字段后,不能将该汇总字段依赖的子表对象中的主表/子表类型字段的字段类型变更为相关表或其他字段类型,管理后台暂时未处理此类逻辑校验,请谨慎随意变更正式环境中的字段类型。
- 累计汇总字段可以引用公式字段,即“要聚合的字段”可以选择公式字段类型的字段,当公式值变更后会触发累计汇总字段重新汇总计算并更新字段值。
- 公式字段中也可以引用累计汇总字段,当累计汇总字段值变更时会重新触发相关公式字段重算其字段值。
- 就目前来说,累计汇总字段中引用了包含派生即时值的跨对象字段引用或函数(如 NOW 或 TODAY的)公式字段时,管理后台按普通公式的方式处理,不加以区别对待,但是您不应该这么配置,这不只是实际需求中不应该有这种逻辑,更是因为这种配置会带来性能方面的极大损耗。
- 就目前来说,累计汇总字段值变更时,不会重新触发引用了该汇总字段的工作流规则、验证规则或其他自动规则中的公式计算。
- 在正式环境中请谨慎修改对象的某些字段属性,比如字段类型,字段公式表达式,因为对于已经存在的历史记录数据可能不会重新触发字段值重算,详情请参考批量重算汇总值部分。
- 计算累计汇总字段值可能需要 30 分钟或以下,取决于受影响的记录的数量和其他因素。
- 如果验证规则中引用了累计汇总字段,当汇总字段值在变更时也不会触发执行验证规则,比如主记录有一个验证规则,要求累计汇总字段值必须小于100。如果用户对相关子记录的更改将输入超过 100 的值,希望用户无法保存该子表记录,实际上子记录变更时主记录的验证规则是不会被触发的,要实现这个需求,通常的做法是把验证规则配置在子表而不是主表中,类似:
lookup_mater_object_field.summary_value + current_value >= 100。
最佳实践
- 如果不想让用户看见累计汇总字段计算值,可以将字段设置为隐藏字段。详细记录上用户不能看见的字段仍然会在累计汇总字段中被计算。
- 如果具有验证规则,请考虑它们将如何影响累计汇总字段。子表记录中的值发生变更时,主表记录的累计汇总字段的值也会发生变更。所以保存主表/子表记录时会显示一个验证错误,请参考上述实施提示最后一条。
- 请注意从子表字段引用主表累计汇总字段与从主表字段引用自身的累计汇总字段是有区别的。从子记录引用的累计汇总字段可能拥有过时值,因为子记录保存时父记录尚未更新。但是,从父级记录中引用累计汇总字段的话,虽然累计汇总字段将始终拥有最新的更新值,但是子记录变更时主记录的验证规则是不会被触发的,请参考上述实施提示最后一条。
- 创建累计汇总字段之前,请规划其实施。一旦创建,就不能更改所选详细对象,也不能删除累计汇总定义中引用的任何字段。
- 创建累计汇总字段之前,请规划其实施。特别是在生产环境中,一旦产生有价值的历史数据,再修改对象的某些字段属性,比如字段类型,字段公式表达式的话,就需要手动执行“批量重算汇总值”来修正历史数据,这将增加不确认性风险。
- 累计汇总字段中不允许自动派生字段,如当前日期或当前用户。禁止字段包含可动态派生值的函数(如 DATEVALUE、NOW 和 TODAY)的公式字段。累计汇总字段中也不允许包含相关对象合并字段的公式字段。
- 应该适当配置“字段索引”以提升数据查询速度,这样可以明显提高累计汇总功能的整体性能。