凌旭東
摘 要:在VS2008中,通過使用Reporting Services技術(shù),實(shí)現(xiàn)多級(jí)分組報(bào)表。
關(guān)鍵詞:Reporting Services;多級(jí)分組;RDL;SQL Server;Business Intelligence Development
Reporting Services提供了一個(gè)基于Web的報(bào)表管理器Report Manager,其主要功能是通過調(diào)用報(bào)表服務(wù)器提供的Web Service來完成的,可以使用類似于http://(ServerName)/Reports$(InstanceName)的URL來了解報(bào)表管理器的全貌。Reporting Services的Web Service是客戶端程序和報(bào)表服務(wù)器之間的通信接口,允許開發(fā)者創(chuàng)建任何涵蓋整個(gè)報(bào)表生命周期的相關(guān)自定義工具(除了類似于報(bào)表管理器的報(bào)表管理功能外,還具備生成、發(fā)布、打印報(bào)表等功能)。下面來介紹這種方法的對(duì)多級(jí)分組報(bào)表建立與處理過程。
1 設(shè)計(jì)流程
通過Business Intelligence Development(智能商業(yè))建立報(bào)表項(xiàng)目,繪制報(bào)表,建立Parameters(參數(shù)),借用參數(shù)對(duì)數(shù)據(jù)源數(shù)據(jù)進(jìn)行Sql腳本控制,從而達(dá)到數(shù)據(jù)過濾。將報(bào)表部署到服務(wù)器端,從而完成多級(jí)分組報(bào)表項(xiàng)目的設(shè)計(jì)。
2 實(shí)施步驟
建立報(bào)表
在VS2008中“商業(yè)智能項(xiàng)目”模板中,選擇創(chuàng)建一個(gè)“報(bào)表服務(wù)器項(xiàng)目”AWReport。
⑴添加“共享數(shù)據(jù)源”。
⑵使用向?qū)蓤?bào)表。切換到報(bào)表的“布局”選項(xiàng)卡,添加分組內(nèi)容
⑶開發(fā)工具將自動(dòng)生成具有分組結(jié)構(gòu)的報(bào)表,通過調(diào)整分組單元格的位置、內(nèi)容得到分組。
⑷設(shè)置數(shù)據(jù)來源。切換到報(bào)表的“報(bào)表數(shù)據(jù)”選項(xiàng)卡,點(diǎn)擊數(shù)據(jù)集,輸入查詢語(yǔ)句:
SELECT kc_dept, kc_a1, kc_a2, kc_a3, kc_a4, kc_a5, kc_a6, kc_a7, kc_a8, kc_a9, kc_a10, kc_a11, kc_a12, kc_a13, Purchasedate,kc_date1, c_date2, xh, ResourceID
FROM ResourceReport
WHERE (kc_a1 LIKE N'%' + CASE ISNULL(@lstResourceClass, '') WHEN '' THEN '' ELSE @lstResourceClass END + '%') AND
(kc_dept LIKE N'%' + CASE ISNULL(@CurrentUserDept, '') WHEN '' THEN '' ELSE @CurrentUserDept END + '%')
這里需要在報(bào)表中添加2個(gè)參數(shù),一個(gè)是部門@CurrentUserDept,一個(gè)是資源類型,強(qiáng)調(diào)在SQL語(yǔ)句中使用Case語(yǔ)句。
⑸預(yù)覽結(jié)果:
可以看到分組成功,有總計(jì)、合計(jì)、小計(jì),完成3級(jí)分組。
⑹在網(wǎng)頁(yè)中調(diào)用報(bào)表
1)部署服務(wù)器報(bào)表
通過Web Services管理站點(diǎn)報(bào)表,需要在報(bào)表項(xiàng)目中輸入站點(diǎn)地址,如:“http://192.168.120.120/reportserver/”。
在部署過程中IIS7版本中,慎用Asp.Net模擬,否則部署過程中需要指定的模擬賬戶,并且指定模擬賬戶需要一定的報(bào)表服務(wù)器讀寫訪問權(quán)限。
在報(bào)表服務(wù)器中指定匿名賬戶即IIS7中應(yīng)用程序池中的站點(diǎn)匿名訪問賬戶。
2)Aspx網(wǎng)頁(yè)中服務(wù)器端代碼
//指定報(bào)表服務(wù)器地址
Uri ReportUri=new Uri("http://192.168.120.120/reportserver ");
//綁定到報(bào)表控件中
ReportViewer1.ServerReport.ReportServerUrl= ReportUri;
//清除所有參數(shù)
Microsoft.Reporting.WebForms.ReportParameter[]Paras
=new Microsoft.Reporting.WebForms.ReportParameter[2];
Paras[0]=new Microsoft.Reporting.WebForms.ReportParameter("lstResourceClass",new string[1] { null });
Paras[1]=new Microsoft.Reporting.WebForms.ReportParameter("CurrentUserDept",new string[1] { null });
//由Web頁(yè)面提交報(bào)表所需參數(shù),設(shè)置參數(shù)值代碼:
.....略
//上傳參數(shù)值至報(bào)表服務(wù)器
this.ReportViewer1.ServerReport.SetParameters(Paras);
//刷新
ReportViewer1.ServerReport.Refresh();
至此報(bào)表部署已介紹完畢。通過利用Sql Server中的Case語(yǔ)句巧妙制作出3級(jí)分組報(bào)表,并可以在網(wǎng)頁(yè)中瀏覽、打印,亦可導(dǎo)出報(bào)表數(shù)據(jù)、格式到本地Word、Excel、Pdf等文件中,也可利用這些功能將數(shù)據(jù)直接寫入本地Word、Excel、Pdf等文件中。本案例在Vs2008+Sql Server2008+IIS7中10萬(wàn)數(shù)據(jù)量測(cè)試通過。
[參考文獻(xiàn)]
[1]微軟公司.MSDN Library 1995-2000版.http.www.Microsoft.com/china/msdn/library/平臺(tái)SDK/G&M/VFW.html.
[2][美]David J.Kruglinski著.潘愛民,王國(guó)印,譯.Visual C++技術(shù)內(nèi)幕.第四版.北京:清華大學(xué)出版社,1999.43-478.