ActiveReports 为分析类型的报表提供多种交互能力,包括:动态过滤、动态排序、向下钻取和贯穿钻取。本文将介绍DashBoard类型报表中为图表添加贯穿钻取功能,点击图表数据之后可以跳转到明细报表,以查看该类产品的全年订单明细数据。

报表中显示的数据是,将2011年各类产品的全年订单量通过柱状图进行显示,点击图表数据之后可以跳转到明细报表,以查看该类产品的全年订单明细数据。

第一步:创建 Web 应用程序,并添加一个页面报表

2015-02-06_143636

第二步:添加报表数据源

打开报表设计界面,从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盘,你下载示例程序之后,需要修改数据源文件的地址,不然会出现找不到数据源的错误提示。

image

在添加的数据源 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 = 类别.类别ID
 WHERE DATEDIFF("yyyy",订单.订购日期,'2011-01-01') = 0
 GROUP BY 类别.类别ID, 类别.类别名称
 ORDER BY 类别.类别ID, 类别.类别名称 ) as t
inner join 类别 on t.类别ID = 类别.类别ID

 

image

第三步:设计DashBoard报表模板,添加图表

从VS工具箱的 ActiveReports 分类下将 Chart 拖拽到报表设计界面,图表类型选择柱形图

image

然后选中Chart之后从属性窗口中的命令链接区域点击【图表数据】命令,并设置以下属性:

【图表-常规】选项设置:

常规 名称 Chart1  
  工具提示 2011年度各类产品销售量统计表  
  数据集名称 Sales  

image

 

【图表-系列值】选项设置:

系列值 常规 系列标签 销售量
    =Sum([销售量])
       
       

image

系列值 样式 填充色 Orange
    渐变色 TopBottom
    渐变背景结束颜色 DarkRed
       

image

 

系列值 标签 显示点标签 选中
    数据标签 =Sum([销售量])
       
       

image

要为图表增加交互功能,最关键的是设置系列值的操作属性,要为销售订单明细报表还没有创建好,我们先保留这一步操作,等创建好订单明细报表之后再设置【操作】属性。

【图表-类别分组】选项设置:

类别分组 常规 名称 Chart1_CategoryGroup1
    表达式 =[类别名称]
    标签 =[类别名称]
       
image

 

以上就是图表的全部选项设置,得到以下结果:

image

第四步:创建订单明细报表

添加一个名为 rptOrderDetailsForSub.rdlx 的RDL报表,并按照以下设置相关属性

1、打开报表设计界面

2、在报表资源管理器的参数节点中添加以下两个参数,用于实现主报表和明细报表之间的数据传递,因为我们需要显示一类产品的全部订单,所以我们需要传递产品类型编号

名称:CategoryID、数据类型:Integer、隐藏:选中

名称:CategoryName、数据类型:Integer、隐藏:选中

image

3、添加报表数据源,数据源创建方式参考【第二步】中的方法

4、添加数据集

常规-名称:OrderDetails

为数据集添加参数是为了,接受主报表传递的产品类型编号,然后作为SQL查询语句的参数值

参数-名称:Param、值:=[@CategoryID]

image

在设置好数据集的参数之后,我们需要提供数据源的查询SQL语句:

select 订单.订单ID, 订单.客户ID, 订单.订购日期, 产品.产品名称,订单明细.数量, 订单明细.单价, 订单明细.折扣  from (( 订单
inner join 订单明细 on 订单.订单ID = 订单明细.订单ID )
inner join 产品 on 订单明细.产品ID = 产品.产品ID )
where 产品.类别ID = ?
ORDER BY 订单.订单ID;

image

5、设计报表界面

在报表设计界面添加Table,并设置相应的列数据字段信息,参考下图

image

 

第五步:建立主报表和明细报表之间的参数关系

再次打开主报表,选中Chart控件,在属性窗口的【图表数据】命令链接,切换到【系列值-操作】页面,设置以下属性,以建立主报表和明细报表之间的关系

image

通过以上操作,我们完成主报表和明细报表的全部创建工作,接下来就是在页面中显示报表

在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;
    }

 

运行截图:

ActiveReports_DrillThrough_Chart

源码下载: