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

Reporting Services

系統(tǒng) 2143 0

第14章 Reporting Services

我所寫的書中有一些章節(jié)重疊了入門篇和高級(jí)篇的部分內(nèi)容。雖然初級(jí)和高級(jí)內(nèi)容應(yīng)該分得很清,但那其實(shí)僅限于理想情況:即人人都以同種方式、按同樣順序獲得經(jīng)驗(yàn),并且對(duì)初級(jí)和高級(jí)的定義有統(tǒng)一的認(rèn)識(shí)。

本章中就有一些重疊的內(nèi)容,已經(jīng)閱讀過入門篇的讀者會(huì)注意到這一點(diǎn)。對(duì)于Reporting Services而言,這樣做的原因是多方面的,主要的兩個(gè)原因是:

有些人只是出于控制個(gè)人報(bào)表的目的而進(jìn)行數(shù)據(jù)庫(kù)開發(fā)(在這種情況下,他們幾乎都是直接從Reporting Services開始學(xué)起,然后學(xué)習(xí)用于支持報(bào)表中的數(shù)據(jù)的查詢)。而還有一些人是數(shù)據(jù)庫(kù)"專家",他們的目的在于使用SQL Server提供的"額外"功能。

這是一項(xiàng)較新的功能(相對(duì)于SQL Server這個(gè)具有長(zhǎng)久生命力的產(chǎn)品而言),所以它對(duì)于許多專業(yè)級(jí)別的人士來(lái)說也是很生疏的。

即使閱讀過入門篇中的"報(bào)告"一章,對(duì)本章內(nèi)容也不要匆匆一覽而過。因?yàn)楸M管這里重復(fù)了一些關(guān)鍵內(nèi)容,但是會(huì)稍作深入討論,并更著重于介紹真正面向開發(fā)人員的內(nèi)容(而較少關(guān)注模型驅(qū)動(dòng)方面的內(nèi)容)。不過,直接跳至有關(guān)數(shù)據(jù)源和數(shù)據(jù)源視圖的章節(jié)也是可以的,我們將從更為"專業(yè)"的角度研究其中的內(nèi)容,包括參數(shù)化、鉆取以及圖表制作。

14.1? 報(bào)表服務(wù)概述

在完成了所有查詢語(yǔ)句的編寫和存儲(chǔ)過程的運(yùn)行之后,為使得數(shù)據(jù)有用,還有一件相當(dāng)重要的事情要做--使數(shù)據(jù)對(duì)終端用戶可用。

報(bào)表是一種看上去極為簡(jiǎn)單,實(shí)則相當(dāng)棘手的事物。你不能只是簡(jiǎn)單地把數(shù)字堆在人們面前。這些數(shù)字必須是有意義的,可能的話,還要能夠抓住報(bào)表接受者的注意力。要生成實(shí)際可用的、有用的報(bào)表,需記住以下幾點(diǎn):

數(shù)據(jù)的使用量要恰當(dāng):一份報(bào)表中所列出的數(shù)據(jù)不能太多,也不能太少。一份充斥了大量數(shù)據(jù)的報(bào)表會(huì)令閱讀者迅速失去興趣,并且僅在最初的幾個(gè)項(xiàng)生成之后就被棄而不用。同樣,一份言之無(wú)物的報(bào)表也僅能得到匆匆一瞥,隨即便被毫不猶豫地丟棄。所以,應(yīng)在恰當(dāng)?shù)臄?shù)據(jù)和恰當(dāng)?shù)臄?shù)據(jù)量之間找到一種平衡。

報(bào)表要美觀大方:不得不說的是,報(bào)表的另一個(gè)重要要素就是所謂的"美觀",也就是說,報(bào)表應(yīng)該做得賞心悅目。難看的報(bào)表是沒有人會(huì)看的。

在這一章中,我們將介紹Reporting Services(通常也稱作SSRS)的幾個(gè)關(guān)鍵概念,然后再進(jìn)一步介紹一些高級(jí)內(nèi)容。雖然略過了一些"基礎(chǔ)"內(nèi)容,但為了使更高級(jí)的內(nèi)容明白易懂,我們也涉及到了一些必要的基本知識(shí),但接著很快就介紹Report Designer的內(nèi)容,其涉及Reporting Services提供的最為高級(jí)的報(bào)表選項(xiàng)。

提示:

出于行文簡(jiǎn)潔的考慮(也是為了使重復(fù)的內(nèi)容最少化),本書對(duì)于報(bào)表模型僅介紹其作用,而不附具體示例,以此區(qū)分初級(jí)和高級(jí)內(nèi)容。不過,即使你在閱讀本章之前還不太理解報(bào)表模型,也可以通過學(xué)習(xí)一些核心內(nèi)容,如數(shù)據(jù)源和報(bào)表設(shè)計(jì)器,來(lái)了解如何使用報(bào)表模型器和報(bào)表模型設(shè)計(jì)器。實(shí)際報(bào)表的構(gòu)建也是一樣簡(jiǎn)單。

14.2? Reporting Services入門

很有可能,你已經(jīng)生成過一些報(bào)表。它們可能是通過打印機(jī)打印出來(lái)的紙質(zhì)報(bào)表(采用像Access所提供的那樣的初級(jí)報(bào)表功能,實(shí)際上這是我最喜歡的Access的功能之一)。或者你使用了某種相當(dāng)強(qiáng)大的報(bào)表引擎,例如Crystal Reports。即便沒有使用過這些工具,你應(yīng)該也有過從存儲(chǔ)過程生成簡(jiǎn)單(雖然不太美觀)的報(bào)表來(lái)提交給老板的經(jīng)歷。我認(rèn)為這種可能性很大。

但實(shí)際情況是,如今的經(jīng)理和合作者們的期望越來(lái)越高。Reporting Services才會(huì)應(yīng)運(yùn)而生,它實(shí)際上有兩種不同的操作:

報(bào)表模型(Report Model):它利用一個(gè)相對(duì)簡(jiǎn)單、Web驅(qū)動(dòng)的接口讓終端用戶自行創(chuàng)建簡(jiǎn)單報(bào)表。

在Business Intelligence Development Studio中生成報(bào)表:這并不意味著一定要編寫代碼(實(shí)際上通過拖放功能就可以創(chuàng)建一個(gè)相當(dāng)棒的報(bào)表),而是可根據(jù)所需創(chuàng)建更復(fù)雜的報(bào)表。

注意,雖然用戶最終是可以通過相同的Reporting Services Web主機(jī)訪問這些報(bào)表,但這些報(bào)表是基于不同的體系結(jié)構(gòu)(并且以不同的樣式創(chuàng)建)。

