SQL Server Reporting Services(簡稱SSRS)

來源:互聯網
上載者:User

主要說說關於SSRS的安裝、部署和配置問題。

SSRS的安裝

Reporting Services作為SQL Server的一個組件,自然是要伴隨SQL Server一起安裝了。目前SQL Server 的諸多版本,只有Enterprise和Development版本有著對SSRS的完全支援,Standard版本提供了大部分支援,具有進階功能的Express版只支援一些最基本的功能(不含設計器)。因此,在企業部署的時候應該選用Enterprise版,作為開發人員應選擇Development版。

在安裝SQL Server的過程中選中Reporting Services的相關組件,或者更改一個SQL Server的安裝以添加SSRS都是可行的。

注意上面說的是伺服器端的安裝。SQL Server 2005 Development Edition的組件分為伺服器和工作站兩個部分。在安裝完伺服器端的相關組件後,還需要在進行開發的機器(可以就在伺服器上,也可以是另外的工作站)安裝工作站組件。其中的Business Intelligence Development Studio必須安裝,這是一個Visual Studio 2005的擴充,如果機器已經安裝過VS2005,那它就會直接將BI的開發樣板集成進 VS中,如果沒有裝過,那它則會自動替你安裝一個VS2005外殼(沒有C#、VWD等組件)。

SSRS在伺服器端的配置

伺服器端配置SSRS有兩種方法,一是通過SQL Server Management Studio,登入到Server進行操作;二是通過web訪問伺服器的Report Manage頁面,比如http://IP/Reports。兩種方法在功能上略有差別,具體操作過程可以查看相關文檔。

這一部分來討論一下SSRS的一些準系統,即報表的建立、發布和引用。

建立報表

設計環境

報表設計環境就是那個Business Intelligence Development Studio,以下簡稱BI。如果項目是在VS2005下進行的,那麼就非常方便了,因為可以在一個Solution裡像添加普通Project一樣來添加BI的工程。事實上我們也是這麼做的。

報表建立的基本步驟

在正式開始利用BI開發SSRS之前,強烈建議大家把隨機附帶的Book Online裡的相關教程全部手動完成一遍。

總的來說,一個報表的設計可以歸納為下面的步驟:
建立報表工程
建立資料來源(Data Source,rds檔案),這是報表與資料庫進行通訊的橋樑;
建立資料集,也就是報表的資料來源,報表從資料集擷取資料,並不直接存取資料庫;
進行頁面配置(layout)
預覽結果(preview),並根據結果進行進一步修改,直到完全滿足要求

報表的發布

設計完報表之後,就要將其發布到Reporting Services服務中,以供調用。我們可以把這個發布稱作deploy。

經過實際應用,發現可以有下面三種方法來進行報表的發布

在BI中編譯發布

我們設計報表是在BI中進行的,可以利用它來一次性將整個報表工程deploy到伺服器上。大致步驟如下:
菜單執行Project->Properties,將Configuration改為Production,即編輯Production模式的參數;
在右邊分別填入相應的屬性值,一般來說TargetDataSourceFolder的內容Data Sources不變,如果資料來源有更新,那麼就必須將上面的OverwriteDataSources設為True;
設定TargetReportFolder。這個值是在Report Server中的一個虛擬目錄,該工程的所有rdl檔案都將存放在這個目錄下;
設定TargetServerUrl。這裡就是Reporting Services所在的URL地址,比如本地部署可以用http://localhost/ReportServer。注意後面的那個路徑是預設的安裝路徑,在IIS中開啟預設網站後可以看到它,是一個虛擬目錄;
都填寫完畢之後,在編譯環境中切換編譯模式為Deploy,再Start Debugging,這時BI就會自動向Report Server部署這一系列的報表。

完了之後會顯示http://localhost/ReportServer這個頁面,在這個頁面中顯示的就是該報表伺服器上所有的ReportFolder,而報表則會按照deploy時的設定,分別儲存在這些folder內。進入Folder之後,點擊報表即可查看,系統已經為我們產生了一個帶有ReportViewer的aspx頁面。

通過Web下的Report Manager

下面這兩種方法均是用來管理報表伺服器,發布報表只是它們的一部分功能。

使用Report Manager的大致步驟如下:
開啟Report Manager的頁面,一般為http://ServerUrl/Reports;
進入Data Sources檔案夾,上傳資料來源的rds檔案;
回到根資料夾,建立一個ReportFolder,名稱即TargetReportFolder中的值;
進入該檔案夾,把rdl檔案逐一上傳,它會自動給報表起名,一般接受預設值。

這樣就OK了,之後也可以在ReportServer頁面下查看內容。

通過SQL Server Management Studio

在SQL Server的配置中,這個工具無疑是最強大的。在登入SSMS的時候,選擇Server Type為Reporting Services,然後指定Server的名稱,以及登入方式。登入成功後,在Home目錄下就是我們在Report Manager中看到的內容,後面的操作大同小異,就不浪費文字了。

利用ReportViewer控制項引用報表

建立、發布報表的最終目的還是為了在程式中引用它們,在此我們選擇的是最簡單的方法——使用ReportViewer控制項。

WinForm環境下的ReportViewer

WinForm下的ReportViewer控制項,位於Microsoft.Reporting.WinForms命名空間下,在VS2005中預設會出現在ToolBar中,直接將其拖放進表單即可對其操作。

一般來說,所有報表都必須設定的參數有以下幾個:
ProcessingMode:這個屬性用來設定ReportViewer的資料來源是本地還是遠程,在這裡我們設為Remote;
ServerReport.ReportServerUrl:就是我們前面看到的TargetServerUrl,即報表伺服器的URL地址。注意這個地址包含了“ReportServer”,比如http://ServerUrl/ReportServer這樣;
ServerReport.ReportPath:是ReportFolder和ReportName的組合,比如“/Test/Report1.rdl”,注意注意千萬注意,最開始的那個“/”一定不能省略!

對於實際應用,採用代碼來控制ReportViewer要比設計時設定屬性更加常用,下面就是一個簡短的例子,概括了這樣一個過程:

this.reportViewer1.ServerReport.ReportPath = "/Test/Report1"; List<ReportParameter> parameters = new List<ReportParameter>(); parameters.Add(new ReportParameter("params",textQueryString.Text)); this.reportViewer1.ServerReport.SetParameters(parameters); this.reportViewer1.ShowParameterPrompts = false; this.reportViewer1.RefreshReport();

在上面的過程中,先是設定ReportPath(ReportServerUrl在本樣本中已經指定,實際上應該通過App.config的設定字串來設定)。然後建立報表參數列表(這個params的名稱是在設計報表的時候設定的報表參數,在SQL語句中通過@params進行引用),進而調用ServerReport的SetParameters方法,將參數傳遞給報表。緊接著,將報表的ShowParameterPrompts屬性設為false,即不在ReportViewer的頭部顯示參數輸入提示。最後執行RefreshReport()方法,重新整理報表頁面。

ASP.NET環境下的ReportViewer

微軟的統一性工作無疑是相當出色的,Web下的ReportViewer在使用起來與WinForm下完全相同,唯一不同的就是控制項位於Microsoft.Reporting.WebForms下,而諸如ReportParameter等類也改為此命名空間之下。在代碼控制報表方面,不需要進行改動即可移植。

Visual WebGUI下的ReportViewer

在項目中,我們是採用VWG來作為程式的架構的。GizmoxTeam Dev也為ReportViewer設計了相應版本,控制項位於Gizmox.WebGUI.Reporting命名空間下,但要注意,它的屬性諸如ReportParameter、ProcessingMode等仍然是位於Microsoft.Reporting.WebForms下的,這一點不要搞錯。

直接通過ReportServer訪問報表

還記得前面提到過的http://ServerUrl/ReportServer嗎?SSRS已經為我們準備了一個用來查看報表的方法,即通過URL訪問,比如要查看在localhost/ReportServer伺服器中,位於Test下的Report1報表,可以直接在瀏覽器中輸入 http://localhost/ReportServer?Test/Report1,SSRS會自動調用一個系統內建的頁面來顯示它。在這個帶參數的URL後面,我們可以通過附加URL參數的方法來對報表進行控制。比如上面的那個例子,在ASP.NET中可以使用Response.Write()向頁面寫入下面的代碼來快顯視窗顯示報表:

"<script language=/"JavaScript/"> window.open('http://localhost/ReportServer?Test/Report1&params=" + textQueryString.Text + "&rc:Parameters=false&rs:Command=Render'; </script>"

其中URL參數的構造方法請參閱MSDN相關文檔。

上面說的都是常規應用,但實際上一個報表從提出需求到最後部署,絕大部分都不是會了那個樣本就能做的,中間會遇到各種各樣的問題。在這一部分中,我以問答的形式,將開發過程中遇到的問題以及解決方案分門類地列舉出來,並且不斷更新。

部署與調試
Q:我在ASP.NET下使用ReportViewer載入報表,為什麼會出現{使用者“NT AUTHORITY/NETWORK SERVICE”授與權限不足,無法執行此操作。 (rsAccessDenied)}的錯誤?
A:這是由於IIS下ReportServer虛擬目錄的存取權限沒有設定正確。解決問題的方法有三種:
在伺服器端訪問http://localhost/Reports,進入Report Manager,然後點擊“屬性”標籤頁下的“建立角色指派”,在“組或使用者名稱”中填入“NT AUTHORITY/NETWORK SERVICE”(沒有兩邊的引號),在下面勾選Browser,確定。這是給該賬戶賦以瀏覽報表的許可權,我強烈推薦這種方法;
在IIS中,修改預設網站下ReportServer虛擬目錄的屬性,在Directory Security選項卡中,點擊Authentication and access control中的Edit,開啟匿名訪問,將匿名訪問帳戶設為管理員帳號,本地登入的就設為Administrator,域帳號登入的就設為具有管理員權限的域帳號。這樣可以使訪問ReportServer的串連以管理員權限瀏覽報表。這也是網上流傳最廣的方法,但存在嚴重安全隱患,開發調試的時候沒問題,真正部署的時候不建議使用;
專門為Reporting Services建立一個匿名帳戶,比如IUSR_ReportView,然後在Report Manager裡分配Browser角色,還有等等後續步驟。這是最麻煩的,步驟之多我都懶得在這裡寫全,同樣在網上流傳很廣,但我覺得只有實在閑著沒事乾的人才會用。。。

Q:我在Visual Studio裡開發VWG,以debug方式運行,然後在ReportViewer匯出PDF時就報Session Expired錯誤,這是怎麼回事?
A:其實我也不知道為什麼。。。解決的方法是不用debug方式,直接在瀏覽器訪問網站,就OK了。至於其原因,呼喚高人來解釋~~~

報表資料相關
Q:我現在不僅僅想向報表傳遞傳統的SQL參數,比如@ID、@Count,而是想整條WHERE子句以至整個SQL語句的任何地方都可以用參數的形式來控制,可以嗎?
A:當然可以,這都不行那SSRS也太[]

/r/n/n本文來自CSDN部落格,轉載請標明出處:http://www.flatws.cn/article/program/sql-server/2010-08-25/9965.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.