ActiveReports 为分析类型的报表提供多种交互能力,包括:动态过滤、动态排序、向下钻取和贯穿钻取。本文将介绍DashBoard类型报表中为图表添加贯穿钻取功能,点击图表数据之后可以跳转到明细报表,以查看该类产品的全年订单明细数据。
报表中显示的数据是,将2011年各类产品的全年订单量通过柱状图进行显示,点击图表数据之后可以跳转到明细报表,以查看该类产品的全年订单明细数据。
第一步:创建 Web 应用程序,并添加一个页面报表
第二步:添加报表数据源
打开报表设计界面,从VS的菜单中选择 【视图】 >> 【其他窗口】 >> 【报表资源管理器】,以打开ActiveReports的报表资源管理器,在资源管理器的数据源节点中右键添加数据源,并按照以下截图设置属性
名称:NWind_CHS
类型:Microsoft OleDb Provider
OLE DB 提供程序:Microsoft.Jet.OLEDB.4.0
服务器或文件名称:D:\ActiveReports_DrillThrough_Chart\ActiveReports_DrillThrough_Chart\Data\NWind_CHS.mdb
备注:我在创建工程时将源码放在了D盘,你下载示例程序之后,需要修改数据源文件的地址,不然会出现找不到数据源的错误提示。
在添加的数据源 NWind_CHS 上鼠标右键添加数据集,并设置以下属性:
名称:Sales
查询:
Select 类别.类别名称,t.* from (SELECT 类别.类别ID,SUM(订单明细.数量) AS 销售量 FROM (( 订单INNER JOIN 订单明细 ON 订单.订单ID = 订单明细.订单ID)INNER JOIN 产品 ON 订单明细.产品ID = 产品.产品ID)INNER JOIN 类别 ON 产品.类别ID = 类别.类别IDWHERE DATEDIFF("yyyy",订单.订购日期,'2011-01-01') = 0GROUP BY 类别.类别ID, 类别.类别名称ORDER BY 类别.类别ID, 类别.类别名称 ) as tinner join 类别 on t.类别ID = 类别.类别ID
第三步:设计DashBoard报表模板,添加图表
从VS工具箱的 ActiveReports 分类下将 Chart 拖拽到报表设计界面,图表类型选择柱形图
然后选中Chart之后从属性窗口中的命令链接区域点击【图表数据】命令,并设置以下属性:
【图表-常规】选项设置:
常规 | 名称 | Chart1 | |
工具提示 | 2011年度各类产品销售量统计表 | ||
数据集名称 | Sales |
【图表-系列值】选项设置:
系列值 | 常规 | 系列标签 | 销售量 |
值 | =Sum([销售量]) | ||
系列值 | 样式 | 填充色 | Orange |
渐变色 | TopBottom | ||
渐变背景结束颜色 | DarkRed | ||
系列值 | 标签 | 显示点标签 | 选中 |
数据标签 | =Sum([销售量]) | ||
要为图表增加交互功能,最关键的是设置系列值的操作属性,要为销售订单明细报表还没有创建好,我们先保留这一步操作,等创建好订单明细报表之后再设置【操作】属性。
【图表-类别分组】选项设置:
类别分组 | 常规 | 名称 | Chart1_CategoryGroup1 |
表达式 | =[类别名称] | ||
标签 | =[类别名称] | ||
以上就是图表的全部选项设置,得到以下结果:
第四步:创建订单明细报表
添加一个名为 rptOrderDetailsForSub.rdlx 的RDL报表,并按照以下设置相关属性
1、打开报表设计界面
2、在报表资源管理器的参数节点中添加以下两个参数,用于实现主报表和明细报表之间的数据传递,因为我们需要显示一类产品的全部订单,所以我们需要传递产品类型编号
名称:CategoryID、数据类型:Integer、隐藏:选中
名称:CategoryName、数据类型:Integer、隐藏:选中
3、添加报表数据源,数据源创建方式参考【第二步】中的方法
4、添加数据集
常规-名称:OrderDetails
为数据集添加参数是为了,接受主报表传递的产品类型编号,然后作为SQL查询语句的参数值
参数-名称:Param、值:=[@CategoryID]
在设置好数据集的参数之后,我们需要提供数据源的查询SQL语句:
select 订单.订单ID, 订单.客户ID, 订单.订购日期, 产品.产品名称,订单明细.数量, 订单明细.单价, 订单明细.折扣 from (( 订单inner join 订单明细 on 订单.订单ID = 订单明细.订单ID )inner join 产品 on 订单明细.产品ID = 产品.产品ID )where 产品.类别ID = ?ORDER BY 订单.订单ID;
5、设计报表界面
在报表设计界面添加Table,并设置相应的列数据字段信息,参考下图
第五步:建立主报表和明细报表之间的参数关系
再次打开主报表,选中Chart控件,在属性窗口的【图表数据】命令链接,切换到【系列值-操作】页面,设置以下属性,以建立主报表和明细报表之间的关系
通过以上操作,我们完成主报表和明细报表的全部创建工作,接下来就是在页面中显示报表
在ASPX页面中添加WebViewer控件,并在页面后台代码中添加以下代码:
protected void Page_Load(object sender, EventArgs e){GrapeCity.ActiveReports.PageReport report = new GrapeCity.ActiveReports.PageReport(new System.IO.FileInfo(Server.MapPath("Reports/rptSalesByCategory.rdlx")));WebViewer1.Report = report;}
运行截图:
源码下载: