# 取数和计算
表单应用支持多种灵活的取数和计算方式,包括基本的四则运算,函数计算,从数据模型中取数等各种情况。本文主要介绍在各种不同的业务场景下,如何使用表单应用的取数计算能力。以下是计算相关的基本属性设置:
# 默认值
默认值是一种只会在页面初始化时计算一次的表达式,后续不会因为用户填报表格或点击计算按钮而重新计算。通常用于新增数据时,计算一个初始值,用户在后续填报时可以根据实际业务情况进行再次修改。对于计算后就不再修改的内容,比如按照固定的规则生成主键或计算创建人等,此时还需要额外设置单元格不可填写。
# 计算公式
计算公式是可以按需进行再次计算的公式,当计算公式引用的其他单元格发生变化时会自动重新计算,当用户点击计算按钮时也会重新计算。比如在表单中需要在填写过销量和单价后自动计算出销售金额,则可在填写销售金额的单元格中添加计算公式,计算单价和销量相乘的结果。
TIP
- 计算条件可以控制计算公式只在条件返回
TRUE
或为空时才会计算,例如根据输入的身份证号码来计算出生日期、性别,只有当输入的内容是符合身份证号码规范的时候计算才有意义,此时可以设置计算条件为pidcheck(身份证号码)
。 - 单元格添加计算公式后,会自动叠加上计算状态样式,默认是一个斜线底纹,详细规则可参考条件样式文档。
- 有计算公式的单元格默认不可填写,当需要填写时,需要设置单元格>输入>禁用/只读属性为启用。
# 取数公式
取数公式可以自动从数据库或第三方业务系统获取实际的数据并初始化到表格,供用户确认后按需修改并上报。实际使用过程中,可能会对一个数据集按多种取数口径来取数,类似报表查询,以企业信息统计填报为例:
示例地址:企业信息统计 (opens new window)
给取数公式添加取数条件的过程类似于在报表单元格上添加过滤,例如上述示例地址中的表单应用,所有的取数公式其实都是在对一份明细数据求COUNT,只是会用不同的取数条件来过滤得到不同维度下的明细数据结果。
TIP
- 取数条件等价于报表单元格的过滤条件,它是对数据集过滤条件的一种补充,与数据集过滤条件是AND的关系。
- 取数执行条件等价于计算公式的计算条件,是在满足这个条件的情况下才会计算取数公式。
# 取前期数据
有时需要将以前填报的数据作为参考值显示在表单中。比如填报每月的收支情况,希望在填本月的数据时能够对比下上月的数据,此时可以使用PRE函数来获取上一期的数据。
TIP
PRE函数针对字段使用时,需要带上字段的模型前缀,使用类似pre(model1.field1)
的表达式来获取字段对应的前期数据。
# 浮动表取其他模型数据
填报浮动表时,可使用取数公式来初始化一批数据到浮动行中。这样做的好处在于填报时无需自行添加行,大部分能直接通过查询得到的内容不需要用户再手动输入,用户只需要填写必要的数据即可。例如填报产品销量明细,可将要填写的产品以及部分规格参数初始化到浮动表中,用户只需要填写每类产品的销售单价以及销售数量即可。
以产品销量填报为例,浮动表取其他模型的数据有以下几个关键步骤:
- 对取数模型施加过滤条件,仅保留需要获取的数据,此处只保留第一级的产品数据。
- 在浮动单元格中设置取数公式为
产品表.代码
,这决定了在做取数查询时会以这个字段作为查询的主粒度,即当前产品表中有多少行数据那么浮动区域中初始化的行也一定是一致的。 - 在浮动区域的其他单元格中设置需要一起取数的内容,此处需要获取产品名称,因此在B3单元格中设置取数公式为
产品表.名称
。
TIP
- 取数公式的应用可以看作是一个报表查询,表单应用只是将查询的结果存储到填报模型中。
- 基于上述概念,浮动表取数时,浮动单元格必须设置取数公式。如果没有,效果等同于报表的浮动单元格中未设置计算公式,会导致查不出来任何数据。
- 浮动表的主键是技术键时,比如UUID,此时浮动单元格可以没有取数公式,但浮动区域必须设置业务单元格,业务单元格中必须有取数公式,此时取数的查询会以业务单元格为依据。
- 当浮动单元格或业务单元格有关联维表,此时通过数据补足搭配计算公式可以达到一样的取数效果,具体操作可参考浮动设置文档。
# 列出下级单位数据
上级单位填报时,有时需要参考下级单位的数据。如果按照默认体验去查看下级单位的数据,需要频繁的在填报单位树中切换,因此会将所有下级单位的数据以浮动表的形式在上级单位的表单中展示出来。
示例地址:列出下级单位数据 (opens new window)
以在岗职工统计表为例,在上级单位的表单中列出所有下级有以下几个关键步骤:
- 克隆当前填报数据集,右键点击设置,在高级标签页下勾选自定义加载数据条件。
- 添加加载数据条件,设置
数据期=当前数据期
和填报单位.上级单位=当前单位
,意思是要过滤出所有当前数据期下本单位的下级单位数据。 - 添加浮动区域,绑定上述克隆数据集,并在对应的单元格上设置好绑定字段,这样设置后,打开表单时如果克隆数据集过滤后有数据则会自动装载到表单浮动区域中。
- 浮动区域设置显示条件
当前单位.SZ_LEAF != '1'
,仅在上级单位打开表单时才显示。
TIP
周期填报应用中所有与单元格有绑定关系的数据集都有默认的数据期、填报单位过滤条件,这限制了填报者不能越权操作其他单位的数据,因为这个限制,默认情况下,表单中是无法直接展示其他单位数据的。详细说明可参考数据存储文档。
# 取单行数据集的数据
当数据来源于同一模型且有相同的取数口径时,建议使用单行数据集取数。单行数据集的取数方式可参考SuperPage的取数和计算文档。
# 使用QUERY函数取数
当要取的数据比较简单且数据量不大时,可在计算公式中使用QUERY函数达到效果。相关说明可参考SuperPage的取数和计算文档。
# 取指标数据集的数据
当需要对单主键的指标数据集取数时,可参考SuperPage的取数和计算文档。
# 计算优先级
表单应用中有多种数据来源,除默认值、计算公式以及取数公式外,还可以有汇总数据和补足数据,当这些数据来源同时作用时,按以下优先级计算:
- 提交过数据后,如果单元格有绑定字段,则再次进入表单总是以绑定字段中装载的数据为主,不会计算其他表达式。
- 汇总数据仅在查看上级单位的表单时有效,如果上级单位没有提交过数据且设置了汇总,则此时以汇总为主,如果此时汇总的单元格上有计算公式,且计算公式中引用了其他汇总单元格,则汇总后该计算公式会因为被影响计算而自动计算一次。
- 新增数据时,如果此时不是汇总单位,则按照取数公式>默认值>计算公式的优先级来计算。
- 计算公式总是会在引用的内容发生变化的情况下自动计算。
- 补足数据只能在浮动表中作用,优先级总是最低的,当汇总、取数或装载的数据不满足期望的行数时,才会处理补足。
- 汇总、取数、计算都可通过对应的按钮强行触发计算。