需要補(bǔ)充的是,Reporting Services提供預(yù)生成報(bào)表的功能(如果構(gòu)成報(bào)表基礎(chǔ)的查詢需要一些時(shí)間運(yùn)行,那么這很有用),同樣,Reporting Services也提供通過電子郵件分發(fā)報(bào)表的功能。報(bào)表的輸出格式可以是PDF、Excel或Word。

14.2.1? 管理Reporting Services的工具

Reporting Services提供了多種工具幫助創(chuàng)建、使用及管理報(bào)表。它們包括:

Reporting Services配置管理器:在SQL Server主文件夾下的"Configuration Tools"子文件夾中可以找到該工具。使用這一工具可以對(duì)下列內(nèi)容進(jìn)行配置,如Reporting Services的運(yùn)行帳戶、支持的Web服務(wù)器所響應(yīng)的IP地址和端口、用于Reporting Services的虛擬目錄名、使用的電子郵件帳戶、跟蹤Reporting Services信息的數(shù)據(jù)庫(kù),以及加密密鑰和可伸縮性配置信息。

Business Intelligence Development Studio(BIDS):這實(shí)質(zhì)上就是安裝了一套針對(duì)Reporting Services、Analytics Integration Services和Data Mining的模板的Visual Studio。如果已經(jīng)安裝了Visual Studio 2008,那么BIDS也只是添加了一些模板和訪問Visual Studio的快捷方式而已。本書將在后面的多個(gè)章節(jié)中廣泛使用Development Studio(有時(shí)它是以SQL Server的基本安裝形式存在,有時(shí)又作為Visual Studio完整安裝的一部分)。

SQL Server Management Studio:在Management Studio中,可以連接到所有和SQL Server相關(guān)的服務(wù),以此來(lái)管理某個(gè)特定的服務(wù)。盡管Management Studio中只打包了我認(rèn)為是功能完全的基本數(shù)據(jù)引擎,但它仍是執(zhí)行安全性需求最高的任務(wù)和進(jìn)行作業(yè)調(diào)度的場(chǎng)所。

Report Server Web站點(diǎn):在這里實(shí)際運(yùn)行將在Reporting Services中執(zhí)行的大多數(shù)報(bào)表,但卻是通過"站點(diǎn)設(shè)置"鏈接來(lái)進(jìn)行的(位于瀏覽器的右上方)。這里也可以管理一些服務(wù)器的要素(例如緩存、角色分配以及計(jì)劃)。

遺憾的是,還沒有單個(gè)的工具可以囊括Reporting Services中的所有內(nèi)容。事實(shí)上,上述工具距離這一目標(biāo)都還相差甚遠(yuǎn)(就像Management Studio之于數(shù)據(jù)庫(kù)引擎)。但是,通過組合使用各項(xiàng)工具,可以管理Reporting Services的方方面面。

14.2.2? 訪問Reporting Services的其他方法

Reporting Services同樣也支持一個(gè)相當(dāng)健壯的Web服務(wù)模型。通過提供一套庫(kù)來(lái)支持.NET項(xiàng)目訪問Reporting Services Web Services API。本章末尾將對(duì)其基本內(nèi)容作一個(gè)介紹。

14.3? 報(bào)表服務(wù)器項(xiàng)目

報(bào)表模型(在入門篇中是作為Reporting Services的主要內(nèi)容)僅算是觸及到一些皮毛。Reporting Services的靈活性遠(yuǎn)遠(yuǎn)不止于此(事實(shí)上,有很多專門關(guān)于Reporting Services的書籍;其內(nèi)容相當(dāng)豐富)。除了報(bào)表模型之外,Business Intelligence Development Studio也允許創(chuàng)建報(bào)表服務(wù)器項(xiàng)目。

前文提到,關(guān)于這一主題可以寫一整本書,所以這里將采取的方法是通過一個(gè)簡(jiǎn)單的示例開始試著了解。然后再稍微做一點(diǎn)擴(kuò)展。

提示:

在此次發(fā)行版本中,報(bào)表服務(wù)項(xiàng)目的觀感都發(fā)生了很大變化。Microsoft購(gòu)買了Dundas(一家組件開發(fā)公司)大量Reporting Services組件的許可。Reporting Services的組件有了重大升級(jí)。

在了解報(bào)表服務(wù)器項(xiàng)目的過程中,將從對(duì)報(bào)表模型器和報(bào)表服務(wù)器項(xiàng)目而言都比較常見的幾處關(guān)鍵內(nèi)容開始。如果你已經(jīng)熟悉了數(shù)據(jù)源和數(shù)據(jù)源視圖,那么可以瀏覽下面的兩節(jié),選取與項(xiàng)目示例相關(guān)的內(nèi)容即可,或者也可以直接跳至關(guān)于實(shí)際報(bào)表布局的那一節(jié)。

讓我們從一個(gè)報(bào)表服務(wù)器項(xiàng)目開始。首先打開Business Intelligence Development Studio,打開一個(gè)新項(xiàng)目。通過Business Intelligence Development Studio中的"報(bào)表服務(wù)器項(xiàng)目"模板使用商業(yè)智能,如圖14-1所示。

Reporting Services ?
(點(diǎn)擊查看大圖)圖 14-1

注意:

請(qǐng)注意這一對(duì)話框的確切外觀將因Visual Studio安裝與否以及具體安裝的語(yǔ)言和模板而有所不同。該圖是Visual Studio的一個(gè)完整版本,為的是滿足本書中更高級(jí)內(nèi)容的需求。

這一項(xiàng)目將作為本章中大多數(shù)操作要進(jìn)行的對(duì)象。在該項(xiàng)目創(chuàng)建之后,便可以深入到報(bào)表的一些關(guān)鍵概念。對(duì)于已經(jīng)閱讀過初級(jí)內(nèi)容的人而言,其中的某些概念可以說是一次回顧,但是你也一定想將這首份報(bào)表的內(nèi)容整合起來(lái),使其對(duì)隨后出現(xiàn)的更為健壯的示例而言也是可用的。

14.3.1? 數(shù)據(jù)源

數(shù)據(jù)源和數(shù)據(jù)源視圖(這將在后文提到)可能是Reporting Services中最為重要的內(nèi)容了。無(wú)論建立的報(bào)表是何種類型,也無(wú)論報(bào)表是使用報(bào)表模型器還是報(bào)表項(xiàng)目,這兩項(xiàng)內(nèi)容都以某種方式發(fā)揮著作用。雖然它們的名稱相似,但是在將數(shù)據(jù)安排進(jìn)入報(bào)表的體系結(jié)構(gòu)中,它們各自服務(wù)的層次略有不同。

