亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

用MS SQL Reporting Services生成報表

系統 1589 0
靈活的報表功能是大多數業務應用程序的一個要求,這些報表功能在集成到 Web 應用程序中之后用途更加廣泛。利用 SQL Server? 2000 Reporting Services 的最新版本,您可以輕松地具有來自各種數據源的報表生成功能。在本文中,我將介紹使用 Visual Studio? 和 Reporting Services 來編寫報表,并演示如何將報表集成到 Web 應用程序中。

  Reporting Services 是基于服務器的報表生成平臺,該平臺構建在 .NET Framework 上并與 SQL Server 2000 集成在一起,因此您可以使用一個擴展的基于 Web 服務的 API 將豐富的報表生成功能集成到應用程序中。盡管報表服務器使用 SQL Server 作為報表的儲存庫,但利用 OLE DB、ODBC 或 ADO.NET 提供程序的任何數據源都可以用來為報表提供數據,這就使得 Reporting Services 成為在各種企業環境中生成報表的極佳工具。

  Reporting Services 是作為 SQL Server 2000 的一部分而授權的,因此如果您有已授權的 SQL Server 的副本,則可以在同一服務器上運行 Reporting Services 而無需支付額外的許可證費用。如果您決定在獨立的、尚未經 SQL Server 授權的計算機(例如,Web 服務器)上運行 Reporting Services,您將需要購買額外的 SQL Server 許可證。

  要開始使用 Reporting Services,您可以下載位于 SQL Server 2000 Reporting Services 的 120 天試用版軟件,它還包括有關如何獲得該產品的安裝媒體的說明。在安裝該產品時,請確保選中包括示例報表的選項,因為我要將這些報表集成到本文的 Web 應用程序中。

  Reporting Services 概述

  Reporting Services 報表設計使用新的 Visual Studio .NET 2003 報表設計器,在安裝有 Visual Studio 的同一計算機上安裝了 Reporting Services 后,該設計器就可以使用。設計器以新的基于 XML 報表定義語言 (RDL) 輸出報表布局和數據訪問的說明,而 RDL 文件會發布到報表服務器。如果您希望為用戶提供創作功能,也可以使用第三方的報表設計器。

  管理員可以使用基于 Web 的報表管理器來管理已發布的報表,并且可以執行一些任務,例如,保證某些用戶組報表的安全或更改已部署報表的數據源連接字符串。用戶也可以使用報表管理器來瀏覽和查看報表;但是很多公司傾向于使用 URL 請求或 Reporting Services Web 服務,將報表查看直接集成到它們現有的內部 Web 站點或應用程序中。

用MS SQL Reporting Services生成報表

  圖 1 Reporting Services 體系結構

  現在,您可以將附加的報表添加到該項目,或者通過添加附加列、將數據分組、添加匯總、甚至是添加能夠顯示來自其他查詢的數據的附加表來修改 Products 報表。與很多報表設計器不同,Reporting Services 使用帶外設計,這使得它可以輕松地創建將各種源的數據集中在同一個位置的報表。

  您剛剛創建的報表項目由當前駐留在您的開發計算機上的一組文件組成。為了將這些報表發布給用戶,您需要將該項目部署到報表服務器。

  部署和測試

  在部署報表項目之前,需要指定將項目部署到哪一個服務器。如果您最初使用該向導創建了報表項目,那么您可能已經指定了目標服務器。

  要檢查該設置或指定一個新服務器,請選擇“Project | Properties”來顯示 Project Properties 對話框。進行該設置使您可以指定項目的文件夾名和 Reporting Services Web 服務的 URL。在菜單上選擇“Build | Deploy Solution”將構建報表項目,然后將其部署到服務器。

  在部署報表項目后,您就可以進行測試了。已部署到服務器的每個報表都具有唯一的路徑,該路徑可以用于在瀏覽器中顯示報表。例如,要顯示您創建的第一個報表,請打開瀏覽器并導航到 http://MyServer/ReportServer?/Report+Project1/Products+Report。這會以 HTML 格式呈現報表并在頁面的頂端顯示一個工具欄,以便使您可以對報表進行翻頁、更改縮放比例,甚至以各種其他格式(例如,PDF)查看報表。

  您還可以通過導航到服務器上的以下 URL,來瀏覽已部署到服務器的所有報表項目的列表:http://MyServer/ReportServer。報表服務器提供使您可以查看已部署的報表類型和查看報表的最小的用戶界面。

  報表管理器是一個更加友好、功能更豐富的工具,可以通過簡單地導航到本地服務器上的以下 URL 來訪問該工具:http://MyServer/Reports。

  將報表添加到 Web 應用程序

  既然您知道如何設計、部署和測試報表,就讓我們將這些報表集成到應用程序中吧!很多 Web 應用程序都包括針對每個用戶的自定義主頁,通常稱為“儀表板”。這個頁面通常提供針對用戶量身定做的摘要式信息并作為跳轉點來訪問應用程序的其他功能。

  我將使用 Reporting Services 附帶的示例報表構建一個儀表板來演示報表集成,如圖 3 所示。如果您在安裝過程中安裝了示例報表,您可以打開該報表項目(安裝到 Reporting ServicesSamplesReports)并將其部署到測試服務器。您可以使用報表管理器工具通過瀏覽到 SampleReports 文件夾來測試示例報表。

  圖 3 儀表板 Web 應用程序

  為用戶提供從應用程序訪問報表的權限的最簡單方法就是使用超級鏈接。如您已經看到的那樣,每個報表都具有唯一的、用于在瀏覽器中顯示報表的路徑。對于儀表板應用程序,報表應該在單獨的窗口中打開,因此我將為該超級鏈接指定一個目標。到目前為止,這是非常簡單的,但是對于具有參數報表的報表(例如,Employee Sales Summary 報表)來說,情況又如何呢?要真正地將報表集成到應用程序中,您通常需要為參數指定某些值,以便用戶不會被經常提示。

  Reporting Services 使這項任務非常簡單:報表參數的值可以指定為 URL 的一部分。例如,Employee Sales Summary 報表具有 ReportYear、ReportMonth 和 EmpID 參數,因此顯示編號為 24 的員工在 11 月份的銷售額的超級鏈接可以是:

