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