數(shù)據(jù)源從本質(zhì)上講就是對(duì)到從中獲取數(shù)據(jù)的位置的連接的定義。它可以是與一個(gè)SQL Server數(shù)據(jù)源的連接,也可以是與任意OLE DB或ODBC數(shù)據(jù)源的連接。如果稍稍思考一下這種可能性,那么很快就能得出結(jié)論,那就是,雖然Reporting Services與SOL Server相關(guān)聯(lián),但是卻可以在報(bào)表中使用廣泛的非SOL Server數(shù)據(jù)源。這確實(shí)是一個(gè)非常強(qiáng)大的概念。

數(shù)據(jù)源有兩種類型:

嵌入式:這種類型的數(shù)據(jù)源儲(chǔ)存在定義報(bào)表的同一文件內(nèi)。在本章后面的內(nèi)容中將會(huì)介紹到XML(稱作報(bào)表定義語(yǔ)言或RDL,Report Definition Language),只需說明所有有關(guān)數(shù)據(jù)源的信息都儲(chǔ)存在報(bào)表定義文件下的XML塊中就足夠了。對(duì)這種數(shù)據(jù)源定義的訪問受限于其所嵌入的報(bào)表。

共享式:這種類型的數(shù)據(jù)源和嵌入式大體相同,區(qū)別在于這種數(shù)據(jù)源的定義存儲(chǔ)在其自身文件中(擴(kuò)展名通常為.ds)。

本章將在后面的內(nèi)容中使用到共享式數(shù)據(jù)源。

無(wú)論是何種類型,數(shù)據(jù)源都存儲(chǔ)了多條必須的信息,并且有選擇地存儲(chǔ)了附加選項(xiàng),以應(yīng)對(duì)可能出現(xiàn)的安全問題。

1. 創(chuàng)建一個(gè)數(shù)據(jù)源

接下來(lái)要?jiǎng)?chuàng)建一個(gè)數(shù)據(jù)源,并在本章其后的內(nèi)容中一直使用它。

如果你的Visual Studio仍是默認(rèn)設(shè)置,那么可以看一下右上方的"解決方案資源管理器"。右擊"共享數(shù)據(jù)源",選擇"添加新數(shù)據(jù)源",如圖14-2所示。

然后進(jìn)入"共享數(shù)據(jù)源屬性"對(duì)話框(如圖14-3所示)。

Reporting Services ?
圖14-2
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-3

這個(gè)對(duì)話框有兩個(gè)主要部分,第一部分需要定義名稱(本例中將其命名為將要連接的數(shù)據(jù)庫(kù)名)和數(shù)據(jù)源的連接字符串(對(duì)不熟悉連接字符串的人而言,它的作用是為所有連接到數(shù)據(jù)源的對(duì)象指出路徑和登錄方法)。對(duì)連接字符串可以直接編輯,也可以單擊"編輯"按鈕,彈出如圖14-4所示的"連接屬性"對(duì)話框。

提示:

當(dāng)我第一次看到這個(gè)對(duì)話框時(shí),我微微有些吃驚,因?yàn)樗c我們?cè)贛anagement Studio中多次使用的連接對(duì)話框是不同的;但是,它包含了相同的基本要素,只是在視覺上略有不同(簡(jiǎn)而言之,不用為了外觀不同而擔(dān)心)。

在本例中,選擇了本地服務(wù)器、系統(tǒng)管理員帳戶(sa)以及我們非常熟悉的AdventureWorks2008數(shù)據(jù)庫(kù)。

繼續(xù)單擊"確定",然后單擊"共享數(shù)據(jù)源屬性"對(duì)話框中的"憑據(jù)"選項(xiàng),得到數(shù)據(jù)源安全選項(xiàng)(見圖14-5)。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-4
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-5

這里有一些選項(xiàng)頗為值得研究--它們包括:

使用Windows身份驗(yàn)證:顧名思義,這一選項(xiàng)是基于執(zhí)行報(bào)表的用戶來(lái)進(jìn)行身份驗(yàn)證。這意味著相關(guān)的Windows用戶帳戶必須不僅能訪問報(bào)表,而且有權(quán)訪問和報(bào)表相關(guān)的所有底層數(shù)據(jù)。

使用此用戶名和密碼:引用的用戶名和密碼為SQL Server登錄信息(而不是Windows的)。

憑據(jù)提示:與上面一樣,這是可預(yù)知的。憑據(jù)是在運(yùn)行時(shí)從用戶處獲得的。提供的憑據(jù)將傳遞給報(bào)表所使用的任何數(shù)據(jù)提供程序。

無(wú)憑據(jù):該選項(xiàng)強(qiáng)制匿名訪問,因此數(shù)據(jù)提供程序應(yīng)支持這類訪問,否則在運(yùn)行報(bào)表時(shí)會(huì)出現(xiàn)身份驗(yàn)證錯(cuò)誤。

在圖14-5中,我們選擇了sa,并提供了相關(guān)密碼。這意味著提供的登錄名和密碼將與數(shù)據(jù)源一起被永久保存(以加密形式)在ds文件中。

在該對(duì)話框中單擊"確定"后,回到較普通的Visual Studio項(xiàng)目,但此時(shí)已有了新數(shù)據(jù)源,開始準(zhǔn)備為報(bào)表創(chuàng)建更多必須的內(nèi)容。

14.3.2? 使用報(bào)表向?qū)?

雖然在創(chuàng)建項(xiàng)目時(shí),沒有選擇報(bào)表向?qū)ы?xiàng)目類型,但是報(bào)表向?qū)е械母鞑糠謱?duì)報(bào)表的創(chuàng)建而言也是可用的。事實(shí)上,默認(rèn)請(qǐng)求一個(gè)新報(bào)表的簡(jiǎn)單方式就是進(jìn)入報(bào)表向?qū)А3悄闳∠怂邢驅(qū)?chuàng)建了一張空白報(bào)表,否則,Visual Studio也會(huì)嘗試使用該向?qū)?lái)進(jìn)行一些操作。

繼續(xù)看已經(jīng)建立的示例,這里添加了一個(gè)報(bào)表以完成報(bào)表向?qū)У倪^程演示。在本例中,假設(shè)經(jīng)理需要一份摘要報(bào)表,要求顯示David Campbell在2003年7月完成的所有銷售訂單的銷售總量(按類別分類)。并且經(jīng)理已事先提醒過她可能晚些時(shí)候還要查看其他銷售人員不同時(shí)期業(yè)績(jī)的報(bào)表,但是現(xiàn)在她只需要Campbell先生在2003年7月的相關(guān)信息。

首先右擊"解決方案資源管理器"中的"報(bào)表"節(jié)點(diǎn),選擇"添加新報(bào)表",如圖14-6所示,進(jìn)入"報(bào)表向?qū)?對(duì)話框。

