1. 概述编辑
1.1 应用场景
有时候需要校验某个字段下的填报数据是否重复,如有重复值,则提示校验出错信息且不允许提交入库。
1.2 实现思路
填报内置校验公式里的单元格,如果涉及到扩展,则会遍历判断。利用此特性,可以将单元格扩展出的所有值作为一个数组,然后在校验公式里利用GREPARRAY()函数遍历筛选出数组中的当前值,判断其个数。如果个数大于1,说明存在多条重复值。
注:本方案同样适用于双向扩展的场景,但不支持删除行和存在多个空值的场景。
2. 示例编辑
2.1 准备数据
新建数据查询数据集 ds1,SQL 语句为:SELECT * FROM 销售总额
2.2 模板设计
设计填报表格,将销售员和销售总额字段分别拖入到 A2 和 B2 单元格,并添加文本控件。在A3单元格写公式=[A2],用于获取A2扩展出的所有值作为一个数组。最后将第3行隐藏。
2.3 设置提交
菜单栏点击模板>报表填报属性,新增内置SQL提交,设置如下图所示:
2.4 设置数据校验
设计器菜单栏点击模板>报表填报属性>数据校验,新增一个内置校验,如下图所示:
校验公式为:len(GREPARRAY(A3, item = A2)) = 1
该公式含义为,遍历A2扩展出的每个值,对A3数组进行筛选,获取每个A2值出现的次数。如果次数大于1,说明是重复数据。
2.5 效果预览
保存报表,使用填报预览,当销售员字段下有重复数据时,校验失败,如下图所示:
1)PC 端
2)移动端
3. 模板下载编辑
点击下载模板:校验页面数据是否重复.cpt
4. 注意事项编辑
4.1 问题现象
如果是Excel导入的场景,可能会出现导入后A3单元格的值没有变化的情况。
4.2 问题原因
受到当前产品功能限制,一些返回值为数组的公式不支持导入时的重计算,所以在导入后会发现公式结果没有变化。
4.3 解决方案
将A3单元格公式处理成字符串,然后在数据校验里重新转化为数组。
A3公式改为:JOINARRAY([A2],",")
数据校验公式改为:len(GREPARRAY(split(A3,","),item=A2))=1