Reporting Services – 報表服務介紹
SQL Reporting Services 提供的功能
一般常用的 BI 報表功能,SQL Reporting Service 都有,SQL Reporting Services 報表功能含以下:
- drill-down 下鑽
- drill-through 鑽取
- Parent-Child report structure 母、子報表架構
- Web report rendering 整個報表服務,是個 Web Application,主要以 Web 作為交付媒介,因此,可融合到各種門戶軟體中,與 SharePoint 整合更是此產品的設定項之一
- Scheduled report delivery 定時自動以電郵傳送報表;與 SharePoint 整合的話,可以選擇傳送電郵或新增檔案至文件庫
- Various email delivery options 電郵交付格式可以是嵌在電郵文字、或者作為附件
- Permission Control 所有報表都有許可權管理;與 SharePoint 整合的話,報表格式檔存在報表庫,許可權管理與 SharePoint 一般的文件庫相同
- Flexible service structure 靈活的服務架構,下章節介紹
- Support Various data sources 內建支援多種資料來源,不單是 MS SQL Server
- Support Various output format 支援多種報表匯出格式,對 Excel 的匯出,比 Crystal Report 更優勝,畢竟兩套都是微軟的
- Web-based report design interface 除了使用專用的 BI Studio 來設計報表,還可以以 web 介面設計
SQL Reporting Services 對於其他同類產品的動態報表等等那些 「eye candy」的確不及,沒有 Flash,沒有 Silverlight。如果對於這些設計外表要求特別高的話,就要選用其他報表服務軟體了。我認為那些是次要的,特別對於首次接觸 BI 的公司來說,對 IT 能力較弱的公司,簡單部署和低價格可能才是他們主要考慮。
支援的資料來源
- Microsoft SQL Server
- OLE DB
- Microsoft SQL Server Analysis Services
- Oracle
- ODBC
- XML
- Report Server Model
- SAP Netweaver BI
- Hyperion Essbase
由於支援的資料來源含 ODBC,就是說基本上有 ODBC 驅動的都能連上,包括一張 Excel 表。雖然,ODBC 諸多限制…。
支援的匯出格式
- Excel
- XML
- CSV
- mHTML
- TIFF
架構
上面有提到,SQL Reporting Services 是個 web application,架構當然是基於 Web。
注意它是附帶在 SQL Server 的服務之一,報表快取、系統設定等等是存在 SQL Server 的獨立專用資料庫內。
整個報表定義,架構拆分成這樣的:
資料庫 – 資料來源 – 資料集 – 查詢 – 報表格式
物理檔案來看,分開 RDS 和 RDL 兩個檔案。RDS 存放資料來源,含伺服器地址、資料庫、登入資訊等。RDL 存放資料集、查詢、和報表格式定義。
從以上可以看到,資料庫伺服器和報表格式,是分開的。當然你嵌入在報表格式內亦可,我不建議這樣做。資料集和報表格式也是拆開的,一張報表可以含多個數據集和查詢。
報表可用控制元件
可能大家看完這裡會有點失望,可用控制元件不多。
- 文字文字
- 線
- 資料表 (即資料重複區域)
- 矩陣 (資料 Matrix 型重複區域)
- 清單 (矩形區擺放資料,以此矩形重複)
- 圖片
- 子報表
- 圖表
對於靜態報表來說,應該也夠了。我還沒碰到我需要但沒有的控制元件。注意,要 mouse hover 然後報表立刻響應,而變更某些顯示的,Sorry 了,做不到,SQL Reporting Services 不是個程式設計的環境,沒有聽取滑鼠事件的方法。
圖表型別
針對 SQL Reporting Services 2005 版,圖表型別如下:
- Vertical Bar Chart
- General Bar Chart
- Stacked Bar Chart
- % Stacked Bar Chart
- Horizontal Bar Char
- General Bar Chart
- Stacked Bar Chart
- % Stacked Bar Chart
- Line Chart
- General Line Chart 折線圖
- Smooth Line Chart 曲線圖
- Pie Chart
- General Pie Chart 普通餅圖
- Exploded Pie Chart 分裂餅圖
- XY scatter
- Point 點分散圖
- Line 線分散圖
- Curve 曲線分散圖
- Bubble Chart 泡泡圖
- Area Chart
- General Area Chart 一般
- Stacked Area Chart
- % Stacked Area Chart
- Doughnut Chart
- General Doughnut 一般環形圖
- Exploded Doughnut 分裂環形圖
- Stock Chart
- High-Low-Close 股票圖 – 最高-最低-收盤
- Open-High-Low-Close 股票圖 – 開盤-最高-最低-收盤
- Candlestick 股票圖 – 陰陽燭
全部都可以調為立體、圖例框顯示、位置、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,我也不想重複微軟的介紹了,想知道可以設定什麼,自己看這裡:
示例:
運用 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 。
- 這示範是用 textbox 讓使用者輸入一個報表引數,點選按鈕之後在 reportviewer 控制元件顯示
- 開個新的專案,拖放幾個控制元件,包括 reportviewer ,如右圖
- 在 reportviewer 控制元件屬性 – 雜項中,填上伺服器完整 URL、在報表路徑中填寫完整的 URL 路徑、Process Mode 改為 Remote
- 刪除預設的表格 On Load 控制代碼,加上點選按鈕的控制代碼,下面有示範程式碼。本例項只有一個引數,叫做 IPE_SO_NUM
- 完成
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" %>
<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>