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

需求背景

客户希望通过集智平台中的报表实现下面的需求:

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

需求分析

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

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

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

成功实现需求。