近期项目一个需求,需要对子表中多个相同id的记录只展示一个主表的记录。
效果如下:
一个PO、TITLE、ISBN(以下简称PO)代表一条子表的记录,而底下的N.W、MEAS、PLT SIZE(以下简称N.W)则是代表其主表的记录,已知,所有的PO都会有一个N.W,所以你在jasper的detail里书写是,每一条PO都会产生一个N.W依附在下面,就无法实现我们需要的多个相同id的PO只展示同一个N.W,那么这时我们就需要用到函数对子表的id进行缓存。
首先我们创建一个函数previous_mark_id,类型设置为Integer,或者你的id是string类型就设置为string,随后把Increment type选择为Report,计算类型不需要变动,默认即可
随后我们需要创建Group,选中判断是否为同一子表的id,点击下一步创建所需的Header或Footer
把mark_id传入该Group组内,那么该组就会通过这个mark_id进行缓存记录这一个mark_id,最后我们在组内创建需要的Field或StaticText,在Print When Expression中写入把这个mark_id与我们的函数previous_mark_id进行判断,当$F{mark_id}!=$V{previous_mark_id}时,子表所对应的主表记录即可展示,反之不出现。
新增:group组内若有计算属性,例:sum
则需要对该值进行组的分类,如果是group1组的需要把Reset type设置为Group1,否则这个计算属性值会一直累计到下一个组的记录中去。例如组1记录叠加到组2,组1&组2的记录叠加到组3.
还有不懂的可以问我哦,我是寻狗师。