SSRS:按月汇总的动态表头实现-Matrix Control

来源:互联网 发布:c语言函数头文件格式 编辑:程序博客网 时间:2024/06/05 08:41

前言:
工具是为实现需求服务的。不同的工具提供了不同的方式,在选择过程中,选择最优最快的实现方式,这是一个成熟的码农必备的技能。本篇参考了CodeProject上的这篇文章:Using SSRS - Matrix Control to Generate Columns Dynamically
场景:SQL Server 2012 AdventureWorks2012 数据库。
目的:实现按照用户选择的时间区间按月显示每个产品销售数量和销售业绩。
数据准备:销售数据是按行按日期纵向排列在销售表Sales.SalesOrderHeader和Sales.SalesOrderDetail表中。
实现方式:1.可以使用PIVOT或者CASE WHEN动态SQL实现按月分类
2.使用SSRS的Matrix实现动态列的显示。
本篇主要介绍第二种实现方式。
数据准备:

USE AdventureWorks2012;GO/×DECLARE @StartDate DATETIME ='01/01/2008'DECLARE @EndDate DATETIME ='12/31/2008'×/SELECT                P.ProductNumber           ,   P.Name           ,   CONVERT(CHAR(6),SOH.OrderDate,112)  AS 'SaleMonth'           ,   SUM(SOD.OrderQty)                   AS 'OrderQty'           ,   SUM(SOD.LineTotal)                  AS 'SubTotal'          FROM [Sales].[SalesOrderHeader]    SOH    INNER JOIN [Sales].[SalesOrderDetail] SOD             ON SOD.SalesOrderID = SOH.SalesOrderID    INNER JOIN [Production].[Product] P             ON SOD.ProductID = P.ProductID         WHERE SOH.[Status] =5        -- Shipped           AND SOH.OrderDate BETWEEN @StartDate AND @EndDate      GROUP BY                         P.ProductNumber                    ,   P.Name                    ,   CONVERT(CHAR(6),SOH.OrderDate,112)       ORDER BY                         P.ProductNumber                    ,   P.Name                    ,   CONVERT(CHAR(6),SOH.OrderDate,112)                    ;

实现步骤:
1.建立新的项目工程DynamicalColumnSample。
2.建立共享数据源(Shared Data Source),AdventureWorks2012.rds。
3.建立共享数据集(Shared Data Set),dsProduct.rsd。
4.建立一张空报表DynamicalColumnSample.rdl。
5.拖动工具箱中的Textbox控件,建立表头信息和执行时间信息。
6.拖动工具箱中的Matrix控件,建立报表数据部分.如图所示。
Matrix Control
7.在报表数据页中选择对应的dsProduct数据集,拖动数据集中的Name和ProductNumber,显示到行组合(Row Group)信息中,如图所示。
RowDrag
8.拖动dsProduct数据集中的SaleMonth列,显示到列组合(Column Group)中显示,同时添加一个新的标题行,将OrderQty和MonthlyTotal到列组合(Column Group),如图所示。
ColumnGroup
9.最后添加Subtotal到最后一列,整张报表设计如下:
ReportDesign
报表实现的效果:
1.当开始时间为01/01/2008到02/01/2008时,显示为:
20080201
2.当开始时间为01/01/2008到03/01/2008时,显示为:
20080301
3.当开始时间为01/01/2008到04/01/2008时,显示为:
20080401
实现了动态表头的功能。
文中涉及到的源代码:源代码

参考文章:
1.Using SSRS - Matrix Control to Generate Columns Dynamically

0 0
原创粉丝点击