SQL Server 2000 Reporting Service報表服務
                                               – 企業報表的新典範

資策會數位教育研究所資深工程師 吳念祖

 

         隨著企業資訊系統廣泛的採用, 資料的產生與匯集皆已透過系統自動化的完成, 對於這些快速累積的資料, 該如何被解讀及運用, 才能有效的協助企業經營者作出營運決策, 就變成是系統開發設計人員很重要的日常工作, 一般而言, 我們在傳達一個抽象的概念或是一個趨勢的演進過程, 經常會將資料以圖表的方式呈現, 除了利於呈現, 方便閱讀者外,更易於進行多元的區別。

         對於企業的資訊主管來說,經常需要提供決策人員各種不同形式或是不同資料面向的營運數據報表,資料經常需要匯集來自於各部門的相關資訊,因此,除了考慮到資料的異質性之外,還需要兼顧每個不同的報表讀者閱讀報表的個別查詢參數或是呈現格式的不同需求,以及在遞送時,報表上資料的機密性與安全性,而人力的短缺,往往無法兼顧到報表產生後的相關安全管控。

         SQL Server Reporting Services 的推出,無疑的爲企業的資訊人員,提供了一個提升生產力的極佳解決方案,暫不論軟體授權的費用問題,就系統的整合與完整性,Reporting Service就提供了一個較其他產品更具優勢的架構,從報表的製作(authoring),管理(managing),檢視(viewing)與遞送(delivering),皆完整的包含在同一套產品裡,而且整個報表平台是一個具延展性(scalable)架構的設計,並且能夠因應需求隨時調整或擴充(extensible)報表的功能,能滿足企業級應用架構的動態變化與效能需求,SQL Server 的『報表服務』提供了企業完整的報表平台,此報表平台之系統架構如下圖所示,開發人員還可以擴充 Reporting Services的功能,方式包括:。

˙使用「簡單存取物件通訊協定」(Simple Object Access Protocol,SOAP) 介面來建立管理報表伺服器的應用程式。
˙透過 URL 建立應用程式或使用網頁瀏覽器來管理報表輸出。
˙透過 Windows Management Instrumentation (WMI) 類別,建立可設定報表伺服器的應用程式。
˙使用 Microsoft .NET Framework 建立其他轉譯、傳遞、安全性以及資料處理延伸模組。
˙建立可包括自訂項目的報表定義語言 (RDL) 檔案。

SQL Server Reporting Service報表服務架構
        
Report Server的幾個重要的模組,包括資料處理(Data Retrieval)模組,轉譯(Rendering)模組,安全(Security)模組與遞送(Delivery)模組。

資料處理(Data Retrieval)模組
         報表所引用的資料來源可以是來自微軟或是其他廠商所提供的資料,在VS.NET 2003製作報表時,我們可以直接指定各種不同的資料來源,並透過查詢設計師(Query Designer)直接拖拉出你想要查詢的SQL語法。

資料處理模組在產生報表結果時,會執行下列的動作。
˙開啟資料來源的連線。
˙分析查詢並傳回欄位名稱清單。
˙針對資料來源執行查詢並傳回資料列集。
˙若有需要,將參數傳給查詢。
˙針對資料列集重覆該動作,並擷取資料。
轉譯(Rendering)模組
         轉譯模組在將資料處理模組產生的報表資料與配置資訊,根據指定,轉化成特定的專門格式,如HTML、Excel、Text、XML、TIFF 以及 PDF等檔案格式。

         目前Excel轉譯延伸模組可將報表轉譯成可在 Microsoft Excel 2002 或更新的版本中檢視修改,HTML 轉譯延伸模組會以 HTML 4.0 或 HTML 3.2 來轉譯報表,PDF 轉譯延伸模組會以 PDF 檔案轉譯報表,可在 Adobe Acrobat 4.0 或更新的版本中開啟和檢視。

安全(Security)模組
         在存取報表內容時,組織內部的使用者可以透過Windows驗證使用者的身分,組織外部使用者也可以存取報表伺服器,但建議遵守下列原則。
