字段数不固定的类同期比实现
需求背景
客户希望通过润乾报表实现下面的需求:
其中,传给报表的字段数和字段名不固定。
需求分析
接下来,我们来分析一下这个需求的几个难点:
1、问题的第一个难点是字段数和字段名不固定,这就意味着在报表中我们无法通过[数据集.字段名]的方式取数据,而且必须要使用扩展格的方式;
2、报表要展现的数据不仅依赖于数据集,而且还关系到扩展格的前一个单元格;
其中第一个问题,润乾报表提供了filed等增强函数,可以根据列数取数据;类似同期比的实现润乾还有层次坐标可以使用,接下来我们就按照这个思路,尝试实现这个需求。
实现步骤
首先我们做一张报表,内建数据集如下
字段分别为2003到2007,数据类型为整数。
接下来我们看一下报表的具体设计:
我们先尝试使用filed函数把数据集中的原始数据取出来:
B2表达式:=to(1,ds1.colcount()),使用ds1.colcount()计算数据集字段总数,然后通过to函数从1扩展到字段总数;
B3表达式:=ds1.fieldName(B2),根据B2扩展的值,得到数据集中对应位置的字段名;
B4表达式:=ds1.field(B2),取对应字段下数据;
A4表达式:=ds1.select(#0),记录序号
预览我们可以看到原始数据可以正常取出:
接着,我们尝试使用层次坐标,实现最后的效果:
C2和C3表达式与B2、B3的相同;
C4表达式:=if(C2==1,0,if(C2==2,ds1.field(1),ds1.field(C2-1)*0.8+C4[;-1]*0.2)) 除了简单的if判断外,我们要着重注意C4[;-1]的写法,其意义是取C4横向扩展后,前一单元格的值。
最后,我们来看一下实现后的效果(与原始数据对比):
成功实现需求。