單擊"下一步"進(jìn)入"選擇數(shù)據(jù)源"對(duì)話框,如圖14-7所示。請(qǐng)注意,雖然這里選擇使用的是剛才創(chuàng)建的共享數(shù)據(jù)源,但也可以在這個(gè)對(duì)話框中創(chuàng)建一個(gè)新數(shù)據(jù)源(新數(shù)據(jù)源可以是嵌入式的,但是經(jīng)過選擇之后,也可以在后面轉(zhuǎn)換為共享式)。

?

Reporting Services ?
圖14-6
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-7
再次單擊"下一步"進(jìn)入"查詢生成器"對(duì)話框,如圖14-8所示。這里已經(jīng)創(chuàng)建了一個(gè)查詢,語(yǔ)句如下:
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-8

    
  1. SELECT?per.FirstName?+?'?'?+?per.LastName?AS?Employee, ?
  2. ps.Name?AS?Subcategory, ?
  3. SUM(sod.LineTotal)?AS?Sales, ?
  4. soh.SalesOrderID, ?
  5. soh.SalesOrderNumber, ?
  6. p.Name?AS?Product, ?
  7. SUM(sod.OrderQty)?AS?OrderQty, ?
  8. sod.UnitPrice, ?
  9. pc.Name?AS?Category ?
  10. FROM?Sales.SalesOrderHeader?soh ?
  11. JOIN?Sales.SalesPerson?SP ?
  12. ON? sp.BusinessEntityID ?=? soh .SalesPersonID ?
  13. JOIN?Sales.SalesOrderDetail?sod ?
  14. ON? soh.SalesOrderID ?=? sod .SalesOrderID ?
  15. JOIN?HumanResources.Employee?e ?
  16. ON? soh.SalesPersonID ?=?e.BusinessEntityID ?
  17. JOIN?Person.Person?per ?
  18. ON? per.BusinessEntityID ?=? sp .BusinessEntityID ?
  19. JOIN?Production.Product?p ?
  20. ON? sod.ProductID ?=? p .ProductID ?
  21. JOIN?Production.ProductSubcategory?ps ?
  22. ON? p.ProductSubcategoryID ?=? ps .ProductSubcategoryID ?
  23. JOIN?Production.ProductCategory?pc ?
  24. ON? ps.ProductCategoryID ?=? pc .ProductCategoryID ?
  25. WHERE?(DATEPART(Year,?soh.OrderDate)?=?2003) ?
  26. AND?(DATEPART(Month,?soh.OrderDate)?=?7) ?
  27. AND?( soh.SalesPersonID ?=? 283 ) ?
  28. GROUP?BY?per.FirstName?+?'?'?+?per.LastName, ?
  29. DATEPART(Month,?soh.OrderDate), ?
  30. soh.SalesOrderID, ?
  31. soh.SalesOrderNumber, ?
  32. p.Name, ?
  33. ps.Name, ?
  34. sod.UnitPrice, ?
  35. pc.Name?

這個(gè)查詢中并沒有什么深?yuàn)W的內(nèi)容,它只是把ID號(hào)為283的銷售員(也就是David Campbell)在2003年7月的總銷售額收集起來(lái)。本章稍后將演示如何使其變得可選,但是現(xiàn)在采用的簡(jiǎn)單的、硬編碼查詢。

粘貼這段查詢代碼(可在wrox.com或 www.professionalsql.com 網(wǎng)站上可獲得這一示例代碼),單擊"下一步",選擇報(bào)表格式是表格式還是矩陣式。表格式報(bào)表采用傳統(tǒng)的逐行顯示數(shù)據(jù)的布局。矩陣式報(bào)表查找的是數(shù)據(jù)的交集,主要顯示行和列的交集的匯總。具體到本例中的報(bào)表,這里選擇的是表格式,單擊"下一步"進(jìn)入圖14-9所示的對(duì)話框。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-9

生成的銷售報(bào)表將顯示出Campbell先生在2003年7月所發(fā)出的所有銷售訂單的總和。現(xiàn)在所做的選擇是要讓向?qū)?chuàng)建我們所需要的格式。選擇SalesOrderNumber作為"組",選擇Category和Sales字段作為"詳細(xì)信息"項(xiàng),單擊"下一步"。在下一個(gè)對(duì)話框中(如圖14-10所示),我選擇了"塊"格式,其中并沒藏著什么玄機(jī),選擇這種格式只是因?yàn)槲艺J(rèn)為它與具體數(shù)據(jù)最為相配。我還勾選了"包括小計(jì)"復(fù)選框。因?yàn)槲覀兪前碨alesOrderNumber進(jìn)行分組的,所以將會(huì)得到一個(gè)所有SalesOrderNumber值的總和。

再次單擊"下一步",選擇一種向?qū)邮剑盟鼇?lái)配置報(bào)表。這里選擇"海洋"樣式,不過所有樣式都能正常工作。最后一次單擊"下一步",得到一個(gè)報(bào)表摘要,如圖14-11所示,內(nèi)容包括向?qū)У娜蝿?wù)以及為報(bào)表名稱(我選擇了SalesOrderSummary,建議你也使用這一名稱,因?yàn)樵诒菊碌膶W(xué)習(xí)過程中,將對(duì)報(bào)表作出改動(dòng))。然后就可以單擊"完成",生成實(shí)際報(bào)表。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-10

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-11

第一次出現(xiàn)的報(bào)表(如圖14-12所示)看上去并不復(fù)雜。

接下來(lái),選擇"預(yù)覽"選項(xiàng)卡,預(yù)覽包含真實(shí)數(shù)據(jù)的報(bào)表外觀(如圖14-13所示)。

?
(點(diǎn)擊查看大圖)圖14-12

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-13

這是一個(gè)好的開始,但還有一些重大的缺陷,所以接下來(lái)要學(xué)習(xí)對(duì)報(bào)表進(jìn)行編輯。

要編輯報(bào)表,需先回到Visual Studio報(bào)表中的"設(shè)計(jì)"選項(xiàng)卡。繼續(xù)使用已有的示例,為了使報(bào)表看上去清爽整潔,需要注意以下幾個(gè)問題:

標(biāo)題格式盡量恰當(dāng)?shù)皿w。

數(shù)字值盡量接近貨幣值。

我們要查看每個(gè)銷售類別的信息,而不是總和。

下面將逐條討論這些問題。

首先,要更改標(biāo)題。這是最簡(jiǎn)單的一項(xiàng)改動(dòng),只要在標(biāo)題區(qū)域內(nèi)單擊一次選中標(biāo)題,然后再單擊一次激活光標(biāo),就可以像對(duì)其他選項(xiàng)卡對(duì)象一樣對(duì)標(biāo)題進(jìn)行編輯。直接雙擊也是可以的。按此操作將標(biāo)題改為D.Campbell, July 2003 Summary。