˙建立擁有唯讀權限的低權限網域使用者帳戶。帳戶必須對裝載報表伺服器的電腦具有存取權。
˙建立對應到使用者帳戶的角色指派,以指定報表伺服器資料夾階層中的項目。您可以藉由選擇角色指派為瀏覽者預先定義角色,將存取權限制為唯讀作業。
˙若您想要利用使用者的安全性內容來存取資料來源,請設定資料來源連線使用「Windows NT 整合式安全性」。或者,您可以使用指定不同帳戶的預存認證。

遞送(Delivery)模組
         遞送模組在處理如何將報表傳送給指定的使用者,Reporting Services 目前提供遞送的方式包括電子郵件傳遞和檔案共用傳遞二種方式。

報表服務完整的三個階段
         一個完整的報表服務,除了必須包含操作簡易與功能豐富的報表設計介面之外,我們檢視一個報表的生命週期,事實上還包括開發完成後的報表管理以及報表傳送等三個不同的階段。以下我們就這三個階段分別介紹Reporting Services中各部份功能,如:報表管理員(Report Manager)、報表設計師(Report Designer)與報表伺服器(Report Server)的主要特性。

報表設計師(Report Designer)
         Report Designer是報表的開發工具,現已整合至Visual Studio .NET 2003,在安裝完 Reporting Services之後,VS .NET 中會增加一個新的專案類型(Business Intelligence Projects),如下圖。

         我們可以直接透過Report Designer在VS.NET 中開發製作報表,產生的報表檔是符合XML規格的RDL檔,並且可以直接透過VS.NET對完成的報表進行部署,另外,還提供了在本機作測試的功能,讓我們在部署報表之前,可以先在開發環境預覽報表的最後呈現結果。

報表管理員(Report Manager)
         Report Manager 是一個Web-based 的管理程式,透過它可以瀏覽、訂閱、搜尋與管理Reporting Services產生的報表,設定各份報表的相關參數的預設值,設定報表遞送的時程以及相關使用者的使用權限等。

         管理程式的核心為一組Web Services APIs,因此,除了Web-based的介面外,我們也可以撰寫Win32的報表管理應用程式。另外,關於報表的安全性設計主要考慮到彈性化以角色為基礎的設計方式,我們可以直接透過Report Manager設定每個角色的權限,並將報表使用者設定為具備某個角色的身分,達成不同使用者對同一份報表有不同的使用權限的目的。Reporting Services的角色又可分為系統角色與項目層級角色二個不同的類別,主要的分別在:系統角色可以設定的權限主要跟執行系統任務有關,如:管理排程、管理伺服器安全性等,而項目層級角色則是跟執行報表管理任務相關,如:管理訂閱、管理資料來源等。
下圖即是在報表管理員中設定內容管理員這個角色所擁有的權力。

報表伺服器(Report Server)
         Report Server 是Reporting Services最主要的單元,主要負責處理來自於Report Manager與Report Designer以及排程與遞送的相關命令,我們可以透過Report Manager 管理Report Server。Report Server在遞送報表時,提供On-demand與event-based二種不同方式,可以在portal上直接透過URL主動讀取報表,而且也可以透過訂閱的方式,整合Microsoft Office System,將報表依指定的時間與格式,傳送的指定收件人的信箱,如下圖中的設定。

報表發行的美好境界
         文章一開始我們描述了Reporting Services的系統架構與企業應用功能,我們發現它已幾乎滿足大部分的企業應用的需求。目前Reporting Services是單獨發行,你只要有SQL Server 2000、Visual Studio .NET 2003就可以開始你的測試工作,未來則會跟著SQL Server下一個版本(代號Yukon)一起出貨,而且沒有另外的授權費用的問題。

         Microsoft SQL Server Reporting Services 是為了滿足各式組織的需求而設計的,可製作符合成本效益、可靠的報表來提供最大的企業生產力。彈性的訂閱和傳送選項搭配視需要的報表功能,可確保使用者輕鬆地存取最新的企業資訊。Reporting Services也同時考慮到報表資料傳送與擷取的安全性。

相關參考資料
http://www.microsoft.com/sql
http://www.databasejournal.com/features/mssql/article.php/10894_3304481_1
http://www.expresscomputeronline.com/20040119/techspace01.shtml
http://msdn.microsoft.com/data/default.aspx?pull=/library/en-us/dnsql2k/html/sslsetup.asp