<a href="http://MyServer/ReportServer?/SampleReports/Employee Sales
  Summary&ReportMonth=11&EmpID=24" target="_blank">November Sales Summary
</a>

?

  不具有在 URL 中指定的值的參數將使用在報表設計器中設置的默認值,因此剛才展示的示例銷售匯總報表使用的 ReportYear 值是 2003。Reporting Services 還有一組用于控制報表顯示方式的內置參數。這些參數通過加上前綴“rs:”來區別您自己的報表參數。

  其中最有用的一個參數就是 rs:Format 參數,它用于指定呈現報表的格式。這使您可以包括不需要顯示在 HTML 中的報表,還可以使用諸如 PDF 甚至是 XML 的格式。其他常用參數是 rs:Command,指示出要應用到您所指定的路徑的操作。例如,rs:Command=Render 將呈現一個報表,而 rs:Command=ListChildren 將列出文件夾中所有項。

  如果您沒有指定命令,Reporting Services 將查看您指定的路徑并計算出要采取的適當操作,例如,呈現報表。圖 4 顯示了 rs:parameters 的列表。

  另一組內置參數控制各種輸出格式的行為并使用 rc:prefix。每個報表格式都具有其自己特定的一組參數。例如,要以沒有標題行的逗號分隔值 (CSV) 格式呈現報表,您應該使用 rc:NoHeader 參數:

<a href="http://MyServer/ReportServer?/SampleReports/Company Sales
  &rs:Command=Render&rs:Format=CSV&rc:NoHeader=true">Company Sales
</a>

