典型报表设计:项目应收款统计,行分组不汇总、分组内过滤、行记录和汇总计算

矩表组件是专门用来设计典型的交叉式复杂报表的,可以通过类似透视表的向导,快速实现动态行头、列头的分组交叉报表
在实际报表软件当中,还会包含各种复杂场景,例如分组过滤、分组间的计算等。

本教程示例数据:
每个医院的每个项目有一个对应的负责人,每个项目有一个项目金额,项目会分多次收款和多次开票,存在已收款未开票和已开票未收款的情况。

需求:
分别按照签约时间、医院名称、项目、项目负责人、签约单位、开票单位统计项目金额、收款次数、收款金额、开票次数、开票金额,计算未收款、未开票、已开票未收款等数据。
示例效果为:

报表特点:
1.金额是每个项目一条记录,行分组不汇总;
描述:每个项目的金额是固定的一条记录,不能采用默认的分组汇总方式。

2.列头按照收款次数和开票次数分组,去除无收款次数和开票次数的记录。
描述:此类报表中,由于列头或行头都是通过字段值进行分组聚合的,列头的值和数量与字段值的聚合结果是一致的。
例如,以【收款次数】字段为例,字段值中包含 次数 和空值,聚合之后的列头就会显示为:1,2,3,【0】,在实际报表现实中,【0】即没有
收款记录的值是不需要显示的。需要在分组内对特定记录进行过滤。

3.计算各项目未收款和已开票未收款金额。
描述:
未收款金额=项目金额-sum(已收款金额)
已开票金额和已收款金额对比:
如果 【已开票金额】小于 【已收款金额】,已收款未开票=sum(收款金额)-sum(开票金额)
如果【已开票金额】大于 【已收款金额】,已开票未收款金额=sum(开票金额)-sum(收款金额)

实现步骤:
1.利用示例Excel数据源创建数据源,并选择【项目合同应收款】sheet创建报表数据集。
2.使用该数据集创建报表
2.1.选择该共享数据集,选择矩表,根据矩表向导绑定字段;
行分组绑定:签约时间、医院名称、项目、项目负责人、签约单位、开票单位

     2.2 选中 【收款】列头单元格,右键在下方添加行。

 

在新增的行和数据行分别绑定收款次数和收款金额,并设置【收款次数】单元格启用列分组。

 

并在属性面版上设置分组条件:收款次数。

 

选中【收款次数】单元格,右键 列操作 ,在分组外的右侧添加列,用于计算收款金额合计。

 

2.3 选中【开票单位】,右键在分组内右侧添加列,绑定【金额】。并将前面几列的列头分别合并居中。

 

2.4 参考【收款次数】的做法,选中【收款】单元格,在右侧添加列,绑定【开票次数】,【开票金额】,并对【开票次数】启用列分组。

 

并设置【开票次数分组条件为】开票次数。

 

2.5 类似上个步骤,选中【开票】单元格,分别在右侧添加列,用于计算和展示:未收款、未开票、已开票未收款和跟踪情况。
未收款表达式:=Fields!金额.Value-Sum(Fields!收款金额.Value)
未开票表达式:=IIF(Sum(Fields!收款金额.Value)-Sum(Fields!开票金额.Value)>=0,Sum(Fields!收款金额.Value)-Sum(Fields!开票金额.Value),"")
已开票未收款表达式:=IIF(Sum(Fields!开票金额.Value)-Sum(Fields!收款金额.Value)>=0,Sum(Fields!开票金额.Value)-Sum(Fields!收款金额.Value),"")

 

预览效果:

 

发现收款和开票分组中,出现了没有收款和开票的记录,需要剔除。
通过在分组中添加过滤条件即可实现。
分别在【收款次数】和【开票次数】分组中,添加过滤条件:收款次数不等于0和开票次数不等于0。

 

每个项目多次收款、开票、未收款、未开票等信息均正确显示在报表当中。

原文地址:https://www.cnblogs.com/edoo/p/13446601.html