SSRS报表开发三部曲(转)

  • Post author:
  • Post category:其他



报表开发三部曲(一):SSRS报表服务器的部署

报表可以帮助企业访问、格式化数据,并把数据信息以可靠和安全的方式呈现给使用者。目前我所在的企业在办公或管理上会经常用到报表。久而久之,我在报表开发上积累了一些经验和心得。报表开发的工具有很多,目前比较实用和流行的应该是微软的SSRS。

这是我报表系列的第一篇,先介绍一下SSRS报表服务器的安装与部署。

这里介绍的是SQL SERVER 2008 R2版本的部署,首先下载SQL SERVER 2008 R2的安装包,运行安装程序。

选择安装选项卡–点击全新安装或向现有安装添加功能。







如果是第一次安装SQL SERVER 2008选择全新安装,系统已安装SQL SERVER 2008就选择向现有实例添加新功能。




选择安装 Reporting Service 和 BIDS 功能。BIDS是用于管理和开发商业智能的工具,里面包含了报表项目和报表模型的项目模板。




之后的安装步骤这里忽略,不断点击“下一步”直至安装完成即可。

安装完成后,在开始菜单找到“Reporting Service 配置管理器”。




服务账户使用内置的“NetWork Service 账户”




Web服务URL,设置虚拟目录的名称。报表的发布和部署都将使用到这个URL路径。




报表服务专用数据库有“本机模式”和“SharePoint集成”两种模式,这里我们使用默认的“本机模式”。“SharePoint集成”模式是 SSRS 与 SharePoint Server 集成的时候使用的,我将在以后的专题详细介绍。




报表管理器URL,这里可以配置报表管理器的URL。点击URL链接可以打开“报表管理器”对已发布的报表及数据源进行管理。




以下是报表管理器的界面。




SRSS报表服务器的安装与部署介绍完毕。下一次我将会介绍如何使用 SQL SERVER 集成的IDE进行报表项目的开发。


报表开发三部曲(二):使用VS进行报表开发、设计与部署

我们再进行SSRS报表开发的时候经常会用到两个工具:一个是 SQL SERVER 安装集成的 IDE — BIDS(SQL Server Business Intelligence Development Studio);另一个是报表生成器(Report Builder)。如果是比较熟悉数据库技术和VS开发环境的开发人员,建议使用的前者;如果是普通的报表使用者,建议使用后者,因为后者的UI\UE都比较接近Office系列的操作。本文主要为大家介绍前者。

打开BIDS,经常使用VS的人会倍感亲切。点击菜单栏–文件–新建–项目。然后选择报表服务器项目,为你的报表项目起一个帅气的名字吧。




新建项目以后,在“解决方案资源管理器”窗口会看到你新建的项目底下有3个文件夹,我们现在需要做的是先建立一个可以供所有报表使用的数据源。在“共享数据源”文件夹点击右键–添加新数据源。




之后弹出如下窗口,点击“编辑”按钮,选择数据服务器、数据库、登陆名和密码,点击“确定”建立数据库连接字符串。




数据源建立好以后就可以开始生成报表了。在报表文件夹点击右键–添加新报表–进入报表向导。选择刚才新建的共享数据源点击下一步。然后点击“查询生成器”对报表的DataSet进行编辑。我们可以点击上方工具条最右边的添加表按钮进行可视化编辑生成SQL SELECT语句,也可以直接写SQL语句;如果是我做的话,我一般习惯是绑定我在数据库写好的存储过程,这样做的好处就是只要我的存储过程处理好以后,报表的列、参数和行组都可以由报表向导自动生成。方法是点击“编辑为文本按钮”,命令类型选择”StoreProcedure”,在文本框中写上你的存储过程名称。




确定–下一步–选择表格或矩阵。表和矩阵的区别就是一维表与二维表的区别。下一步–把你需要展示的列添加到显示字段,在这里还可以进行分组和分页,根据个人的需要去添加字段。




点击“下一步”选择报表的样式,最后点击完成,给报表起一个名字。OK!一份报表就这样诞生了!你可以在设计窗口对报表进行编辑和修改,点击预览看到报表运行时的效果。




最后是报表的部署,鼠标移向解决方案管理器窗口,选中项目点击右键–属性。




进入项目属性页,找到TargetServerURL设置一个可用的报表服务器Web URL,这里我们设成本机的报表服务器URL,关于报表服务器URL的详细设置可以参考我的

“报表开发三部曲”的第一篇

。然后上面几个属性是数据源、数据集、报表目标文件夹的设定。Overwrite属性是部署时是否重新数据库和数据集。




确定–选择项目–点击右键–部署,等待部署成功的提示。




部署成功后便可以在报表服务器看到新部署的报表了。

使用BIDS开发报表与部署报表介绍完毕。下一次我将会介绍如何把制作好的报表嵌套的系统程序中。