?

  HTML 格式具有非常多的 rc:parameters,在將報表集成到 Web 應用程序中時為您提供很多的靈活性。如果應用程序將報表參數選擇傳遞到報表,那么您可能要通過將 rc:Parameters 設置為 false 來避免提示用戶,甚至可以通過將 rc:Toolbar 設置為 false 來關閉整個工具欄。有關常用 HTML rc:parameters 的列表的詳細信息,請參見圖 5。

  如果您的 Web 應用程序使用框架來顯示報表(比如說,在左側窗格中顯示報表列表,在右側窗格中顯示報表內容),您將需要使用 rc:LinkTarget 參數來指定內容框架的名稱。否則,當用戶點擊報表中的任意嵌入鏈接時,瀏覽器就會使用整個窗口來重新顯示報表,而不是保留導航窗格和內容窗格的框架。

  您可以使用我介紹過的 URL 參數來添加“快速啟動”區域,該區域包含使用戶可以打開常用報表的超級鏈接的列表(請參見圖 3)。每個超級鏈接將其目標設置為 _blank 以在獨立的瀏覽器窗口中打開報表,并使用諸如 rs:Format=EXCEL 這樣的參數來控制報表在瀏覽器中的顯示方式。

  將報表嵌入到 Web 應用程序中

  如果在用戶查看報表時,不再使用彈出新的瀏覽器窗口,您可能希望實際地將報表嵌入到自己的 Web 頁中。最簡單的方法就是在 Web 頁上使用 IFRAME,并使用我介紹過的基于 URL 的相同技術來設置 SRC 屬性。如果您使用這種技術,切記要將 rc:LinkTarget 參數設置為 IFRAME 的名稱,以避免當用戶單擊報表的鏈接時在框架外彈出任意一個框架。

  如果您以前設計過 ASP.NET 的服務器控件,您可能會認為 IFRAME 技術并不十分完美,因為它要求 Web 開發人員理解 Reporting Services 的 URL 參數語法才能構建適當的 SRC 字符串。構建一個封裝有所有參數并使開發人員可以簡單地設置諸如 ReportPath 和 Zoom 之類的參數的服務器控件難道不是一個更好的想法嗎?

  Reporting Services 非常方便地附帶了名為 ReportViewer 的示例(安裝到 Reporting ServicesSamplesApplicationsReportViewer 目錄),它可以實現這個想法。該控件封裝了 IFRAME 和 URL 訪問參數邏輯,并提供了一個更簡單的用于將報表嵌入到應用程序中的方法。要使用該控件,請打開并構建 ReportViewer 解決方案,然后通過瀏覽到 ReportViewer 解決方案的 bin 目錄中的 ReportViewer.dll,切換到您的 Web 應用程序并將該控件添加到工具箱中。

  您可以使用該控件將嵌入報表添加到儀表板應用程序中。將控件添加到 Web 頁,設置高度和寬度屬性并添加以下代碼以便在頁面中顯示一個報表:

  保證報表的安全

  Reporting Services 安全性使用熟悉的基于角色的模型。用戶和組可以分配給諸如 System Administrator 或 Browser 之類的角色,特定角色的所有成員都將允許執行為該角色定義的操作。

  報表管理器用于執行與安全性相關的任務,例如,分配用戶角色或修改項(例如,報表)的權限等。默認情況下,Administrators Windows 組同時是所有文件夾的 System Administrator 和 Content Manager 的成員。為了擴展報表訪問到其他用戶,用戶帳戶或組必須添加到諸如 Browser 的角色中。這通常是在文件夾級設置的,同時也可以針對單獨的報表進行重寫。

  除了保護對報表的訪問外,管理員還必須決定如何將報表連接到源數據庫。可以配置數據源使用集成的安全性,以便可以使用當前的用戶帳戶進行數據庫連接。此外,還可以定義 Windows? 或 SQL Server 用戶名和密碼,并將其安全地存儲在報表服務器數據庫中。這種方法要求報表運行在無用戶交互(例如,訂閱所涉及的交互)的情況下。

  使用 Reporting Services Web 服務

  到目前為止,我一直使用的 URL 訪問方法提供了一種快速便捷的方式來查看報表并指定參數,但是它不能提供對所有可用的報表管理功能的訪問。Reporting Services 還附帶了一個具有豐富功能的 API,為您提供通過 Web 服務對高級功能的訪問。例如,該 Web 服務包括用于管理報表的數據源信息的方法或者枚舉某個文件夾中所有項的方法。

  我將使用 Web 服務將報表的動態列表添加到儀表板應用程序中。為此,您將需要使用 Add Web Reference 將一個 Web 服務引用添加到應用程序中。指定到 Web 服務的路徑,如下所示:

  http://MyServer/ReportServer/ReportService.asmx

  在添加引用后,您可以創建 ReportingService 代理類的一個實例,并調用該服務上的一個方法,就像我在此處完成的一樣:

  訂閱報表

  Reporting Services 訂閱功能讓用戶按照計劃接收報表。報表通常會通過電子郵件發送到用戶,但 Reporting Services 同時還讓您將報表生成到一個文件共享甚至可以編寫自己的提交擴展。這使您可以輕松地完成分發任務,例如,向每個銷售代表以電子郵件方式發送每周銷售統計報表,或者設置每月財政報表在每個月的最后一天運行,并將其作為一個 PDF 寫出到公司文件共享。

  在設置訂閱前,您需要考慮報表將如何連接到數據庫以檢索其數據。因此,訂閱的報表將不會由用戶直接執行,您無法為數據源使用集成的安全性,但在報表運行時必須指定要使用的用戶名和密碼。如果您試圖為使用集成安全性的報表設置訂閱,Reporting Services 將會返回一個錯誤。

  要更改示例報表的數據源,請打開“Report Manager | Sample Reports”,然后單擊 AdventureWorks 數據源。該數據源由所有示例報表共享,因此對它所做的任何更改將會影響所有報表。選中“Credentials stored securely in the report server”選項,指定一個具有訪問 AdventureWorks 數據庫權限的帳戶的有效域用戶名和密碼,選中“Use as Windows credentials when connecting to the data source option”,然后單擊“Apply”按鈕。請注意,這種更改意味著指定的帳戶將始終用于連接該數據庫,不管實際上是哪個用戶運行該報表。

  因此,您已經準備好深入研究并查看提供對訂閱訪問的 Web 服務 API。使用 Web 服務的這一部分比使用 List 或 Render 方法要多一些挑戰,主要原因在于可用選項的數量。我將要使用的方法是 CreateSubscription,它也屬于 ReportingService 類。有關該方法的參數的詳細說明,請參閱 ReportingService 類,但最基本的是您需要指定要訂閱的報表、生成計劃(例如,每周一早晨或每月的最后一個周五)、電子郵件選項(包括電子郵件地址)以及所有報表參數值。

  我已經將名為 EmailSubscriber 的實用工具類包括在本文的示例代碼中,該示例代碼摘要了某些復雜的內容。儀表板應用程序使用該類允許用戶指定他們的電子郵件地址并使 Employee Sales Summary 報表通過電子郵件每周一發送給他們。在產品應用程序中,您可以調整每個用戶的報表,例如,當您創建訂閱時,可以根據員工的 Windows 用戶帳戶檢索他們的員工 ID,然后適當地設置報表參數。

  如果您不希望等到下周一才測試您的訂閱,它有助于您了解有關 Reporting Services 如何處理訂閱計劃的更多信息。當您創建一個訂閱時,Reporting Services 會創建一個根據要求的計劃執行的 SQL Server 代理作業。您可以通過打開 Enterprise Manager,展開 Management、SQL Server Agent 和 Jobs 文件夾來查看這個作業。該訂閱作業將具有“Report Server”類別,并以由 Reporting Services 用來跟蹤該作業的 GUID 命名。右鍵單擊該作業并選擇 Start Job,如果您已正確地設置了您報表的方方面面,您的報表將會發送電子郵件給您。

  接下來該怎么做?

  您可以用來向應用程序中添加重要報表生成功能的兩個其他 Reporting Services 功能包括 Data Driven Subscriptions 和 Snapshots,前者使您可以設置用戶的郵件列表并以電子郵件形式將特定參數化的報表發送給他們,后者是在計劃點的報表視圖,同時還可以提供報表的歷史視圖。Reporting Services 是使用模塊化的體系結構構建的,如果您需要更強大的功能,它可以使您使用自己喜好的、以 .NET 為目標的語言來添加功能強大的新擴展。

  John C. Hancock 是 Microsoft 的高級顧問,致力于商務智能和 .NET 開發。他現在定居在多倫多,要聯系他,請訪問 http://www.johnchancock.net。