接下來(lái),要處理數(shù)字格式的問題。這個(gè)問題也不復(fù)雜。只要右擊存儲(chǔ)Sales信息的字段,選擇"文本框?qū)傩?即可,如圖14-14所示。

打開如圖14-15所示的對(duì)話框,該對(duì)話框允許對(duì)報(bào)表表格的單元格(tablix)進(jìn)行多種屬性設(shè)置。在圖14-15中,我選擇了"數(shù)字"節(jié)點(diǎn),將數(shù)字顯示設(shè)置為舍入至最接近的整數(shù)貨幣值,并使用千分符。

Reporting Services ?
圖14-14
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-15

提示:

這項(xiàng)操作并沒有詢問使用何種符號(hào)作為千分符,也沒有將它假設(shè)為逗號(hào)。千分符的使用將隨報(bào)表服務(wù)器的區(qū)域配置不同而不同,可針對(duì)每一份報(bào)表進(jìn)行覆蓋。

接下來(lái)要進(jìn)入最后也是最難的一項(xiàng)改變:將每個(gè)銷售訂單的所有類別進(jìn)行匯總。首先右擊含有[Sales]值的單元格,如圖14-16所示。選擇"行組",使用圖14-17所示的對(duì)話框修改其屬性。這限制了在更大的SalesOrderNumber組中,每一類別只返回一行(注意tablix最左邊的括號(hào),回憶一下,我們?cè)趫?bào)表向?qū)е羞x擇添加它)。到這里工作還沒有完成。我們一直把重點(diǎn)放在類別上,但是還應(yīng)該對(duì)類別進(jìn)行排序使其更具有可讀性。要實(shí)現(xiàn)這一點(diǎn),可以在當(dāng)前對(duì)話框中選擇"排序"節(jié)點(diǎn),如圖14-18所示。

當(dāng)以上操作都完成后,可以再次預(yù)覽報(bào)表,發(fā)現(xiàn)雖然許多問題都有了顯著改善,但還是存在幾個(gè)問題(如圖14-19所示)。

雖然報(bào)表逐漸開始變得"美觀",但在數(shù)字方面仍有一些問題。如果將數(shù)字與先前返回的值(回到圖14-13)比較一下,很快可以發(fā)現(xiàn)數(shù)字沒有進(jìn)行相加。沒錯(cuò),報(bào)表不會(huì)顯示出每一類的總和,而是對(duì)每一類別返回第一行。這樣是不行的。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-16
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-17
Reporting Services ?
圖14-18
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-19
為解決這個(gè)問題,需要顯式指出對(duì)每個(gè)單元格所要進(jìn)行的操作是什么。再次右擊[Sales]單元格,這一次要單擊"表達(dá)式",如圖14-20所示。
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-20
返回的對(duì)話框顯示當(dāng)前正在返回?cái)?shù)據(jù)集中Sales字段的確切值:

    
  1. =Fields!Sales.Value?

但是我們需要的是組中該字段的一個(gè)總數(shù)--或總和。要實(shí)現(xiàn)這一點(diǎn),可使用Reporting Services的一個(gè)內(nèi)置函數(shù)。在本例中,使用Sum函數(shù):

    
  1. =Sum(Fields!Sales.Value)?

要看到它在對(duì)話框中的樣子,參見圖14-21。

單擊"確定",再次預(yù)覽報(bào)表,現(xiàn)在得到了一份格式基本良好的報(bào)表(不要在格式上過度要求--目前只是剛剛開始報(bào)表的學(xué)習(xí)),如圖14-22所示,并且已經(jīng)可以準(zhǔn)備運(yùn)行,打印輸出(或輸出為另一格式)并送達(dá)經(jīng)理處。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-21
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-22

14.3.4? 參數(shù)化報(bào)表

關(guān)于David Campbell的這份報(bào)表做得很好,但是有很大局限性。回想之前,經(jīng)理曾經(jīng)提醒過她將會(huì)在晚些時(shí)候查看其他銷售人員在其他時(shí)間內(nèi)的相關(guān)信息。這便要求報(bào)表實(shí)現(xiàn)這一功能。

對(duì)于大多數(shù)報(bào)表項(xiàng)目來(lái)說,參數(shù)化都是至關(guān)重要的一個(gè)部分。所幸讓SQL Server對(duì)參數(shù)化的報(bào)表進(jìn)行識(shí)別還相對(duì)容易些。一旦報(bào)表被參數(shù)化,SQL Server就會(huì)以某種方式提示用戶提供一個(gè)參數(shù)值。本節(jié)將介紹許多使用戶進(jìn)行參數(shù)選擇變得更為簡(jiǎn)單的選項(xiàng)。

第一步,要將最基本的參數(shù)化添加至報(bào)表中。要使報(bào)表依賴于參數(shù),首先要將查詢語(yǔ)句改為需要參數(shù)。然后只需通知報(bào)表在執(zhí)行之前請(qǐng)求獲取參數(shù)。下面先來(lái)編輯查詢。進(jìn)入項(xiàng)目中"視圖"菜單下的"報(bào)表數(shù)據(jù)"項(xiàng)(在"解決方案資源管理器"面板中顯示為一個(gè)選項(xiàng)卡形式)。"報(bào)表數(shù)據(jù)"選項(xiàng)卡如圖14-23所示。雙擊報(bào)表中的數(shù)據(jù)集,彈出如圖14-24所示的對(duì)話框,該對(duì)話框允許對(duì)查詢進(jìn)行編輯(有些報(bào)表有多個(gè)數(shù)據(jù)集。這里的報(bào)表只有一個(gè))。

Reporting Services ?
圖14-23
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-24

提示:

也可以右擊數(shù)據(jù)集,選擇"查詢",在一個(gè)單獨(dú)的查詢編輯器窗口中編輯查詢。

這里已經(jīng)將Darren Campbell的BusinessEntityID、7月和2003年這些硬編碼值改為參數(shù)值(分別為@BusinessEntityID、@Month和@Year)。完成之后,可以進(jìn)入顯示參數(shù)選項(xiàng)的對(duì)話框,如圖14-25所示。

由于已在該對(duì)話框中添加了每一個(gè)參數(shù),所以這里可以直接單擊"確定",準(zhǔn)備預(yù)覽(或直接運(yùn)行)報(bào)表。在圖14-26中,通過"預(yù)覽"選項(xiàng)卡運(yùn)行了報(bào)表。請(qǐng)注意在面板頂部它是如何要求提供(這里已經(jīng)提供)這三個(gè)參數(shù)的。

