摘要:介紹了SQL Server報表服務2005的特點,結合企業(yè)報表的需求,采用對RDL文件的修改和對報表服務的數(shù)據(jù)處理進行擴展的方法,給出了一個在VS環(huán)境下利用SQL Server2005中的Reporting Service 實現(xiàn)動態(tài)顯示W(wǎng)eb自定義報表的例子。
關鍵詞:報表服務;SQL2005;報表參數(shù);RDL
中圖分類號:TP391文獻標志碼:A文章編號:1009-3044(2008)12-20ppp-0c
The Research and Implementation of the enterprise Report System Based on SQL2005
HAN Min, YOU Feng, ZHAO Heng-yong
(College of Information Science and Technology, Beijing University of Chemical Technology, Beijing 10029, China)
Abstract:Introduced the characteristic of SQL Server 2005 reporting services. Integrate the demand of enterprise report, uses the method of modifying the RDL document and processing the data of reporting services, giving an example of using Reporting Service of SQL Server2005 to realize dynamic display Web user-defined report under the VS environment.
Key words:Report service; SQL2005; Report Parameter; RDL
1 引言
隨著Internet的發(fā)展,企業(yè)級應用軟件逐漸由C/S結構轉向B/S結構,企業(yè)管理信息系統(tǒng)正逐步由傳統(tǒng)的客戶端/服務器模式向Internet轉移,作為其輸出展現(xiàn)端,越來越多的報表將在Web 環(huán)境下開發(fā)和應用[1]。在企業(yè)級的報表解決方案中,不少開發(fā)人員采用集成于Visual Studio中的Crystal Report (水晶報表)工具實現(xiàn),但水晶報表作為第三方開發(fā)組件,對其應用時需要編寫大量的程序且部署復雜。由于SQL Server的Reporting Services(報表服務)采用集中存儲和管理報表、設置策略以確保對報表及文件夾的安全訪問、控制處理和分發(fā)報表的方式,使在企業(yè)業(yè)務中使用報表的方式標準化,并且報表服務使報表的設計生成更加容易,具有和Visual Studio集成性好,易于部署,用戶的個性化設置靈活的特性,本文提出利用SQL 2005中的Reporting Service 實現(xiàn)企業(yè)報表系統(tǒng)的解決方案。
2 Reporting Service簡介
Reporting Services是微軟在2003年作為SQL Server2000產(chǎn)品套件的一部分發(fā)布的,2005年在SQL Server2005中進行了擴展。SQL Server報表服務是一種基于服務器的新型報表平臺,該平臺構建在 .NET Framework 2.0 上并與 SQL Server 2005集成在一起,可用于創(chuàng)建和管理包含來自關系數(shù)據(jù)源和多維數(shù)據(jù)源數(shù)據(jù)的表格報表、矩陣報表、圖形報表和自由格式報表,可以通過基于 Web 的連接來查看和管理創(chuàng)建的報表,可以使用一個擴展的基于 Web服務的 API 將豐富的報表生成功能集成到應用程序中,因此,Reporting Services 是在各種企業(yè)報表開發(fā)環(huán)境中生成報表的極佳工具。
2.1 RDL
SQL Server2005報表服務定義了一個XML標準RDL(報表定義語言),是一種公開的XML定義報表的格式,因此,可以通過直接編寫和修改RDL或者創(chuàng)建自定義工具生成相應的報表格式,滿足用戶對報表的自定義的需求,達到對報表服務的靈活性擴展。在SQL Server或VS2005環(huán)境中,可以使用圖形化的制作工具編輯RDL文件。
2.2 Reporting Service的報表設計工具
Reporting Service包括兩個報表設計工具:報表生成器和報表設計器。在企業(yè)級報表系統(tǒng)的應用中可針對不同的報表需求,選擇相應的報表設計工具。
報表生成器是一個發(fā)布在互聯(lián)網(wǎng)上的Windows客戶端應用程序,可以基于報表模型生成報表,報表生成器使用了智能客戶端技術,在不必了解基礎數(shù)據(jù)庫、報表定義及Reporting Service存儲報表的方式情況下,可以使用報表模型實時生成報表。
報表設計器是一種用于創(chuàng)建和發(fā)布報表定義的工具。通過報表設計器可以訪問所有報表定義功能。報表設計器提供了圖形化的設計界面,可以在其中定義數(shù)據(jù)源和查詢信息,利用其提供的報表項進行報表格式的設計,添加要顯示的數(shù)據(jù)源字段。在報表設計器中通過對相應的報表項設置不同數(shù)據(jù)來源參數(shù)的方式,實現(xiàn)用戶自定義報表格式和對報表數(shù)據(jù)的動態(tài)查詢。
2.3 報表管理器
在SQL Server2005報表服務中,報表管理器是包含于報表服務中的一個基于Web 的管理應用程序,它使用ASP.NET和Web 服務API的報表服務器的界面創(chuàng)建。報表管理器應用程序駐留在Web 服務器上并且為Web 瀏覽器訪問,為報表服務器數(shù)據(jù)庫中的內容提供一個管理界面,在報表管理中可以完成用戶對報表訪問的安全設置、站點設置、文件夾的處理、報表屬性設置及報表數(shù)據(jù)源的處理等應用。可以通過報表服務自身提供的報表服務器的URL訪問報表管理器頁面,實現(xiàn)企業(yè)級報表的Web 管理,也可以通過創(chuàng)建一個利用相同報表服務Web 服務API的應用程序來創(chuàng)建企業(yè)要求的自定義的報表管理器[2]。
3 企業(yè)報表系統(tǒng)的方案設計及實現(xiàn)原理
3.1 企業(yè)報表系統(tǒng)的實現(xiàn)技術。
為了滿足企業(yè)級Web 報表系統(tǒng)的性能需求,其技術方案如圖1所示:
3.2 企業(yè)報表系統(tǒng)實現(xiàn)原理
為了實現(xiàn)自定義報表,本文設計了基于ASP.NET 和SQL Server報表服務2005的Web 自定義報表模型:建立報表格式信息數(shù)據(jù)庫和報表數(shù)據(jù)信息數(shù)據(jù)庫,通過ADO.NET訪問數(shù)據(jù)庫。報表數(shù)據(jù)采用ADO.NET DataSet作為數(shù)據(jù)源綁定,根據(jù)SQL Server報表服務2005提供的數(shù)據(jù)處理接口在Visual Studio2005中編寫代碼實現(xiàn)數(shù)據(jù)集的動態(tài)綁定[3]。對SQL Server報表服務2005進行參數(shù)設置實現(xiàn)報表格式的自定義。首先,在根據(jù)企業(yè)的應用需求確定報表表格的自定義參數(shù),即對報表服務的報表項(表、文本框、列表、圖像和矩形等)建立參數(shù)表;其次,對報表的數(shù)據(jù)處理進行擴展應用,根據(jù)查詢排序等設置從數(shù)據(jù)庫中提取數(shù)據(jù),動態(tài)生成DataSet數(shù)據(jù)源,在ASP.NET中,將ado.net DataSet 動態(tài)綁定到報表顯示控件ReportView; 最后,在ASP.NET中,對ReportView控件編寫代碼實現(xiàn)對SQL 2005的報表服務的訪問。實現(xiàn)原理如圖2所示。下面結合實例講解企業(yè)自定義報表的實現(xiàn)。
3.3 報表格式的自定義
SQL Server報表服務2005的報表模板格式的自定義可以由以下兩種方式實現(xiàn)。第一種是在報表服務外部,通過XML文檔的修改實現(xiàn)報表的自定義,此方式對熟悉XML語言的用戶適用。第二種方式針對不熟悉報表開發(fā)環(huán)境的一般用戶,通過選擇相關報表格式參數(shù)的方式實現(xiàn)報表模板格式的自定義。
修改XML 文檔實現(xiàn)報表的自定義,可以在Visual Studio 環(huán)境下選擇SQL Server Business Intelligence Development Studio,通過創(chuàng)建報表項目在報表設計器窗體以圖形化界面的方式對報表模板進行定義,或者選擇報表向導的方式完成對報表模板的定義。由于定義報表的RDL文件是一個XML文檔,該XML文檔具有報表所有屬性的標記選項卡的標準定義,報表設計元素的屬性值可以用一個文本編輯器修改,因此可以在報表服務器外部通過修改編寫符合報表定義的XML文件或修改已有的XML文件的方式實現(xiàn)報表模板的自定義[4]。
修改報表格式參數(shù)實現(xiàn)報表格式的自定義,在定義報表時,可以對組成報表的報表項通過對ReportParameter屬性的操作,即對構成報表的文本框、表格、矩形、列表、圖像等進行相應得參數(shù)設置,這些參數(shù)可通過表達式設置,也可以通過查詢數(shù)據(jù)庫中的報表參數(shù)信息進行設置,從而實現(xiàn)用戶選擇相應的報表參數(shù)完成報表格式的自定義。
3.4 報表數(shù)據(jù)處理
在報表設計器中,通過對數(shù)據(jù)庫查詢設置報表數(shù)據(jù)集。區(qū)別于.NET中的數(shù)據(jù)集,報表服務中的數(shù)據(jù)集指一個查詢表達式或一個用于查詢數(shù)據(jù)庫中對象的引用,包括在報表的定義中??梢栽诙x數(shù)據(jù)集的查詢中設置參數(shù),也可以在存儲過程中定義參數(shù)實現(xiàn)數(shù)據(jù)篩選,參數(shù)項可以由一個靜態(tài)列表或者一個數(shù)據(jù)驅動的查詢填充,從而實現(xiàn)用戶選擇不同的參數(shù)對報表的各種查詢顯示[5]。根據(jù)SQL Server報表服務2005提供的數(shù)據(jù)處理接口,通過ADO.NET訪問數(shù)據(jù)庫,報表數(shù)據(jù)采用ADO.NET DataSet作為數(shù)據(jù)源綁定,在Visual Studio2005中編寫代碼實現(xiàn)數(shù)據(jù)集的動態(tài)綁定。
3.5 報表的顯示輸出
SQL Server報表服務2005 能夠集成到不同的應用程序中,且具有不同的顯示報表的方法:使用URL來訪問報表,使用報表服務的Web服務以編程的方式顯示報表,使用ReportViewer控件顯示報表和使用SharePoint顯示報表。本文采用ReportViewer控件顯示報表的方式實現(xiàn)報表的顯示,該顯示方式可以完成在顯示頁面中的瀏覽、打印、保存、查詢、翻頁等功能。由于ReportViewer是客戶端控件,可以使用來自任何數(shù)據(jù)源的數(shù)據(jù),既可在Windows窗體使用,也可在Web窗體使用,故根據(jù)企業(yè)報表顯示的需求,采用在Web 窗體使用ReportViewer實現(xiàn)報表的顯示輸出。首先,將定義好的報表添加到ASP.NET 應用程序中,打開Choose Toolbox Items檢查ReportViewer控件,將其添加到引用中。其次,在Web窗體上添加ReportViewer控件和其他輸出頁面進行交互的控件如標簽和下拉列表框等。最后,設置ReportViewer的ReportPath和ReportServerUrl屬性,并編寫相應代碼完成報表參數(shù)的傳遞,參數(shù)作為RportParameter對象數(shù)組來管理,報表參數(shù)通過傳遞給ServerReport對象的SetParameters方法的數(shù)組來填充。其部分代碼如下所示:
private void ViewReport()
{
string sReportServerURL = \"http://LocalHost/ReportServer\";
string sReportPath =\"/Professional SQL Reporting Services/enterprise report \";
Microsoft.Reporting.WinForms.ReportParameter[] Param;
Param[0] =newMicrosoft.Reporting.WinForms.ReportParameter
(\"OrderDateFrom\", this.dtOrderDateFrom.Value.ToString());
Param[1]
=newMicrosoft.Reporting.WinForms.ReportParameter
(\"OrderDateTo\",this.dtOrderDateTo.Value.ToString());
reportViewer1.ProcessingMode =
Microsoft.Reporting.WinForms.ProcessingMode.Remote;
reportViewer1.ServerReport.ReportServerUrl
= new Uri(sReportServerURL);
reportViewer1.ServerReport.ReportPath = sReportPath;
reportViewer1.ServerReport.SetParameters(Param);
reportViewer1.ShowParameterPrompts = 1;
reportViewer1.ShowPromptAreaButton = 1;
reportViewer1.RefreshReport();
}
4 結束語
本文提出的在.NET平臺下利用SQL Server2005中的報表服務實現(xiàn)企業(yè)報表系統(tǒng)的方案,滿足了企業(yè)對報表靈活設置參數(shù)實現(xiàn)對某些報表項的自定義和易于更新和維護的需求。該方案適用于在.NET 平臺下生成各類企業(yè)報表。由于SQL Server報表服務和SQL數(shù)據(jù)庫結合的緊密并且具有很好的擴展性,以及對企業(yè)商業(yè)智能(BI)的支持,可進一步從數(shù)據(jù)處理擴展、交付擴展、顯示擴展和安全擴展等領域延伸企業(yè)報表系統(tǒng)的應用。
參考文獻:
[1]張亞平、賀占莊,B/S架構下動態(tài)報表的一種實現(xiàn)方式[J],計算機技術與發(fā)展,2007,17(4):93-95,103.
[2]paul Truly 、謝文亮(譯),SQL Server2005報表服務高級編程[M],北京:清華大學出版社,2007.
[3]陳傳波、黃剛、劉清慧,一種基于ASP.NET的自定義報表的設計與實現(xiàn)[J],計算機工程與科學,2006,28(6):112-114.
[4]菅言彬,基于XML的Web智能報表的研究與實現(xiàn)[D],華北電力大學,2005.
[5]劉福軍、申永軍、劉杰、史維祥,存儲過程和OLE技術在報表設計中的應用[J],計算機與現(xiàn)代化,2003,(3):73-75,7.
收稿日期:2008-03-27
作者簡介:韓敏(1978-),女,內蒙古鄂爾多斯人,碩士研究生,主要研究領域為過程工業(yè)監(jiān)測平臺;尤楓(1963-),男,遼寧沈陽人,碩士,講師,主要研究領域為信息安全技術、軟件開發(fā)自動化;趙恒永(1940-),男,河北保定人,教授,主要研究領域為企業(yè)實時信息系統(tǒng)平臺、生產(chǎn)過程控制、數(shù)據(jù)挖掘與智能決策。