字段数不固定的类同期比实现
需求背景
其中,传给报表的字段数和字段名不固定。
需求分析
接下来,我们来分析一下这个需求的几个难点:
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 横向扩展后,前一单元格的值。
最后,我们来看一下实现后的效果(与原始数据对比):
成功实现需求。