在瀏覽報(bào)表的過程中,可以發(fā)現(xiàn)雖然它是以和原始報(bào)表中完全一樣的值而告終,但是現(xiàn)在卻能夠針對(duì)某一時(shí)間段或某一銷售代表來(lái)運(yùn)行報(bào)表。報(bào)表開始逐漸更趨靈活。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-25
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-26

14.3.5? 提供參數(shù)值并控制其使用(1)

目前生成的報(bào)表看起來(lái)相當(dāng)不錯(cuò)。現(xiàn)在不能再像之前那樣僅提供一份關(guān)于David Campbell的報(bào)表了,而是能在報(bào)表中輸入不同參數(shù),包括不同雇員的BusinessEntityID和完全不同的時(shí)間段。但是,在報(bào)表的使用方面,仍然還有一些問題,其中包括:

輸入值的格式為任意形式,意味著用戶可能輸入非法值。

對(duì)于何種輸入值為合適的這一問題沒有任何提示,用戶要么知道,要么憑借猜測(cè)。這對(duì)于日期和年份來(lái)說不是什么太大問題,但是對(duì)于獲得正確的銷售人員的BusinessEntityID來(lái)說就會(huì)造成困難。

無(wú)論輸入哪一位銷售人員,報(bào)表頭都被硬編碼為David Campbell。月份和年份也存在類似的問題。

下面看一下如何解決這些問題。

1. 創(chuàng)建預(yù)設(shè)的參數(shù)表

Reporting Services擁有為參數(shù)創(chuàng)建預(yù)定義值列表的能力。該功能運(yùn)用已定義的參數(shù),并對(duì)其添加附加屬性。

要將固定列表添加至@Month和@Year參數(shù)中,需導(dǎo)航至"報(bào)表數(shù)據(jù)"選項(xiàng)卡下的"參數(shù)"節(jié)點(diǎn),展開列表,雙擊需要賦值的參數(shù)(也可以右擊參數(shù),選擇"參數(shù)屬性")。對(duì)@Month參數(shù)進(jìn)行上述操作,彈出如圖14-27所示的對(duì)話框。

注意這里可以為參數(shù)設(shè)置一個(gè)自定義的提示(不一定為參數(shù)名)。還可以控制參數(shù)的初始可見性(有可能某一參數(shù)只有當(dāng)另一參數(shù)設(shè)為一個(gè)特定值時(shí)才為有效)以及是否允許可空值或空白值。

這里保留了大部分的默認(rèn)設(shè)置,但是將數(shù)據(jù)類型改成了整型(記住,我們將月份的數(shù)字作為了一項(xiàng)參數(shù))。下面就可以進(jìn)入如圖14-28所示的顯示"可用值"節(jié)點(diǎn)的對(duì)話框。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-27
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-28

在這個(gè)對(duì)話框中,我作了許多修改--最明顯的是提供了單獨(dú)的標(biāo)簽和值。標(biāo)簽為用戶顯示出可供選擇的項(xiàng),值則是指報(bào)表在執(zhí)行時(shí)將要傳遞給參數(shù)的內(nèi)容。通過選擇"指定值"單選按鈕,可以創(chuàng)建這一列表。但是請(qǐng)注意,這一列表也可以是查詢驅(qū)動(dòng)的(稍后將作介紹)。

繼續(xù)轉(zhuǎn)到"默認(rèn)值"節(jié)點(diǎn),可以發(fā)現(xiàn)這里允許提供一個(gè)默認(rèn)值(在圖14-29中,選擇的值是一直在使用的7)。

最后,切換到"高級(jí)"節(jié)點(diǎn)(如圖14-30所示),如果用戶改變參數(shù)值,這里給出了報(bào)表數(shù)據(jù)將選擇在何時(shí)作出相應(yīng)改變的選項(xiàng)。我們可以強(qiáng)制始終刷新,可以要求用戶明確提出刷新,也可以讓SQL Server來(lái)決定恰當(dāng)?shù)乃⑿聲r(shí)機(jī)。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-29
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-30

接下來(lái)你可以自己嘗試一下將參數(shù)@Year的數(shù)據(jù)類型設(shè)置為整數(shù)型,默認(rèn)值為2003。然后就可以再次預(yù)覽或運(yùn)行報(bào)表,查看所做改動(dòng)的效果,如圖14-31所示。

雖然在BusinessEntityID和Year這兩個(gè)參數(shù)中沒有發(fā)現(xiàn)顯著的不同,但可以很快注意到現(xiàn)在的Month已變成一張下拉列表,即使月份的參數(shù)實(shí)際使用的是整數(shù)值,該列表也可以為每個(gè)月份提供名稱。還可以測(cè)試一下在year字段中輸入文本。SQL Server會(huì)相對(duì)得體地指出類型不匹配的問題(雖然并不是以一種最完美的方式,但總比爆滿屏幕的錯(cuò)誤要好得多)。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-31

14.3.5? 提供參數(shù)值并控制其使用(2)

2. 通過查詢創(chuàng)建參數(shù)表

為參數(shù)@BusinessEntityID提供一個(gè)預(yù)先填充的列表要比其他兩個(gè)參數(shù)難一些。雖然可以像@Month一樣創(chuàng)建一個(gè)固定列表,但那意味著只要銷售人員的列表發(fā)生變動(dòng),就必須隨時(shí)編輯報(bào)表。月份比較穩(wěn)定,但是銷售人員的變動(dòng)頻率卻很高。每時(shí)每刻地編輯報(bào)表是不現(xiàn)實(shí)的,尤其是當(dāng)銷售人員的信息已被輸入到系統(tǒng)的其他地方時(shí)。

要啟動(dòng)上述任務(wù),首先需要?jiǎng)?chuàng)建一個(gè)新的數(shù)據(jù)集。首先右擊"報(bào)表數(shù)據(jù)"選項(xiàng)卡中的數(shù)據(jù)源,選擇"添加數(shù)據(jù)集",如圖14-32所示。

彈出如圖14-33所示的對(duì)話框。

Reporting Services ?
圖14-32
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-33
這里已經(jīng)給出了一個(gè)列出所有銷售人員的查詢。它在對(duì)話框中是完全可見的,為使它更清楚,整理成如下所示:
      
  1. SELECT?p.BusinessEntityID,?p.LastName?+?',?'?+?p.FirstName ?
  2. FROM?Person.Person?p ?
  3. JOIN?Sales.SalesPerson?sp ?
  4. ON? p.BusinessEntityID ?=? sp .BusinessEntityID;?

