ReportLite 实践:自定义分组区间的交叉报表

做报表时经常会一些有自定义统计区间的汇总,按时间段、数值段等汇总数据,比如要根据员工信息数据按照部门统计不同年龄段的人数,员工信息数据放在 xls 中,如下:

要做到如下结果:

在 Excel 中可以用 COUNTIFS 函数实现条件汇总,比如 C4 公式:=COUNTIFS(report!$H$2:$H$500,A4,report!$J$2:$J$500,">=30",report!$J$2:$J$500,"<40"),原数据中存放的是出生日期,这里按照年龄段统计需要增加辅助列 J 列计算出年龄。每个年龄段都要在格子里写一遍类似的公式,有点繁琐,年龄段区间一旦发生变化,还需要调整公式,,重复工作较多。

用 ReportLite 制作起来很容易,直接使用自带的函数就可以灵活设置统计区间,再设置报表样式就行了。

报表制作

选定源数据文件,在报表中按惯例命名为 ds1 数据集。

报表模板:

这个报表是一个双向拉伸交叉报表。

A4:=ds1.group(DEPT;DEPT:1),表示从 ds1 中取 DEPT 列数据并按其分组,其右侧单元格计算会限定在 ds1 相应的组内。格子默认根据数据纵向拉伸,其右侧的红色箭头指示了拉伸方向,可以通过 "Expanding Mode" 属性改变其拉伸方向。

B3:=ds1.plot(age(BIRTHDAY),list(30,40,50)),BIRTHDAY 列中数据是出生日期,用 age 函数将其转成年龄,list(30,40,50) 设置了年龄的分段区间,然后,将 B3 单元格的 "Expanding Mode" 属性(在右边的属性栏中)设置成 "Horizontal",报表预览时就会达到 A4 纵向拉伸,B3 横向拉伸的双向拉伸效果。

B4:=ds1.count(),表示在交叉部分进行计数汇总。

B5:=sum(B4{}),对当前年龄段内的数据求和。

然后完成格式调整,单元格合并,表头斜线设置,格子的字体颜色、填充颜色、数据格式等。

预览结果:

可以看到,B3 中显示的是 0、1、2、3,因为 plot 函数会显示数据对应分段序号,这里还要将它转换成我们想要的文字。在 B3 单元格”Display Value”属性的 Exp 列中设置公式:map(to(0,3),list("<30","30~40","40~50",">50")),再预览:

现在可以存为 XLS 文件了。

这种自己定义分组区间的报表只要在一个格子中写公式就可以,非常方便,单元格会根据设置自动拉伸。更改年龄段统计区间只需要简单更改下这个格子里的公式即可。

下载 ReportLite 及更多资料http://www.raqsoft.com/reportlite。