?

  如果您正在一個 Intranet 環境中部署應用程序,您要通過將 添加到應用程序的 web.config 文件中來啟用模擬。您還要將客戶端登錄憑據傳遞到該服務,如前面的示例所示。

  ListChildren 方法返回 CatalogItem 對象的數組,該數組表示用戶有權查看的項,包括報表、文件夾和數據源。Path 屬性提供了到項的唯一路徑,例如,/SampleReports/Sales Order Detail,Type 屬性使您可以區別報表和其他類型的項。

  既然我已經將報表名稱加載到了下拉列表中,我必須決定如何在儀表板應用程序內顯示報表。我決定擴展我早期編寫的 ReportViewer 代碼并且只要用戶選擇某個報表并點擊“Go”按鈕就更改 ReportPath 屬性。您還可以使用 IFRAME 并將 SRC 設置為適當的 URL(并為報表的名稱加上前綴“http://MyServer/ReportServer?”)。

  除了報表管理功能外,Web 服務提供的其他主要功能就是報表呈現。大多數應用程序(包括報表管理器應用程序)都使用 Web 服務功能來列出報表或更改設置,并使用我介紹過的 URL 方法來顯示報表。但是,如果您想要完全控制報表內容在應用程序中處理的方式,可以使用 ReportingService 類的 Render 方法。該方法返回一個可以在以后保存到輸出文件的字節數組;取決于請求的格式,輸出文件可以是圖形文件或 Excel 電子表格。如果您要以 HTML 格式呈現報表,可能會更加復雜一些,因為您將需要使用 RenderStream 方法來分別呈現圖像或其他資源。

  盡管本文的討論重點在于 Web 應用程序,您也可以使用相同的技術將報表生成功能添加到基于 Windows 的應用程序中。最簡單的方法仍是使用 URL 訪問,或者從應用程序啟動用戶的瀏覽器,或者包括 Microsoft WebBrowser ActiveX? 控件并使用 Navigate 方法來加載適當的 URL。當您想要更好地控制某些操作(例如,在圖片框中顯示結果或將文件直接保存到磁盤的操作)時,Web 服務的 Render 信息工作者通常必須處理兩種類型的報表:當他們需要收集信息時他們想要獲得的類型以及每周都出現在他們桌面上或他們電子郵件中的類型。至此,我已重點闡述了用戶獲取他們自己的報表的過程,但 Reporting Services 還包括一種非常強大的稱為訂閱的功能,它使您可以將報表“推”給客戶。

  可以將報表參數化,這樣用戶可以在查看報表時從選擇列表中進行挑選;它們還可以導出為多種格式,例如,Microsoft?Excel、PDF 和 XML。盡管實時報表提供最新的數據,也可以將報表緩存一段時間以提高性能并減少數據源上的負載。對于商務智能應用程序,報表可以訪問 Analysis Services OLAP 多維數據集,而且 Reporting Services 甚至可以導入現有的 Microsoft Access 報表,盡管由于這兩種技術間存在差異,它并不能支持所有的 Access 功能。有關 Reporting Services 體系結構的詳細情況,請參見圖 1。

  設計第一個報表

  盡管我介紹的重點在于將報表集成到應用程序中而不是創作報表,但熟悉 Reporting Services 的最好辦法就是立即著手創建一個新的報表項目。為此,請打開 Visual Studio 并使用 Report Project Wizard 創建一個新的項目,該向導位于 Business Intelligence Projects 部分。為您的項目指定一個名稱,單擊“OK”,然后將顯示報表向導對話框。在您選擇數據源的這一步驟中,單擊“Edit”按鈕,以便指定連接到您數據庫服務器上的 AdventureWorks2000,單擊“OK”,然后選中使其成為共享數據源的選項。

  單擊“Next”進入到“Design the Query”步驟,指定簡單的 SQL 語句(例如,“SELECT * FROM Product”),然后單擊“Next”。Reporting Services 支持顯示一組固定列的標準表格式 (Tabular) 報表,也支持使用帶有動態列的交叉表樣式視圖的矩陣式 (Matrix) 報表,因此為該報表選擇 Tabular,然后單擊“Next”。

  將某些列(例如,ProductID 和 Name)拖到 Details 部分并單擊“Next”。選擇默認的 Bold 樣式,單擊“Next”,然后指定您的報表服務器的虛擬目錄的 URL,例如,http://MyServer/ReportServer。現在,單擊“Next”。最后一步,您可以為您的第一個報表指定名稱,例如,Products Report;然后單擊“Finish”。

  該向導將會創建該項目,同時還創建一個可以由多個報表共享 AdventureWorks2000 數據源,以及一個在設計器中打開的有關 Products 數據的報表(請參見圖 2)。默認情況下,顯示使您可以修改報表設計的 Layout 選項卡。

用MS SQL Reporting Services生成報表

  圖 2 Visual Studio 報表設計器

  Data 選項卡用于指定報表的查詢,包括設置參數以便在執行報表時提示用戶提供值。單擊“Preview”選項卡來測試報表顯示給用戶的方式。

?

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=2197494

用MS SQL Reporting Services生成報表


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 4虎影院在线观看 | 欧美成人网在线综合视频 | 四虎天堂| 福利视频影院 | 久久久久美女 | 一区二区国产在线播放 | 日韩免费在线观看 | 四虎网站在线观看 | 亚洲伦理中文字幕 | 黄色的视频免费看 | 成人看的午夜免费毛片 | 搡的我好爽视频在线观看 | 亚洲三级久久 | 国产一区二区精品久久凹凸 | 中文字幕视频一区二区 | 俺去也最新网站 | 日本黄黄 | 四虎影院在线观看免费 | 综合久久久久6亚洲综合 | 国产一区二区亚洲精品 | 欧美一区二区三区在观看 | 日本在线一级 | 国产福利视频深夜福利 | 香蕉在线精品亚洲第一区 | 国内精品久久久久影院中国 | 国产91在线 | 日韩 | 欧美真人毛片动作视频 | 久久福利 | 丹武至尊在线观看动漫 | 国产伦理一区二区三区 | 国产香港特级一级毛片 | 国产尤物福利视频在线观看 | 神马我不卡在线观看 | 波多野结衣久久精品免费播放 | 亚洲人成依人成综合网 | 中文字幕一区二区三区永久 | 爱爱小视频成人免费 | 有码中文字幕在线观看 | 四虎色播 | 国产免费不卡 | 日本二区视频 |