剖析SQL Server 2005中的報(bào)告服務(wù)架構(gòu)
開(kāi)發(fā)人員可以創(chuàng)建其它定制提交擴(kuò)展。
九、 生成擴(kuò)展Report Server生成擴(kuò)展負(fù)責(zé)把一個(gè)報(bào)告的設(shè)計(jì)和數(shù)據(jù)轉(zhuǎn)換成一種設(shè)備特定的格式。RS中包括的擴(kuò)展包括HTML(3.2和4.0),Microsoft Excel,Text/CSV,XML,圖像(BMP,EMF,GIF,JPEG,PNG,TIFF,WMF),以及PDF生成。注意 不象 SSRS 2000,它把Excel文件生成為一個(gè)含有特定Excel元標(biāo)記的MHTML文件,SSRS 2005把報(bào)告生成為Excel的本機(jī)二進(jìn)制格式。因?yàn)樽詈蟮纳呻A段僅是與數(shù)據(jù)處理松耦合的,它能夠使用戶為同一個(gè)報(bào)告選擇不同的生成選項(xiàng)而不需要重新查詢數(shù)據(jù)源。另外,開(kāi)發(fā)人員還能夠創(chuàng)建其它定制生成擴(kuò)展。十、 安全擴(kuò)展 本文經(jīng)常使用術(shù)語(yǔ)'安全擴(kuò)展',好象它是一個(gè)概念。事實(shí)上,存在兩種相互聯(lián)系的擴(kuò)展:· 認(rèn)證擴(kuò)展,負(fù)責(zé)建立用戶標(biāo)識(shí)· 授權(quán)擴(kuò)展,負(fù)責(zé)檢查是否一個(gè)標(biāo)識(shí)能夠存取一個(gè)特定SSRS資源SSRS包括一個(gè)基于Windows認(rèn)證的安全擴(kuò)展。在建立一個(gè)用戶標(biāo)識(shí)后,一個(gè)授權(quán)過(guò)程決定是否配置一個(gè)Windows用戶(或包含一個(gè)用戶的一個(gè)Windows組)以存取一個(gè)報(bào)告服務(wù)器上的一個(gè)特別資源。開(kāi)發(fā)人員能夠創(chuàng)建其它定制安全擴(kuò)展。一個(gè)SSRS實(shí)例僅能使用一個(gè)安全擴(kuò)展。也就是說(shuō),或者使用Windows或者使用一個(gè)定制擴(kuò)展,同一時(shí)刻只能使用一個(gè)。十一、 Report Server數(shù)據(jù)庫(kù)SSRS目錄下包括兩個(gè)數(shù)據(jù)庫(kù):Report Server數(shù)據(jù)庫(kù)(默認(rèn)名是ReportServer)和ReportServer臨時(shí)數(shù)據(jù)庫(kù)(默認(rèn)名是ReportServerTempDB)。Report Server數(shù)據(jù)庫(kù)是一個(gè)SQL Server數(shù)據(jù)庫(kù),它能夠存儲(chǔ)SSRS配置部分,報(bào)告定義,報(bào)告元數(shù)據(jù),報(bào)告歷史,緩存政策,快照,資源,安全設(shè)置,加密的數(shù)據(jù),調(diào)度和提交數(shù)據(jù),以及擴(kuò)展信息。注意 盡管用戶能夠直接存取在SSRS目錄下的數(shù)據(jù)庫(kù)并且能夠直接修改SSRS使用的對(duì)象;但在實(shí)踐中,不推薦(或不支持)這樣做,因?yàn)樵赟SRS目錄下的內(nèi)在數(shù)據(jù)和結(jié)構(gòu)不能被保證與不同版本的SSRS、服務(wù)包或補(bǔ)丁相兼容。請(qǐng)把Report Server數(shù)據(jù)庫(kù)當(dāng)作產(chǎn)品數(shù)據(jù)庫(kù)之一來(lái)對(duì)待。盡管許多開(kāi)發(fā)人員都習(xí)慣把RDL存儲(chǔ)在一個(gè)單獨(dú)的倉(cāng)庫(kù)中,并因此導(dǎo)致經(jīng)常恢復(fù)RDL;但是,損失快照數(shù)據(jù)能夠帶來(lái)消極的業(yè)務(wù)影響。例如,用戶可能使用快照的報(bào)告'相對(duì)靜止'數(shù)據(jù)的能力來(lái)作一些業(yè)務(wù)決定。SSRS使用的另一個(gè)數(shù)據(jù)庫(kù)是Report Server臨時(shí)數(shù)據(jù)庫(kù)。這個(gè)數(shù)據(jù)庫(kù)負(fù)責(zé)存儲(chǔ)中間處理產(chǎn)品,例如緩沖的報(bào)告、會(huì)話和執(zhí)行數(shù)據(jù)等。注意 為了把臨時(shí)快照存儲(chǔ)在文件系統(tǒng)而不是數(shù)據(jù)庫(kù)中,管理員應(yīng)該完成下列步驟。首先,修改RSReportServer.config,并把WebServiceUseFileShareStorage和WindowsServiceUseFileShareStorage設(shè)置為True。然后,把FileShareStorageLocation設(shè)置為一個(gè)全稱路徑;默認(rèn)路徑是'C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesRSTempFiles'。不同于SQL Server的tempdb,當(dāng)在ReportServerTempDB中的數(shù)據(jù)存儲(chǔ)時(shí)限超過(guò)SQL Server時(shí),Report Server將會(huì)重啟。而且,Report Server能夠周期性地清除ReportServerTempDB中的到期的和孤立的數(shù)據(jù)。在任何時(shí)間,所有的ReportServerTempDB中的數(shù)據(jù)都能夠被以最小(或毫無(wú))影響刪除掉。例如,這種用戶可能體驗(yàn)到的最小的影響是帶來(lái)一種暫時(shí)的性能減弱(由于損失了緩存數(shù)據(jù),而且失去了一個(gè)執(zhí)行狀態(tài))。執(zhí)行狀態(tài)被存儲(chǔ)在表SessionData中。執(zhí)行狀態(tài)結(jié)果的損失可能導(dǎo)致一個(gè)錯(cuò)誤:'Execution 'j4j3vfblcanzv3qzcqhvml55' cannot be found (rsExecutionNotFound)'。為了解決執(zhí)行狀態(tài)損失問(wèn)題,用戶需要重新打開(kāi)一個(gè)報(bào)告。提示 SSRS不能恢復(fù)數(shù)據(jù)庫(kù)中刪除的ReportServerTempDB或表。為了快速地從數(shù)據(jù)庫(kù)中對(duì)象的錯(cuò)誤刪除中進(jìn)行恢復(fù),應(yīng)該保留一個(gè)腳本或一個(gè)空ReportServerTempDB的備份。在一個(gè)向外擴(kuò)展的發(fā)布中,SSRS目錄是被跨該發(fā)布中所有的報(bào)告服務(wù)器共享的。十二、 調(diào)度和提交處理器調(diào)度和提交處理器宿主在SSRS Windows服務(wù)中,負(fù)責(zé)進(jìn)行事件監(jiān)視。當(dāng)該調(diào)度和提交處理器收到一個(gè)事件時(shí),它與報(bào)告處理器協(xié)作共同生成一個(gè)報(bào)告。在生成一個(gè)報(bào)告后,調(diào)度和提交處理器使用提交擴(kuò)展來(lái)提交該報(bào)告。調(diào)度和提交處理器利用SQL Server Agent作為一個(gè)調(diào)度引擎。這個(gè)調(diào)度是基于擁有該調(diào)度的Report Server的本地時(shí)間。當(dāng)一個(gè)管理員創(chuàng)建一個(gè)新的調(diào)度時(shí),SSRS創(chuàng)建一個(gè)SQL Server Agent作業(yè)以運(yùn)行于請(qǐng)求的調(diào)度。然后,SSRS在ReportServer數(shù)據(jù)庫(kù)的Schedule表中增加一個(gè)新行。該行的ScheduleId字段是該作業(yè)的標(biāo)識(shí)符。主管能夠調(diào)度訂閱、報(bào)告歷史和快照?qǐng)?zhí)行。當(dāng)調(diào)度時(shí)間已到,SQL Server Agent通過(guò)執(zhí)行該調(diào)度作業(yè)生成一個(gè)事件。然后,這個(gè)作業(yè)在ReportServer數(shù)據(jù)庫(kù)的事件表格中插入一個(gè)行。這個(gè)行擔(dān)當(dāng)一個(gè)調(diào)度和提交處理器的事件。調(diào)度和提交處理器每隔PollingInterval秒檢查事件表并初始化適當(dāng)?shù)膭?dòng)作以響應(yīng)一個(gè)事件。注意 這個(gè)PollingInterval是在rsreportserver.config配置文件中指定的,默認(rèn)情況下,被設(shè)置為10秒。當(dāng)SSRS Windows服務(wù)沒(méi)有運(yùn)行(調(diào)度和提交處理器沒(méi)有處理事件)或SQL Server Agent沒(méi)有運(yùn)行(這個(gè)代理沒(méi)有生成事件)時(shí),調(diào)度和提交處理將會(huì)'中斷'。注意 當(dāng)SSRS Windows服務(wù)并沒(méi)有運(yùn)行而SQL Server Agent已運(yùn)行時(shí),SQL Server Agent的作業(yè)歷史將顯示:該被調(diào)度的請(qǐng)求('插入事件')成功運(yùn)行。該作業(yè)仍然會(huì)成功,盡管被調(diào)度的操作能完成,因?yàn)檎{(diào)度和提交處理器并沒(méi)有運(yùn)行來(lái)處理該事件。
十三、 Report Builder(SQL Server 2005中新增)在以前的SSRS版本中最常用的一個(gè)特征是開(kāi)發(fā)終端報(bào)告的能力。微軟在SSRS 2005中實(shí)現(xiàn)了這一功能。Report Builder是一個(gè)ClickOnce,特定的終端用戶報(bào)告創(chuàng)作和出版工具,它提供拖放且容易使用的報(bào)告設(shè)計(jì)功能。注意 你可以通過(guò)搜索http://www.microsoft.com和閱讀http://msdn.microsoft.com/msdnmag/issues/04/05/clickonce/default.aspx查找更多的有關(guān)ClickOnce應(yīng)用程序的信息。作為一個(gè)典型的ClickOnce應(yīng)用程序,Report Builder是從一個(gè)瀏覽器中發(fā)布的,并在一個(gè)客戶端計(jì)算機(jī)上執(zhí)行。在安裝期間,Report Builder不要求管理員權(quán)限,它運(yùn)行于一個(gè).NET代碼存取安全的封裝中。為了發(fā)布Report Builder,點(diǎn)擊報(bào)告管理器的工具欄上的'Report Builder'按鈕。作為選擇,你可以使用'http://<server>/ReportServer/ReportBuilder/ReportBuilder.application'URL來(lái)啟動(dòng)Report Builder。Report Builder被發(fā)布 到'C:Documents and Settings<UserName>Local settingsApps2.0<obfuscated directory>'路徑下。在你可以使用Report Builder之前:· 你必須擁有適當(dāng)?shù)臋?quán)限,并且成為該報(bào)告消費(fèi)者角色或一個(gè)定制角色的一個(gè)成員。· 必須至少出版一個(gè)報(bào)告模型。· 一個(gè)互聯(lián)網(wǎng)瀏覽器必須允許你下載文件。使用Report Builder開(kāi)發(fā)的報(bào)告能夠報(bào)告設(shè)計(jì)器所解釋。十四、 報(bào)告模型設(shè)計(jì)器(Report Model Designer,SQL Server 2005中新增)報(bào)告模型設(shè)計(jì)器負(fù)責(zé)生成Report Builder需要的報(bào)告模型。一個(gè)模型抽象了內(nèi)在數(shù)據(jù)的復(fù)雜性;例如,一個(gè)模型允許把表名和表中的列名映射成一個(gè)終端用戶能夠容易理解的業(yè)務(wù)術(shù)語(yǔ)。報(bào)告模型設(shè)計(jì)器宿主在Business Intelligence Development Studio(BIDS)或Visual Studio中,由開(kāi)發(fā)人員所使用。實(shí)際上,BIDS是一個(gè)僅有Business Intelligence工程而沒(méi)有任何語(yǔ)言工程的Visual Studio外殼。這種Business Intelligence工程之一是報(bào)告模型工程,它能夠啟動(dòng)報(bào)告模型設(shè)計(jì)器并允許開(kāi)發(fā)人員創(chuàng)建模型。在這個(gè)發(fā)行版本中,模型和相應(yīng)的特定報(bào)告僅能夠使用SQL Server數(shù)據(jù)源:SQL Server數(shù)據(jù)庫(kù)引擎和SQL Server分析服務(wù)。然而,開(kāi)發(fā)人員能夠借助鏈接服務(wù)器或分析服務(wù)統(tǒng)一數(shù)據(jù)模型來(lái)克服這一限制和存取其它數(shù)據(jù)源。二者都提供了一個(gè)薄的抽象層并允許存取任何OLE DB或ODBC兼容的數(shù)據(jù)源(包括Oracle)。十五、 Report Designer(報(bào)告設(shè)計(jì)器)Report Designer是一個(gè)面向開(kāi)發(fā)者的綜合性的報(bào)告創(chuàng)作、預(yù)覽和出版工具,它宿主在Business Intelligence Development Studio 或 Visual Studio中。為了組織報(bào)告開(kāi)發(fā)過(guò)程,Report Designer以選項(xiàng)卡形式提供一個(gè)報(bào)告的三個(gè)視圖:數(shù)據(jù),布局和預(yù)覽。數(shù)據(jù)選項(xiàng)卡幫助開(kāi)發(fā)人員定義數(shù)據(jù)源和設(shè)計(jì)數(shù)據(jù)集查詢。Report Designer提供三種拖放式圖形化查詢?cè)O(shè)計(jì)器以幫助進(jìn)行SQL查詢。布局選項(xiàng)卡幫助開(kāi)發(fā)人員設(shè)計(jì)一個(gè)報(bào)告的圖形化描述并且把圖形化描述與數(shù)據(jù)關(guān)聯(lián)起來(lái)。Report Designer提供一個(gè)拖放布局設(shè)計(jì)者和使用報(bào)告控件工具箱。布局設(shè)計(jì)很類似于Visual Studio為Windows和web應(yīng)用程序提供的一個(gè)用戶接口設(shè)計(jì):你可以把報(bào)告控件拖放到一個(gè)報(bào)告中,然后根據(jù)需要安排它們,設(shè)置屬性并且關(guān)聯(lián)經(jīng)數(shù)據(jù)選項(xiàng)卡設(shè)計(jì)的數(shù)據(jù)集。預(yù)覽選項(xiàng)卡提供一個(gè)報(bào)告預(yù)覽,以便開(kāi)發(fā)人員能夠據(jù)需要測(cè)試和調(diào)整報(bào)告。Report Designer還提供報(bào)告向?qū)В笇?dǎo)開(kāi)發(fā)人員通過(guò)一系列步驟創(chuàng)建一個(gè)報(bào)告。然而,這個(gè)向?qū)H提供有限個(gè)數(shù)的布局方式供選擇;不過(guò)報(bào)告開(kāi)發(fā)者能夠在向?qū)ЫY(jié)束后使用布局選項(xiàng)卡據(jù)需要修改該布局。最后,Report Designer允許開(kāi)發(fā)人員把報(bào)告構(gòu)建和發(fā)布到SSRS。注意 使用Report Designer開(kāi)發(fā)的報(bào)告不能被Report Builder解釋或編輯。十六、 Report Manager(報(bào)告管理器)Report Manager是一個(gè)基于web的報(bào)告存取和管理工具,用于存取一個(gè)Report Server的單個(gè)實(shí)例。用戶能夠使用報(bào)告管理器執(zhí)行的一些操作,包括觀察、查找和訂閱報(bào)告、管理安全(報(bào)告存取和角色)、創(chuàng)建文件夾和在文件夾間移動(dòng)報(bào)告、管理數(shù)據(jù)源、設(shè)置報(bào)告參數(shù),等等。用戶能夠使用報(bào)告管理器執(zhí)行的動(dòng)作依賴于該用戶的安全權(quán)限。調(diào)用報(bào)導(dǎo)管理器的默認(rèn)URL是'http://<server>/reports'。包含Report Manager的二進(jìn)制程序,頁(yè)面及其它內(nèi)容的默認(rèn)位置是'C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportManager'。盡管Report Manager提供有限的定制,但是既沒(méi)有設(shè)計(jì)也沒(méi)有提供足夠的文檔以支持定制。這使得其它公司可以使用若干定制選項(xiàng),這可以結(jié)合:· 接受有限的Report Manager定制能力,例如修正它使用的式樣表(默認(rèn)地,位于'C:Program FilesMicrosoft SQL ServerMSSQL.3Reporting ServicesReportManagerStyles')并調(diào)整報(bào)告管理器通過(guò)站點(diǎn)設(shè)置(http://<server>/Reports/Pages/Settings.aspx)顯示的名字。· 通過(guò)使用ReportingServicesWebUserInterface程序集中的類和利用它的未公開(kāi)的功能理解報(bào)告管理器內(nèi)在運(yùn)行機(jī)制。· 編寫定制管理頁(yè)面來(lái)代替報(bào)告管理器中的一個(gè)或多個(gè)管理頁(yè)面。· 編寫一個(gè)顯示一個(gè)公司信息的定制外觀,并最終把用戶引向報(bào)告管理器頁(yè)面。· 編寫一個(gè)定制報(bào)告管理應(yīng)用程序來(lái)替換Report Manager。十七、 SQL Server Management Studio(SQL Server 2005中新增)SQL Server Management Studio提供一個(gè)基于Windows表單的集成環(huán)境來(lái)管理各種SQL Server組件。從SSRS角度來(lái)看,當(dāng)用于管理單個(gè)SSRS實(shí)例時(shí),該Management Studio功能類似于Report Manager。使用SQL Server Management Studio的優(yōu)點(diǎn)包括針對(duì)SSRS web開(kāi)發(fā)與發(fā)布的穩(wěn)固的內(nèi)容視圖,輕微的改進(jìn)性能,能夠腳本化和'重新播放'管理任務(wù),還有一個(gè)更具良好粒度的基于角色的安全設(shè)置。十八、 報(bào)告服務(wù)配置工具(SQL Server 2005中新增)該報(bào)告服務(wù)配置工具是一個(gè)Windows表單應(yīng)用程序,它用于啟動(dòng)和停止Report Server Windows服務(wù)和重新設(shè)置報(bào)告服務(wù)器。例如,管理員能夠改變Report Server的數(shù)據(jù)庫(kù)和SQL Server名字,改變SSRS的Windows服務(wù)標(biāo)識(shí),并且改變用于存取Report Server 和報(bào)告管理器的虛擬目錄。管理員應(yīng)該能夠啟動(dòng)報(bào)告服務(wù)配置工具,這可以通過(guò)使用'SQL Server 2005-> Configuration Tools->Reporting Services Configuration'菜單項(xiàng)或從SQL Server Configuration Manager中使用'SQL Server Reporting Services Properties'對(duì)話框中的'Configure'按鈕來(lái)實(shí)現(xiàn)。十九、 RSPrint客戶端控件(SQL Server 2005中新增)該RSPrint客戶端ActiveX控件提供在客戶端報(bào)告管理器中報(bào)告的打印功能。該控件提供一個(gè)打印對(duì)話框以便用戶初始化一個(gè)打印工作,預(yù)覽一個(gè)報(bào)告,指定要打印的頁(yè)面,以及改變面邊距。開(kāi)發(fā)人員能夠在代碼中以編程方式存取這個(gè)控件以支持他們的應(yīng)用程序中的報(bào)告打印功能。二十、 性能監(jiān)視對(duì)象 'SSRS Windows and Web Service'包括提供性能計(jì)數(shù)器(提供關(guān)于報(bào)告處理和資源使用情況的信息)的性能對(duì)象。這些對(duì)象分別稱為RS Windows服務(wù)和RS Web服務(wù)。注意 在SSRS 2000中,web服務(wù)性能對(duì)象稱為報(bào)告服務(wù),而Windows服務(wù)性能對(duì)象稱為提交處理器。為了獲取更為完整的圖形化參考和搜集更多的信息,管理員還應(yīng)該能夠監(jiān)視SQL Server,ASP.NET,處理器,內(nèi)存和物理或邏輯磁盤計(jì)數(shù)器。二十一、 總結(jié)在本文中,我們較細(xì)致地討論了SQL Server報(bào)告服務(wù)(SSRS)架構(gòu)及各種組件。最后,表格3提供了有關(guān)SSRS組件的一個(gè)摘要。表格3.報(bào)告服務(wù)組件小結(jié)組件簡(jiǎn)短描述可編程接口提供通過(guò)SOAP和HTTP請(qǐng)求存取SSRS的功能。報(bào)告處理器便利了從數(shù)據(jù)檢索到數(shù)據(jù)生成的一組報(bào)告生成操作。報(bào)告處理器調(diào)用其它組件,例如調(diào)用數(shù)據(jù)擴(kuò)展以有助于報(bào)告生成。數(shù)據(jù)處理擴(kuò)展從一個(gè)數(shù)據(jù)源檢索報(bào)告的數(shù)據(jù)。開(kāi)發(fā)人員能夠開(kāi)發(fā)其它定制數(shù)據(jù)處理擴(kuò)展。命令行工具三個(gè)工具,用于管理任務(wù)腳本化,在報(bào)告服務(wù)安裝期間被自動(dòng)地安裝。生成擴(kuò)展把報(bào)告的中間格式(報(bào)告布局和數(shù)據(jù)的結(jié)合)轉(zhuǎn)換成一種設(shè)備特定的格式,例如HTML。開(kāi)發(fā)人員能夠創(chuàng)建新的生成擴(kuò)展。Report Server數(shù)據(jù)庫(kù)存儲(chǔ)報(bào)告定義,報(bào)告元數(shù)據(jù),報(bào)告歷史,緩沖的報(bào)告,快照,資源,安全設(shè)置,加密的數(shù)據(jù),調(diào)度和提交數(shù)據(jù),等等。Report Server臨時(shí)數(shù)據(jù)庫(kù)存儲(chǔ)中間處理產(chǎn)品,緩存和數(shù)據(jù)。Scheduling and Delivery Processor監(jiān)視事件(例如基于時(shí)間的訂閱),與報(bào)告處理器協(xié)作以生成一個(gè)報(bào)告,和提交擴(kuò)展協(xié)作以把調(diào)度報(bào)告提交到一個(gè)在訂閱中指定的位置。提交擴(kuò)展 把報(bào)告提交到特定的設(shè)備,例如郵件或一個(gè)文件系統(tǒng)。開(kāi)發(fā)人員能夠創(chuàng)建新的提交擴(kuò)展。Report Manager提供基于web的報(bào)告存取和管理能力。調(diào)用Report Manager的默認(rèn)URL是'http://<server>/reports'。Report Model Designer為在Report Builder中的使用生成報(bào)告模型。Report Builder提供拖放和易于使用的報(bào)告設(shè)計(jì)功能。Report Builder是一個(gè)運(yùn)行于一個(gè)客戶端計(jì)算機(jī)上的特定的終端用戶報(bào)告創(chuàng)作和出版工具。Report Designer允許開(kāi)發(fā)人員開(kāi)發(fā)復(fù)雜的報(bào)告。Report Designer是一個(gè)綜合性的報(bào)告創(chuàng)作和出版工具,它宿主于Business Intelligence Development Studio或Visual Studio中。安全擴(kuò)展支持用戶和組的認(rèn)證和授權(quán)。開(kāi)發(fā)人員能夠(不包括SQL Server Express edition)創(chuàng)建新的安全擴(kuò)展。SQL Server Management Studio 提供基于Windows表單的集成環(huán)境來(lái)管理SQL Server組件(包括SSRS)。從報(bào)告管理的角度來(lái)看,Management Studio的功能類似于Report Manager,但是還提供其它能力。Reporting Services Configuration Tool管理啟動(dòng)與停止Report Server Windows服務(wù)和重新設(shè)置報(bào)告服務(wù)器。這是一個(gè)Windows表單應(yīng)用程序。WMI提供者提供一個(gè)組WMI接口來(lái)管理對(duì)報(bào)告服務(wù)器的設(shè)置,并且有助于在網(wǎng)絡(luò)中發(fā)現(xiàn)SSRS實(shí)例。性能監(jiān)視對(duì)象提供SSRS Windows和web服務(wù)性能的一個(gè)視圖。
