字段数不固定的类同期比实现

需求背景

客户希望通过润乾报表实现下面的需求:

其中,传给报表的字段数和字段名不固定。

需求分析

接下来,我们来分析一下这个需求的几个难点:

1、问题的第一个难点是字段数和字段名不固定,这就意味着在报表中我们无法通过[数据集.字段名]的方式取数据,而且必须要使用扩展格的方式;

2、报表要展现的数据不仅依赖于数据集,而且还关系到扩展格的前一个单元格;

其中第一个问题,润乾报表提供了filed等增强函数,可以根据列数取数据;类似同期比的实现润乾还有层次坐标可以使用,接下来我们就按照这个思路,尝试实现这个需求。

实现步骤

首先我们做一张报表,内建数据集如下

字段分别为20032007,数据类型为整数。

接下来我们看一下报表的具体设计:

我们先尝试使用filed函数把数据集中的原始数据取出来:

B2表达式:=to(1,ds1.colcount()),使用ds1.colcount()计算数据集字段总数,然后通过to函数从1扩展到字段总数;

B3表达式:=ds1.fieldName(B2),根据B2扩展的值,得到数据集中对应位置的字段名;

B4表达式:=ds1.field(B2),取对应字段下数据;

A4表达式:=ds1.select(#0),记录序号

预览我们可以看到原始数据可以正常取出:

接着,我们尝试使用层次坐标,实现最后的效果:

C2C3表达式与B2B3的相同;

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横向扩展后,前一单元格的值。

最后,我们来看一下实现后的效果(与原始数据对比):

成功实现需求。

热门文章