在本节,我们通过3个实战报表例子,对AR9中数据处理、分析能力做分享,其中数据处理用的比较多的报表控件为Table、和Matrix。

实战报表1:常规报表--单级分组

在 ActiveReports 中可以设置单级分组、嵌套分组,同时,还可以使用表格、列表以及矩阵等数据区域控件对数据源进行分组操作。

image

Step1: 新建rptProductsByCategory.rpx报表、添加数据源

image

 

image

SQL

SELECT 产品.*,类别.类别名称,类别.说明 AS 类别说明,类别.图片 AS 类别图片, 供应商.公司名称 AS 供应商,供应商.联系人姓名,供应商.城市,供应商.地址
FROM (供应商 INNER JOIN 产品 ON 供应商.供应商ID = 产品.供应商ID) INNER JOIN 类别 ON 产品.类别ID = 类别.类别ID
ORDER BY 产品.类别ID;

 

Step2:设计pageHeader

image
  拖入AR9的Label控件,输入“商品信息分类统计表”,设置字体为 微软雅黑, 20pt, style=Bold。

 

Step3:设计group (含groupHeader, groupFooter)

image

插入分组头和分组尾。

image

设置groupHeader属性如上图所示。

  • DataField: 选择“数据名称”。 这个属性用于设置分组的数据源字段名称。
  • GroupKeepTogether:选择“FirstDetail”。这个属性用于设置分组头和未释放打印到同一页。
  • RepeatStyle: 选择“OnPage”。设个属性用于设置每一页打印还是在有分组页、尾的页打印。

 

在设置完分组属性后,下面接着填写分组展示的数据

image

在groupFooter区域,依次拖入Label、TextBox控件并设置属性。

image

 

对需要在本次汇总中的数据字段--TextBox里面,进行如下设置。

image

  • SummaryFunc: 本分组汇总函数类型。
  • SummaryGroup:选择对应的分组头。
  • SummaryGroup:汇总数据重置的级别,这里设置为Group,即每个Group重置依次汇总数据。
  • SummaryType:汇总的类型,这里用SubTotal。

 

Step4:设计detail

image

这里依次输入每个分组内呈现的数据,可直接通过报表资源管理器直接拖入字段,调整好布局、对齐即可。

image

在销售额字段,DataField里面输入“=单价 * 订购量”实现AR报表的自动运算功能。

 

Step5:设计pageHeader

image

一个完整的报表,一般都有页脚。 这里用报表控件ReportInfo可实现,设置其FormatString属性即可。

例如可设置为“第 {PageNumber} 页,共 {PageCount} 页”

 

实战报表2:常规报表--中国式报表

在国内中使用的报表,经常结构较为复杂如多行头、列头报表,单一的控件不能实现复杂报表结构, ActiveReports提供了控件嵌套,或综合使用达到行业规定的报表结构。满足复杂结构报表的基本需求。

image

 

Step1:新建rptMultiRow.rdlx  和数据源

image

SQL:

select * from 煤矿三量 where 字段18='10901采面';

select * from 煤矿三量 where 字段18='10902运输巷';

 

Step2:设计页眉

image

 

Step3:多个Table嵌套实现中国式报表设计

要实现中国式报表,需要用多个数据源、多个TextBox报表控件、多个Table报表控件嵌套实现。

image

样例中的案例,用了9个数据源,其中报表上半部分用了8个区域(下半部分和上半部分雷同,以数据源不同区分区域)

  • 区域1:使用TextBox控件布局。没有使用数据源。
  • 区域2:使用Table布局报表表头。没有使用数据源。其中用了2个Table的表头和1个表尾。

image

横向合并,可通过选择单元格邮件点击“合并单元格”来实现,逆向操作是“拆分单元格”。

image

  • 区域3:使用TextBox控件布局。没有使用数据源。
  • 区域4:使用Table控件,展示一行数据--通过Table的表格详细信息区域呈现。

这个要求在设置数据源的时候,输出数据就是一行数据。例如在区域4,用的SQL语句为:

select * from 煤矿三量 where 字段18='10901采面';

  • 区域5:原理同区域4,数据源不同。
  • 区域6:原理同区域4,数据源不同。
  • 区域7:使用Table控件,用Table的表尾实现数据汇总。例如在区域7,用的SQL语句为:

select * from 煤矿三量;

 

至此,一个完整的中国式报表就设计出来了,预览效果如下:

image

实战报表3:常规报表--交叉报表

在 ActiveReports 中可以通过矩阵控件非常方便的实现交叉报表,同时还可以设置数据的分组、排序、过滤、小计、合计等操作,可以满足您报表的智能数据分析等需求。

image

 

Step1:添加报表rptCrossTable1.rdlx和数据源

添加rdlx报表文件参见前文所述,其中用到的SQL:

SELECT t.*, 类别.类别名称 FROM (
SELECT DATEPART("yyyy",订单.订购日期) AS 订购年, DATEPART("m",订单.订购日期) AS 订购月,类别.类别ID,产品.产品名称,订单明细.数量, 订单明细.单价, 订单明细.折扣 FROM (( 订单
INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID)
INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID)
INNER JOIN 类别 ON 产品.类别ID = 类别.类别ID ) as t
INNER JOIN 类别 ON t.类别ID = 类别.类别ID
ORDER BY 订购年,订购月

 

Step2:设计PageHeader区域(页眉)

页眉的左上角用到了Shape报表控件,设置背景色为红色即可。

页眉右上角,用于显示当前报表信息:页数、总页数等,我们通过拖入TextBox报表控件实现:

image

其中用到的表达式:

="第 " & Globals!PageNumber & " 页、共 " & Globals!TotalPages & " 页"

 

Step3:设计detail区域(核心是Matrix控件)

image

设置Matrix的数据源,通过在属性中设置DataSetName。

默认的Matrix是2*2的TextBox组成的,如下图所示:

image

Matrix控件提供了行分组和列分组,分别可通过单击Matrix控件,右键可调出

image

在本例中,我们使用了2个行分组和2个列分组,分别如下:

  • 行分组1:=[订购年]
  • 行分组2:=[订购月]
  • 列分组1:=[类别名称]
  • 列分组2:=[产品名称]

 

image

左上角交叉报表头,先用Container报表控件展位,然后用line报表控件进行4条线汇总,最后添加TextBox报表控件写入“类别”、“产品”、“年”、“月”。

image

交叉表的合计,点击分组单元格右键,选择小计可实现分组合计。

添加TextBox的边框技巧:按住Ctrl键,然后用鼠标逐个选择TextBox。在属性对话框设置BorderStyle=Solid即可。

image

 

官方提供的完整demo和中文数据库文件下载地址

image