报表开发三部曲(三):将rdl报表嵌套到网页

如果rdl报表已经设计好并部署到报表服务器上,我们已经可以通过报表服务器去访问报表了。不过这还是不够的,因为报表的使用者往往是一些非技术人员或维护人员,并没有服务器的访问权限。所以为了方便报表使用者浏览报表,我们开发者往往会把报表嵌套到网页中。接下来我将为大家介绍报表嵌套网页的方法。

假设在我的报表服务器中已经存在以下报表。




然后我们打开VS,在网站中新建一个aspx网页,在工具箱里找到 报表–ReportViewer,把控件拖放到页面中。

如果是10.0版本以上的ReportViewer还需要在页面上添加ScriptManager控件。




打开页面的后台代码进行编辑。假设我们要在ReportViewer嵌入

RP_STUDENT_COURSE_POINT_STA

这个报表。我的做法写一个ReportBind()的方法在PageLoad的时候执行。在这里我的报表服务器设置是通过配置文件获取的,当然你也可以直接使用字符串作为参数去设置服务器地址。

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 
 8 public partial class Page_ReportView : System.Web.UI.Page
 9 {
10     protected void Page_Load(object sender, EventArgs e)
11     {
12         ReportBind();
13     }
14 
15     private void ReportBind()
16     {
17         ReportViewer1.ServerReport.ReportServerUrl = new Uri(CommonDefine.getReportServerUrl());//CommonDefine.getReportServerUrl()方法通过配置文件读取报表服务器的地址
18         ReportViewer1.ServerReport.ReportPath = CommonDefine.getReportProjectName() + "RP_STUDENT_COURSE_POINT_STA";//CommonDefine.getReportProjectName()方法通过配置文件读取报表所在目录
19         ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;//设定报表的访问为远程访问
20         ReportViewer1.DataBind();
21     }
22 }

CommonDefine类代码如下:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Web;
 4 using System.Configuration;
 5 
 6 /// <summary>
 7 ///CommonDefine 的摘要说明
 8 /// </summary>
 9 public class CommonDefine
10 {
11     public CommonDefine()
12     {
13         //
14         //TODO: 在此处添加构造函数逻辑
15         //
16     }
17 
18     /// <summary>
19     /// 取报表服务器地址
20     /// </summary>
21     /// <returns></returns>
22     public static string getReportServerUrl()
23     {
24         return ConfigurationManager.AppSettings.Get("ReportServer").ToString();
25 
26     }
27 
28     /// <summary>
29     /// 取报表项目名
30     /// </summary>
31     /// <returns></returns>
32     public static string getReportProjectName()
33     {
34         return ConfigurationManager.AppSettings.Get("ReportProjectName").ToString();
35     }
36 }

web.config文件(报表服务器地址的配置):

    <appSettings>
        <!--报表服务器地址-->
        <add key="ReportServer" value="http://localhost/ReportServer/"/>
        <!--报表项目名称-->
        <add key="ReportProjectName" value="/MYTEST_REPORT_PROJECT/"/>
    </appSettings>

如果需要在后台为报表传递参数,可以使用如下代码:

 1 using System;
 2 using System.Collections.Generic;
 3 using System.Linq;
 4 using System.Web;
 5 using System.Web.UI;
 6 using System.Web.UI.WebControls;
 7 using Microsoft.Reporting.WebForms;
 8 
 9 public partial class Page_ReportView : System.Web.UI.Page
10 {
11     protected void Page_Load(object sender, EventArgs e)
12     {
13         if (!Page.IsPostBack)
14         {
15             ReportBind();
16             SetReprotParameters();
17         }
18     }
19 
20     private void ReportBind()
21     {
22         ReportViewer1.ServerReport.ReportServerUrl = new Uri(CommonDefine.getReportServerUrl());    //CommonDefine.getReportServerUrl()方法通过配置文件读取报表服务器的地址
23         ReportViewer1.ServerReport.ReportPath = CommonDefine.getReportProjectName() + "RP_STUDENT_COURSE_POINT_STA";    //CommonDefine.getReportProjectName()方法通过配置文件读取报表所在目录
24         ReportViewer1.ProcessingMode = Microsoft.Reporting.WebForms.ProcessingMode.Remote;  //设定报表的访问为远程访问
25         //ReportViewer1.DataBind();
26     }
27 
28     private void SetReprotParameters()
29     {
30         List<ReportParameter> paramList = new List<ReportParameter>();
31         paramList.Add(new ReportParameter("STUDENT_NO", "STD001", true));
32         paramList.Add(new ReportParameter("STUDENT_NAME", "", true));
33         ReportViewer1.ServerReport.SetParameters(paramList);
34     }
35 }

在浏览器中查看页面。




现在已经成功把报表嵌入到页面了。



版权声明:本文为xiuping05214原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。