分组填报表的制作

在前面几篇文章中,我们一起学习了行式填报表制作的相关内容,也了解了多源 SQL 和脚本两种数据处理方式,今天我们来研究一下如何制作分组填报表。

同样地,我们以 demo 示例库中的雇员表信息维护为例,在数据填报页面,需要实现以下效果:

1)雇员信息按照地区分组显示

2)雇员基本信息可进行修改

效果图如下图所示:

imagepng

在制作分组填报表之前,我们先来看一下它的设计原理。

原理说明:

分组填报表中有两个维度:分组维度和明细维度,如何处理两者之间的逻辑关系是重点,这两个维度之间应该是什么样的一种逻辑关系呢?我们先来看一个简单的例子,A1 单元格为分组维度,B1 单元格为明细维度,两者关系如下:

imagepng

A1:[1,2]     单元格在解析计算时会展开成 1,2 两个分组

B1:[[11,55],[22,44]]   B1 需要按照 A1 的分组维度展开对应的数据

分组维度是两个值,那么明细维度要分别对应设置序列:1 对应 [11,55],2 对应 [22,44],最终解析结果如上图右侧所示。

从这里我们可以看出来,明细维度和分组维度是一一对应的,我们需要将符合维度值的数据整理为一个序列,这样才能保证结果页面数据的对应关系是正确的。

在了解了原理之后,我们来看详细实现步骤:

第一步 新建空白填报表

编辑填报表内容和样式,如下图所示:

imagepng

第二步 设置数据处理

根据我们前面讲到的原理,来源脚本内容如下图所示:

A B
1 =connect(“demo”) []
2 =A1.query(“SELECT 雇员 ID, 姓氏, 名字, 职务, 雇用日期, 地区 FROM 雇员 where 地区!=''”)
3 =A2.id(地区)
4 =A3.run(dq=~,gy=A2.select( 地区 ==dq).id(雇员 ID),B1.insert(0,[gy]))
5 >dim=[A3,B1]
6 > 雇员 =A2
7 >A1.close()

其中,A2:通过 query 函数取出要进行修改的表数据;

A3:通过 id 函数对地区去重,获取到分组维度数据;

A4:通过 run 函数逐个取地区分组维度下的雇员 ID,并返回序列;

在 run 函数中,先定义了一个变量 dq,dq 的值为当前执行的 A3(地区),然后我们通过 select 函数过滤出来对应的雇员 ID 数据,最后将结果插入到 B1 单元格,返回完整的明细维度序列数据。

A5:吧分组维度(地区)和明细维度(雇员 ID)整合到一个序列中返回;

A6:吧雇员信息写到雇员对象中,便于在填报表中取数;

PS:脚本写法不唯一,只需要保证“地区”和“雇员 ID”两个维度的逻辑关系正确就可以了。

去向脚本内容如下图所示:

A
1 =connect(“demo”)
2 >A1.update@k(雇员: 雇员 _old, 雇员, 雇员 ID, 姓氏, 名字, 职务, 雇用日期, 地区; 雇员 ID)
3 =A1.error@m()
4 >if(A3==null,A1.commit(),A1.rollback())
5 >A1.close()
6 return A3

   其中,

A2:通过 update 函数实现对雇员表数据的维护,将页面新数据与原有旧数据进行比较,将差异数据更新到雇员表中;

A3:获取数据库操作过程中的异常信息;

A4:如果 A3 获取到的异常信息为空,那么就提交入库,否则就执行事务回滚;

第三步 配置取数表达式和字段名称

imagepng

其中,

A2 单元格:设置单元格类型为维度格,字段名称配置为:雇员. 地区,

单元格取数表达式为:=dim(1),表示取 dim 对象中的第一条记录;

B2 单元格:设置单元格类型为维度格,单元格取数表达式为:=dim(2),表示取 dim 对象中的第二条记录;

因为第一行的标题内容和字段名称一致,所以 A2 后面的单元格不需要再配置字段名称。

PS:对数据采集规则不理解的同学,可以直接对每个数值格设置字段名称,规则是:对象名. 字段名。

这里分享一个 **【小技巧】**,我们可以通过设计器的预览按钮查看填报表的分区识别结果:

imagepng

在制作填报表时,需要保证右侧识别到的对象、字段名称和来源脚本的对象结构是匹配的,这是将数据成功更新入库的必要条件之一。

第四步 其他设置

按照需求设置编辑风格、校验、自动计算、显示格式等。

其中,

校验设置可参考文章: 报表数据填报中的合法性校验 ](https://c.raqsoft.com.cn/article/1544091400841?r=xiaohuihui)

自动计算配置可参考文章: 报表数据填报中的自动计算 ](https://c.raqsoft.com.cn/article/1544091026876?r=xiaohuihui)

总结:

至此,一个简单的单分组填报表就制作完成了。这里实现的难点在于分组维度数据和明细维度数据之间逻辑关系的理解和处理,还是不会怎么办?盘它,盘的多了,你会发现集算器脚本进行数据处理时的各种惊艳之处。

更多填报相关问题请查看:填报相关问题分类导航