繼續(xù)進(jìn)入"字段"節(jié)點(diǎn),如圖14-34所示。該對(duì)話框允許在使用該數(shù)據(jù)集的所有報(bào)表中選擇返回字段的名稱(以便進(jìn)行訪問)。這里選擇默認(rèn)名稱,即使已經(jīng)選擇,也可以在結(jié)果中改變名稱。單擊"確定",數(shù)據(jù)集便創(chuàng)建成功。現(xiàn)在可以使用它對(duì)參數(shù)列表進(jìn)行布局。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-34
再次雙擊參數(shù)BusinessEntityID,將其打開以備編輯,然后轉(zhuǎn)到"可用值"節(jié)點(diǎn),如圖14-35所示。這里又一次預(yù)先填入了合適的值。如你所想,這里選擇了"從查詢中獲取值"選項(xiàng)。同樣還選擇了使用什么數(shù)據(jù)集作為數(shù)據(jù)源以及哪些數(shù)據(jù)集的字段與值和標(biāo)簽字段相關(guān)(值和標(biāo)簽字段的功能將在手動(dòng)為其賦值時(shí)體現(xiàn)出來(lái))。在預(yù)覽或執(zhí)行報(bào)表之前(如圖14-36所示),還要進(jìn)入"默認(rèn)節(jié)點(diǎn)"節(jié)點(diǎn),設(shè)置一個(gè)默認(rèn)值283(即David Campbell)。
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-35
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-36

這樣一來(lái),參數(shù)默認(rèn)值和數(shù)據(jù)類型便被迅速設(shè)置恰當(dāng)。剩下來(lái)要做的就是處理固定表頭的問題。

3. 通過參數(shù)獲取表頭和其他字段

通過編輯文本框來(lái)使用參數(shù)值相對(duì)簡(jiǎn)單。首先選中擁有現(xiàn)有固定值的文本框,進(jìn)入編輯模式。要使其變?yōu)閯?dòng)態(tài)的,需要結(jié)合多個(gè)項(xiàng)。首先,要為動(dòng)態(tài)值提供一個(gè)前綴,這里使用"Summary for:"。然后再次右擊,選擇"創(chuàng)建占位符",進(jìn)入如圖14-37所示的對(duì)話框。占位符使得Reporting Services可以對(duì)文字文本和功能代碼進(jìn)行區(qū)分。注意,"值"字段有一個(gè)下拉框,將其展開可以在大量的動(dòng)態(tài)值間進(jìn)行選擇。本例中為用戶選擇的某一個(gè)參數(shù)提供了一個(gè)參考值。繼續(xù)并單擊"確定",可預(yù)覽或運(yùn)行報(bào)表查看效果(如圖14-38所示)。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-37
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-38
要完成這一小節(jié)的內(nèi)容,還需再添加一兩個(gè)占位符,但這一次,使用的是表達(dá)式編輯器。在剛剛創(chuàng)建的占位符后面添加一個(gè)逗號(hào)和一個(gè)空格,然后右擊再次選擇"添加占位符"。但是這一次,單擊"值"字段右邊的Fx按鈕,進(jìn)入如圖14-39所示的對(duì)話框。在這幅圖中,我正在為用戶運(yùn)行報(bào)表時(shí)所選擇的Month參數(shù)添加一個(gè)參考值,但請(qǐng)注意在編輯時(shí),Visual Studio提供了IntelliSense。繼續(xù)為Month和Year都添加占位符,報(bào)表外觀將如圖14-40所示。
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-39
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-40

14.3.6? 添加圖表

Reporting Services還支持圖表對(duì)象。圖表是一種功能較為強(qiáng)大的事物,因?yàn)樗诤艽蟪潭壬鲜沟脠?bào)表不僅僅是一份報(bào)告來(lái)源,而且還能夠進(jìn)行更真實(shí)的分析。下面要為報(bào)表添加一張圖表,為本月各類產(chǎn)品的銷售情況提供一個(gè)可視化表示形式。

首先打開Visual Studio的工具箱,將Chart對(duì)象拖入報(bào)表中(這里將它放在tablix的右邊)。這將進(jìn)入如圖14-41所示的對(duì)話框,并允許在大量的圖表類型中進(jìn)行選擇。

考慮到我們并沒有太多類別可供選擇,因此決定使用3D形式的餅型圖表(如圖14-41所示)。可將"報(bào)表數(shù)據(jù)"選項(xiàng)卡中的數(shù)據(jù)集內(nèi)的字段直接拖入圖表中的特殊接收區(qū)域(如圖14-42所示)。我將Sales字段由Dataset1拖至"將數(shù)據(jù)字段拖至此處"區(qū)域,又將Categories字段拖入"將類別字段拖至此處"區(qū)域。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-41
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-42
另外在圖表屬性中將標(biāo)題區(qū)域改為Sales by Category,然后便可以再次運(yùn)行或預(yù)覽報(bào)表,如圖14-43所示。
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-43

這樣,我們便迅速擁有了一張?zhí)峁﹖ablix數(shù)字的可視化表示的基本圖表。

提示:

兩個(gè)對(duì)象間不存在相互關(guān)聯(lián)。它們只是碰巧使用了相同的數(shù)據(jù)集,而并不是被要求這樣做的。事實(shí)上,在報(bào)表建立的大部分過程中,都沒有使用圖表,如果愿意,也可以刪除tablix,而只保留圖表。

?


14.3.7? 鏈接報(bào)表

Reporting Services允許對(duì)多個(gè)報(bào)表進(jìn)行鏈接,既可以向下鉆取到更深層的細(xì)節(jié),也可以鉆取到完全不同的報(bào)表中。

鏈接過程由一系列"操作"支持。操作支持內(nèi)部的(其他報(bào)表)和外部的(如一個(gè)網(wǎng)站)鏈接。

下面要為本章中所使用的報(bào)表添加最后一個(gè)要素。要利用這個(gè)鏈接,需要下載(你可能還沒有下載)本書的代碼,找到預(yù)先創(chuàng)建的SalesOrderDetail.rdl文件。可以通過右擊"解決方案資源管理器"中的"報(bào)表",選擇"添加">"現(xiàn)有項(xiàng)",將該文件添加到項(xiàng)目當(dāng)中。

要使用這一新的Sales Order Detail報(bào)表,需要對(duì)報(bào)表中含有Sales Order Number的文本框?qū)傩赃M(jìn)行編輯,然后訪問"操作"設(shè)置,如圖14-44所示。

一旦將SalesOrderDetail.rdl文件適當(dāng)?shù)靥砑拥搅隧?xiàng)目中,并對(duì)圖14-44所示的Sales OrderNumber操作進(jìn)行了設(shè)置之后,就可以最后一次運(yùn)行或預(yù)覽摘要報(bào)表了。現(xiàn)在單擊David Campbell在2003年7月的第一個(gè)Sales Order Number,就可以得到如圖14-45所示的Sales Order Detail報(bào)表。

