一般常用的 BI 报表功能,SQL Reporting Service 都有,SQL Reporting Services 报表功能含以下:
SQL Reporting Services 对于其他同类产品的动态报表等等那些 「eye candy」的确不及,没有 Flash,没有 Silverlight。如果对于这些设计外表要求特别高的话,就要选用其他报表服务软件了。我认为那些是次要的,特别对于首次接触 BI 的公司来说,对 IT 能力较弱的公司,简单部署和低价格可能才是他们主要考虑。
由于支持的数据源含 ODBC,就是说基本上有 ODBC 驱动的都能连上,包括一张 Excel 表。虽然,ODBC 诸多限制…。
上面有提到,SQL Reporting Services 是个 web application,架构当然是基于 Web。
注意它是附带在 SQL Server 的服务之一,报表缓存、系统设置等等是存在 SQL Server 的独立专用数据库内。
整个报表定义,架构拆分成这样的:
数据库 – 数据源 – 数据集 – 查询 – 报表格式
物理档案来看,分开 RDS 和 RDL 两个档案。RDS 存放数据源,含服务器地址、数据库、登入信息等。RDL 存放数据集、查询、和报表格式定义。
从以上可以看到,数据库服务器和报表格式,是分开的。当然你嵌入在报表格式内亦可,我不建议这样做。数据集和报表格式也是拆开的,一张报表可以含多个数据集和查询。
可能大家看完这里会有点失望,可用控件不多。
对于静态报表来说,应该也够了。我还没碰到我需要但没有的控件。注意,要 mouse hover 然后报表立刻响应,而变更某些显示的,Sorry 了,做不到,SQL Reporting Services 不是个编程的环境,没有听取鼠标事件的方法。
针对 SQL Reporting Services 2005 版,图表类型如下:
全部都可以调为立体、图例框显示、位置、XY轴等等。可以在图表中设置筛选资料。颜色不能自定义,用 Office 2003 的那套图表色板。
微软收购了 Dundas Chart,在图表上,在 SQL Reporting Service 2008 版中有很大的改进。在没发布 2008 版前,我试用过 Dundas Chart 套件在 SharePoint 上,效果非常好,图表类型也多了点。但 SQL Server 2008 和它的报表服务我没用过,不发表意见了。
前面说了 SQL Reporting Services 是个 Web Application,集成当然也跟 Web 息息相关。五大方面:
URL 格式含处理参数 | 运用其他应用程序,组成 URL,引用浏览器用 URL 打开 |
Win Form 应用程序 | Report Viewer 控件 |
嵌入网页内 | IFrame |
SharePoint | Report Viewer Web 部件,可以用另一个 Web 部件发送报表参数 |
Web Service | SOAP API |
除了第一个 URL 方法,和第四个 web service,其他的都跟内置的 Web 展示报表出来的效果极度相似,不多说了。
URL,我也不想重复微软的介绍了,想知道可以设置什么,自己看这里:
http://msdn.microsoft.com/en-us/library/ms152835(SQL.90).aspx
运用 URL 参数打开
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render&rs:toolbar=false&
rc:parameter=hidden
http://server/reportserver?/ABC_Dept/abc_report.rdl&rs:command=render&rs:toolbar=false&
rc:parameters=false&DocNumber=123
Win Form 示范
示例环境:VS 2008 英文版;.NET Framework 3.5;C#;SQL Server 2005;SQL Reporting Service;报表存于服务器上;本机登入域使用登入名和密码认证 SQL Reporting Services,要改的自己 impersonate。
实际上,.NET Framework 2.0 以上已有 reportviewer 这控件。看不见这控件请自己加引用,命名空间为 Microsoft.Reporting.WinForms 。
|
private void button1_Click( object sender, EventArgs e) |
|
{ |
|
Microsoft.Reporting.WinForms.ReportParameter[] p = |
|
new Microsoft.Reporting.WinForms.ReportParameter[1]; |
|
p[0] = new Microsoft.Reporting.WinForms.ReportParameter(@"IPE_SO_NUM", |
|
this .textBox1.Text.ToString()); |
|
this .reportViewer1.ServerReport.SetParameters(p); |
|
this .reportViewer1.Refresh(); |
|
} |
注:Set.Parameters 方法,只接受 ReportParameter 的 Array,即使只有一个。
IFrame 示例
<iframe src="server/reportserver?abc_report.rdl&rs:command=render" name="out"></iframe> |
相信这个不用多说了。
SharePoint 集成
可以加入超链接直接指向报表定义档,SharePoint 会自动以 SharePoin t 的方式 render 报表(Web Rendering 其实外观改了,内容功能是一样的);或者使用 Report Viewer 网页部件,此网页部件是把 SQL Reporting Services 配置为集成 SharePoint 后才会出现。
对于配置为集成,注意集成后 reportserver 此报表服务将会被 SharePoint 所代替,原来的管理器和存报表的位置将不再可用,集成前报表服务已在用的记得要把报表备份。另外,集成 SharePoint 后,默认是无法再用 URL 打开报表,URL 参数亦不再可用,要继续用的需要在 IIS 配置打开新端口。
Web Service
Web Service 要写示例的话有点长,我另开一文来说明。
WEB形式下事例说明:
//后台带码
//带参数报表显示
protected void Page_Load(object sender, EventArgs e)
{
ReportParameter paraDateStar = new ReportParameter("DateStar","2010-10-1");
ReportParameter paraDateEnd = new ReportParameter("DateEnd","2010-10-30");
ReportParameter[] p=new ReportParameter[]{paraDateStar,paraDateEnd};
ReportViewer2.ServerReport.SetParameters(p);
ReportViewer2.ServerReport.Refresh();
}
//前台代码
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="WebApplication3._Default" %>
<%@ Register Assembly="Microsoft.ReportViewer.WebForms, Version=9.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
Namespace="Microsoft.Reporting.WebForms" TagPrefix="rsweb" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<div>
<span>
<rsweb:ReportViewer ID="ReportViewer1" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="400px" ProcessingMode="Remote" Width="421px">
<ServerReport ReportPath="/Assemble/Test6" ReportServerUrl="http://192.168.7.61/reportserver" />
</rsweb:ReportViewer>
</span>
<span>
<rsweb:ReportViewer ID="ReportViewer2" runat="server" Font-Names="Verdana"
Font-Size="8pt" Height="400px" ProcessingMode="Remote" Width="400px">
<ServerReport ReportPath="/Assemble/QA_Sel_ForUpdate"
ReportServerUrl="http://192.168.7.61/reportserver" />
</rsweb:ReportViewer>
</span>
</div>
<div>
<div><a href="http://192.168.7.61/ReportServer?/Assemble/QA_Sel_ForUpdate&DateStar=2010-10-1&DateEnd=2010-10-18" target="_blank">QA查寻</a></div>
<div><a href="http://192.168.7.61/ReportServer?/Assemble/QAQuery2&DateStar=2010-10-1&DateEnd=2010-10-18" target="_blank">QA分类查寻</a></div>
<div><a href="http://192.168.7.61/ReportServer?/QA报表/test3" target="_blank">Test3</a></div>
<div><a href="http://192.168.7.10/ReportServer?/Assemble/test3" target="_blank">Test3</a></div>
</div>
</div>
</form>
</body>
</html>