Reporting Services ?
(點(diǎn)擊查看大圖)圖14-44
Reporting Services ?
(點(diǎn)擊查看大圖)圖14-45

剩下來(lái)要做的事就是對(duì)報(bào)表進(jìn)行部署。在"解決方案資源管理器"中右擊報(bào)表,選擇"部署"。但是這里還有個(gè)小問題要注意--需要在項(xiàng)目定義中對(duì)部署的目標(biāo)進(jìn)行定義。

(1) 右擊報(bào)表服務(wù)器項(xiàng)目,選擇"屬性"。

(2) 在TargetReportFolder字段中,設(shè)置登錄到報(bào)表管理器時(shí)想駐留報(bào)表的文件夾。

(3) 在TargetServerURL字段中,輸入報(bào)表服務(wù)器的URL。在本例中,該URL很簡(jiǎn)單,為 http://localhost/ReportServer ,但服務(wù)器名可以是有權(quán)限對(duì)其進(jìn)行部署的任一服務(wù)器(如果在安裝時(shí)作了定義,那除Report Server外,還可用Virtual Directory)。

部署完成之后(通過右擊項(xiàng)目選擇"部署"),便可以查看報(bào)表。導(dǎo)航到報(bào)表服務(wù)器(如果是在本地主機(jī)上并使用默認(rèn)目錄,則地址為 http://localhost/Reports )。單擊報(bào)表文件夾,選擇SalesOrderSummary報(bào)表。

首次加載報(bào)表可能需要一些時(shí)間,你所見到的報(bào)表和我們?cè)陧?xiàng)目中所定義的一樣(如果回頭再次導(dǎo)航一下,報(bào)表定義將被緩存,加載速度就會(huì)變得相當(dāng)之快)。

14.4? 有關(guān)RDL的簡(jiǎn)注

RDL全稱為Report Definition Language--是一種基于XML的報(bào)表定義語(yǔ)言。在本章中我們對(duì)報(bào)表所做的所有改動(dòng)都經(jīng)由Visual Studio轉(zhuǎn)換成了RDL。如果想查看報(bào)表項(xiàng)目的RDL,可右擊報(bào)表選擇"查看代碼"。下面是我為本章所創(chuàng)建的一個(gè)示例報(bào)表的一段摘錄。它定義了為銷售人員的參數(shù)提供值的數(shù)據(jù)集。

      
  1. < DataSet ? Name = "SalesStaff" > ?
  2. < Fields > ?
  3. < Field ? Name = "BusinessEntityID" > ?
  4. < DataField > BusinessEntityID </ DataField > ?
  5. < rd:TypeName > System.Int32 </ rd:TypeName > ?
  6. </ Field > ?
  7. < Field ? Name = "Name" > ?
  8. < DataField > Name </ DataField > ?
  9. < rd:TypeName > System.String </ rd:TypeName > ?
  10. </ Field > ?
  11. </ Fields > ?
  12. < Query > ?
  13. < DataSourceName > AdventureWorks2008 </ DataSourceName > ?
  14. < CommandText > SELECT?p.BusinessEntityID,?
    p.LastName?+?',?'?+?p.FirstName?AS?Name ?
  15. FROM?Person.Person?p ?
  16. JOIN?Sales.SalesPerson?sp ?
  17. ON? p.BusinessEntityID ?=? sp .BusinessEntityID; </ CommandText > ?
  18. < rd:UseGenericDesigner > true </ rd:UseGenericDesigner > ?
  19. </ Query > ?
  20. </ DataSet > ?

可以直接修改RDL (但是要小心。如果在直接編輯時(shí)引入了一個(gè)錯(cuò)誤,那么要找出到底錯(cuò)在哪里將會(huì)十分困難)。

14.5? 小結(jié)

Reporting Services對(duì)許多SQL Server的安裝而言都有重要影響。對(duì)許多公司而言,在中央數(shù)據(jù)倉(cāng)庫(kù)中內(nèi)置一個(gè)相對(duì)強(qiáng)大的報(bào)表服務(wù)器是一種解放,使得向數(shù)據(jù)使用者散布信息變得更為簡(jiǎn)單。對(duì)另一些組織而言,Reporting Services提供的解決方案足以替代長(zhǎng)期以來(lái)所使用的報(bào)表包,如Crystal Reports。SQL Server 2008添加了一些新的功能和控件,使得報(bào)表更為精致和強(qiáng)大,引擎也經(jīng)過了重新設(shè)計(jì),可伸縮性更高。

盡管本章中所使用的報(bào)表較為可靠,但也只是我們初嘗到的一點(diǎn)甜頭。報(bào)表可以被參數(shù)化,可以嵌入圖表,可以與其他產(chǎn)品整合(如Microsoft Sharepoint Services或Microsoft Office Sharepoint Services)、可以從一個(gè)報(bào)表鉆取到另一個(gè)報(bào)表,甚至可以在報(bào)表中再嵌入其他報(bào)表。

要了解報(bào)表的更多內(nèi)容,建議閱讀有關(guān)Reporting Services的專門書籍。

?

Reporting Services


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 爱爱日韩 | 中文字幕在线看日本大片 | 成人在线免费 | 伊人一区二区三区 | 欧美肥婆xxxx欧美另类 | 国产欧美精品一区二区三区–老狼 | 97视频精品| 久久免费看片 | 一级成人生活片免费看 | 亚洲欧洲国产精品久久 | 97精品视频 | 久久精品亚洲精品国产欧美 | 国产精品第一页爽爽影院 | 日本免费一区二区三区毛片 | 国产精品香蕉在线一区二区 | 久久国产热视频 | 日韩精品另类天天更新影院 | 精品久久久中文字幕二区 | 久久免费精品 | 美日韩免费视频 | 久久久久久久综合日本亚洲 | 精品久久久久久中文字幕欧美 | 欧美性精品不卡在线观看 | 欧美三级做爰在线 | 久久精品国产精品亚洲艾 | 国产美女一级高清免费观看 | 国产欧美亚洲精品一区 | 天天操天天干天天做 | 成人看的午夜免费毛片 | 四虎影视永久地址www成人 | 婷婷综合 在线 | 狠狠操大逼 | 亚洲影院中文字幕 | 香蕉午夜视频 | 精品午夜国产在线观看不卡 | 四虎在线观看视频 | 国产精品久久香蕉免费播放 | 伊人久久波多野结衣中文字幕 | 久久久亚洲欧洲日产国码二区 | 好吊色青青青国产欧美日韩 | 国产日韩久久久久69影院 |