日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

SSRS 使用(1)建立简单的Report

發布時間:2024/4/17 58 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SSRS 使用(1)建立简单的Report 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

http://www.softnado.cn/DotNet/5.Html

作者: 來源: 日期:2009-10-27 16:17:51 人氣:154 標簽:SSRS Report 報表 .net 導讀:通常情況下,SSRS用來建立基于關系型數據源的報表,各種技術書籍上也基本介紹到此為止。而針對基于SSAS數據源的報表,介紹的卻少之又少。由于項目的需要,接觸了這方面的內容,這里就拋磚引玉,結合自己在項目中的一些體驗,介紹一下如何在reportingservices中建立基于SSAS的報表,以及如何使

通常情況下,SSRS用來建立基于關系型數據源的報表,各種技術書籍上也基本介紹到此為止。而針對基于SSAS數據源的報表,介紹的卻少之又少。由于項目的需要,接觸了這方面的內容,這里就拋磚引玉,結合自己在項目中的一些體驗,介紹一下如何在reporting services中建立基于SSAS的報表,以及如何使用parameters。

1、建立數據源

首先我們建立一個新的SSRS項目,然后建立一個新的Shared Data Sources,在Type下拉框下選擇”Microsoft SQL Server Analysis Services”,

點擊”Edit…”按鈕,選擇Cube.

?

第一步完成,我們建立好了數據源的連接。下面,我們就要建立具體的報表。我們假設以下的案例,建立一個統計每個產品的銷售量的報表,以國家,區域/省份,城市為參數來加以過濾。

2、創建空白報表

在建立一個新的報表之后,我們可以看到如下的界面。一共分為三個標簽,Data頁用來創建報表需要的數據集,Layout頁用來設計報表格式以及數據的具體展示,Preview頁即預覽報表。

由于我們選擇的數據源是Cube,所以在左邊我們可以看到所選的Cube以及它包括的度量以及維度的相關信息。

3、創建數據集

接下來,我們就開始創建報表所需的數據集。先在Dataset下拉框中選擇”New Dataset…”創建一個新的數據集。


系統會彈出以下窗口,直接按”OK”,建立一個空白的數據集。

由于Cube的復雜性,系統提供了方便的拖曳功能來實現數據集的選擇。我們通過對需求的分析,了解到需要產品維度中的產品名稱屬性以及度量值中的銷售額,以及地理信息維度中的國家,區域,城市屬性。對于前者,我們可以方便的從左邊的列表中選擇所需的屬性,并把他們拖入右邊的空白處。

我們報表需要的主體數據產品名稱以及銷售額已基本建立完成。我們點一下工具框中的”刷新”按鈕,可以看到在屏幕左邊的數據集中多出了兩個屬性:產品名稱和銷售額。

新增加的這兩項,就是我們在Layout頁中將用到的數據集成員。

4、設置參數

首先確定哪個維度下的哪個屬性為參數,在本例中,我們有三個參數,國家,省份,城市。我們需要把它們從左邊的維度列表中選中,并拖到右上方的過濾列表中。請注意,在拖的過程中,要嚴格按照順序依次拖入,并把最后Parameters列選中。


這時,我們要做的,就是很神經的一步,從Dataset頁切換到Layout頁,然后再切回到Dataset頁,于是在Dataset下拉框內,我們會驚奇地發現多了三個數據集。

我們分別點擊這三個新生成的數據集,我們會發現以下的MDX語句:

 ResellerGeographyCountryRegion:

?

 ResellerGeographyStateProvince:

 ResellerGeographyStateProvince:

?



我們注意到這三個MDX的差別,除了維度下不同的屬性之外,就是FROM語句后的差別。Country的MDX后面直接從Cube中獲得數據,而Region的FROM語句中包含一個SELECT STRTOSET(@ResellerGeographyCountryRegion,CONSTRAINED) ON COLUMNS,這就是參數間級聯關系的實現,根據所選的Country來確定顯示該國的Region,Province也是類似。這也解釋了為什么前面我提到的一定要按順序來拖參數,這樣自動生成的代碼才會按照順序來判定級聯的順序。當然,手工修改MDX也沒有問題,只要你清楚它的結構。

  經過上面的操作,三個帶有聯動關系的參數就已經實現了,接下來,我們就可以簡單設計一下報表格式。

5、設計報表格式

  切換到Layout頁面,拖入一個Table控件,然后從左邊的數據集列表中,把產品名以及銷售額拖入相應的單元格內,再對表格的樣式稍加修飾,就大功告成了。

?

6、預覽

最后切換到Preview頁面,我們就可以看到效果了。先從三個下拉框內選擇參數,然后點擊”View Report”,對應的報表數據就展示出來了。

?

?

上述簡單介紹了一下如何利用SSRS建立基于SSAS的報表,以及報表參數的運用。在實際的應用的,還有以下問題需要注意:

1、參數拖入的時候要按照需求的順序拖入

2、拖入參數后只能通過切換Tab頁面來創建或更新數據集

3、參數一但更改,Layout頁中配置參數的”Multi Value”就會被選中,所以如果大家要增加或刪除參數,一定記住去配置參數的界面中,把每個參數的多選項重新設置一下(當然,如果你就需要多選,那就不用管它)

4、在BIDS中編輯報表,其實修改的是后臺的xml文件。但有的時候,前臺的展示與后臺xml的儲存會不同步,所以,如果遇到報表預覽出錯的時候,先不要急著改,試試把報表文件關了再重新打開,這時,很可能就是見證奇跡的時刻…… 轉自 -- http://www.cnblogs.com/PumpkinDatabase/archive/2009/09/29/1576151.html

SSRS 使用(2)使用技巧

作者: 來源: 日期:2009-10-27 16:24:04 人氣:361 標簽:SSRS Report .net 報表 實例 導讀:在SSRS設計報表的時候,很多朋友對報表的圖形色彩,過濾...束手無策,下面的一些事例收集或許對您有些幫助!數據準備圖表提供了一種實現數據可視化的方法。與冗長的數據列表相比,圖表可以更有效地傳遞信息。在創建圖表前花費時間認真地準備和理解數據,將有助于快速高效地設計圖表。ReportingServic

在SSRS設計報表的時候, 很多朋友對報表的圖形色彩,過濾...束手無策, 下面的一些事例收集或許對您有些幫助!

?

數據準備
 圖表提供了一種實現數據可視化的方法。與冗長的數據列表相比,圖表可以更有效地傳遞信息。在創建圖表前花費時間認真地準備和理解數據,將有助于快速高效地設計圖表。Reporting Services 圖表數據分為三個區域:值、類別組和系列組。有關詳細信息,請參閱 SQL Server 2005 Books Online 的 SQL Server Reporting Services 部分中的使用圖表數據區域。

圖表與矩陣非常相似:

  • 圖表的類別組相當于矩陣的列組。
  • 圖表的系列組相當于矩陣的行組。
  • 圖表的值相當于靜態矩陣的行組。
  • 圖表的數據值或數據點相當于矩陣的單元。

準備圖表的數據集查詢時請牢記以下幾點:

  • 圖表值沿數字 Y 軸顯示。請確保作為值所使用的字段為數字數據類型(與包含格式化數字的字符串不同)。
  • X 軸的值根據圖表類別組的值或組標簽(如果組標簽已顯式定義)來確定。X 軸支持兩種模式(將在 X 軸類別模式和標量模式中詳細論述)。如果希望使用 X 軸標量模式,請確保用于類別組表達式的字段和/或表達式的計算結果為數字數據類型或 DateTime 對象。
  • 您可以隨意使用任意數量的圖表。圖表同其他數據區域(如矩陣或表格)一樣,綁定于一個特定的數據集。可以在數據集查詢中使用“連接”和“聯合”以包含數據集中的所有必需數據。
  • 如果圖表置于表組頭或組尾中,或置于矩陣單元中,則傳遞到圖表控件中的數據會限制為構成該組的數據的子集。圖表不能置于表的細節行中,因為只引用一個數據行。
  • 若圖表中數據過多(如幾千個數據點),則解釋起來會很困難,除非使用散點圖來顯示數據點的值和群集的分步。如果詳細級別的數據粒度并非必需或沒有用處,則可以考慮在數據集查詢中預先聚合數據。

返回頁首

 圖表標簽
 本節包含下列圖表標簽主題。當您研究下節中的示例時,您會發現偶爾跳回到本節所介紹的主題很有用。

  • X 軸類別模式和標量模式
    此節說明兩種 X 軸模式之間的顯著區別。可以使用 CategoryAxisSettings 示例報表作為試驗的起點。
  • 軸標簽
    軸標簽部分對應用標簽設置及在運行時這些設置如何影響圖表的視覺外觀進行深入討論。
  • 數據點標簽和圖例標簽
    此節講述如何通過添加數據點標簽和圖例標簽來改進圖表。
  • X 軸類別模式和標量模式
  • X 軸有兩種模式。可使用“圖表屬性”對話框中“X 軸”選項卡上的“數值或時間刻度值”選項來設置模式。
  • 類別模式

類別組表達式的值確定 X 軸的各個類別。標簽僅針對在數據中的實際類別顯示。在類別模式中,組內的排序順序和顯式排序表達式很重要,因為圖表控件將不再對類別重新排序。針對 X 軸所定義的格式代碼僅在組表達式或組標簽表達式(如果已顯示定義)計算結果為非字符串對象時才會應用。

如果存在多級類別分組,則會顯示類別的分組跨度。

 標量模式

X 軸的值范圍由最小和最大類別組表達式的值決定。因此,為了可以比較和排序,組表達式的值必須為數值或 DateTime 值。數據中的間隙(例如,使用 DateTime 類別分組卻只有七月和九月的數據)在 X 軸上顯示,類別則按比例繪制到數字或 DateTime 軸。在標量模式中只允許一個類別分組。

圖 1A 和 2A 中的圖表顯示相同四周的訂單數據。


 圖 1A 類別軸模式下的 X 軸和分組跨度

 
 圖 2A 標量模式下的 X 軸

 圖1A中的類別軸模式

由于在底層數據集中沒有周末(周六和周日)的訂單數據,因此在圖 1A 中未顯示該類別。示例使用兩種類別分組,如圖 1B 所示。內部組表達式使用 =Day(Fields!OrderDate.Value) 來按天分組。外部組表達式使用 =Month(Fields!OrderDate.Value) 來按月分組。

注意 外部組標簽表達式定義為 =MonthName(Month(Fields!OrderDate.Value)),該表達式使用月名作為分組跨度的標簽。


 圖 1B 具有多個類別分組和跨度的類別軸模式下的 X 軸

 圖 1C 顯示了 X 軸屬性的設置。在類別模式中,最小、最大和間隔的語義均基于類別索引。因為沒有指定任何顯式軸的屬性,所以所有類別的數據均顯示一個標簽。


 圖 1C 針對類別軸模式的 X 軸設置

圖2A中的標量軸模式

標量模式中的 X 軸顯示數值或 DateTime 值。X 軸涵蓋了最小值和最大值范圍之間的全部值。因此,圖 2A 包含周末對應的間隙,因為它們沒有訂單數據。

在標量模式下使用 X 軸時僅允許一個類別分組。類別分組的值必須計算得出數值或 DateTime 值。X 軸標簽的格式由 X 軸上的格式字符串設置確定,本例中為 MMM dd。圖 2B 顯示了 X 軸屬性的設置。


 圖 2B 標量模式下的 X 軸設置

有關數字和 DateTime 格式字符串的詳細信息,請參閱 Microsoft Developer Network (MSDN) 上 .NET Framework 開發人員指南中的以下頁面:

  • 標準數字格式字符串
  • 自定義數字格式字符串
  • 標準 DateTime 格式字符串
  • 自定義 DateTime 格式字符串

軸標簽

Y 軸標簽始終基于數值。如果未指定顯式軸設置,則 Y 軸使用自動縮放模式,如下所述:

  • Y 軸的最小值根據所有數據點中最低的 Y 值而定。如果最小的數據值不是整數值而是雙精度值(比如 3.75)且關閉了側邊距,則您會發現 Y 軸標簽未四舍五入為整數(例如,間隔為 1:3.75、4.75、5.75 等等)。
  • Y 軸的最大值根據所有數據點中最高的 Y 值自動確定,除非顯式指定最大值。
  • Y 軸的主要間隔根據數據值自動確定(在圖 3 中自動主要間隔為 20)。
  • Y 軸的次要間隔將主要間隔分成若干段(在圖 3 中自動次要間隔為 4;因此 20 / 4 = 5 個次要間隔段構成一個主要間隔段)。
  • 由于 Y 軸的值始終為數字,所以可以直接應用數字格式字符串。此設置會應用于所有已生成的 Y 軸標簽。

    圖3. Y 軸設置

X 軸模式

如先前部分所述,X 軸有多種模式。根據不同的模式,會提供不同的格式選項,軸設置(最小值、最大值、交點等等)也可能有不同的解釋。下面對不同的格式選項進行說明:

  • 基于數字類別組值的標量模式

采用這些設置,X 軸非常類似于 Y 軸。軸設置(如最小值、最大值、交點、主要間隔及次要間隔)被解釋為整數值或雙精度值。

 由于 X 軸的值為數字,所以可以直接應用數字格式字符串。

  • 基于 DateTime 類別組值的標量模式

軸最小值:如果軸最小值設為常量(比如 2005)或具有整數結果的表達式(比如 =2005),則此值會被解釋為該年的第一天(如 2005 年 1 月 1 日)。

軸最大值:整數設置被解釋為該年的最后一天(如 2005 年 12 月 31 日)。

軸交點:設置被解釋為年中。

主要間隔和次要間隔:間隔設置被解釋為天(相當于 OADate 格式)。例如,5 表示 5 天的間隔,0.5 表示半天(12 小時)的間隔。

 對于標簽格式設定,可以直接應用標準 DateTime 格式字符串。

  • 類別模式(未選擇數值或時間刻度值選項)

圖表控件基于類別組表達式值,將類別在多個系列中匹配(例如,2006 系列中類別為一月的數據將與 2007 系列中類別為一月的數據處于同一集合。

只有類別組表達式(或如圖 4 中的標簽表達式)的計算結果為數字或 DateTime 數據類型時,X 軸選項卡上的格式字符串設置才有效。通常使用類別模式時,類別組表達式的計算結果為字符串對象,因此隨后應用的格式代碼無效。可添加或更改類別組標簽表達式,或直接通過標簽表達式應用格式設置,如圖 4 所示。

注意 在類別模式中,最小值、最大值和間隔的語義均基于“類別索引”。例如,將 x 軸最小值設置為 2 意味著不會顯示第一個類別的數據。將主要間隔設置為 5 意味著在 x 軸上僅每隔 4 個類別顯示標簽。這在 x 軸有很多類別(和標簽)且類別的底層語義實際為數字時很有用。

注意 Reporting Services 2005 也允許在“X 軸”和“Y 軸”選項卡中顯示的所有輸入字段(“標題”、“最小值”、“最大值”、“主要間隔”、“次要間隔”等)中使用表達式。

 
 圖 4 如果顯式定義標簽表達式,則顯示在 x 軸(類別軸)上的結果是標簽表達式的結果,而不是組表達式的結果。

軸標簽格式設置問答

  • 問(Y 軸):如何可在 y 軸上實施“準確的”基于整數的標簽?

答:如果未指定軸設置,則圖表控件將基于數據點 y 值自動確定這些值。如果數據點的最小值/最大值不是整數,y 軸標簽則可能使用雙精度值。

不過,如果至少有一個軸設置(如“最小值”或“交點”)被報表作者顯式指定為整數值,則圖表控件會將自動檢測到的值圓整為最接近的整數值,然后顯示“準確的”標簽。例如,可動態設置 y 軸的最小值,并如此進行圓整:=Floor(Min(Fields!Freight.Value))。

  • 問(標量 x 軸):啟用“數值或時間刻度值”導致在運行時圖表未顯示任何數據點。哪里出現了問題?

答:很可能是因為類別組表達式的計算結果為字符串而不是數值。相應更改類別組表達式。如果不想更改獲取標量數據值而不是字符串值的查詢,還可在報表中使用 Microsoft Visual Basic 函數(如 CInt()、CDbl() 或 CDate())執行類型轉換。

  • 問(類別 x 軸):如果類別數量增加,x 軸將變得擁擠,最終將不再繪制軸標簽。如何能夠控制類別模式下 x 軸的標簽數量?

答:圖表控件會嘗試自動定位 x 軸標簽以避免重疊標簽文本。默認情況下,每個類別在 x 軸上均具有一個標簽。可顯式設置 x 軸主要間隔設置以覆蓋此默認行為。例如,將主要間隔設置為 5 將僅每隔 4 個類別顯示標簽。

  • 問(X 軸):X 軸標簽是如何自動定位的?

答:當前,內置的 Reporting Services 圖表僅允許自動定位以避免覆蓋 x 軸標簽。軸標簽的標簽方向(水平/垂直)取決于標簽字符串大小和可用空間。X 軸標簽可以一行水平顯示、以能夠換行的多行水平顯示或垂直顯示。當前并不支持以某一角度顯示 x 軸標簽或對單個 x 軸標簽位置顯式手動控制。

 注意 有多個第三方圖表加載項,能夠對軸標簽進行更多控制。這些加載項可安裝在 Reporting Services 2005 上。

數據點標簽和圖例標簽

數據點標簽可專用于指出圖表中所有可見數據點中的某些值(如總體最小值或最大值)。

要啟用數據點標簽,請在“圖表屬性”對話框中編輯圖表值。這將打開“編輯圖表值”對話框,其中含有“點標簽”選項卡,該選項卡具有“顯示點標簽”選項。

 定位數據標簽

打開數據標簽時,默認情況下,每個數據點將顯示一個標簽。數據點標簽將自動定位以避免重疊標簽。如果數據點標簽重疊,圖表控件會將重疊標簽移至圖表繪圖區的空閑空間中(并畫出輪廓以將數據點標簽與數據點值相連)。如果太多標簽重疊,圖表控件將刪除個別數據點標簽,直至有足夠的空間可放下其余標簽而不會重疊。

除了自動定位外,還可使用顯式“手動標簽定位”(頂部、靠左、居中等)。不過,視數據值以及數據點標簽的長度和大小而定,這可能導致重疊標簽。

默認情況下,數據點標簽將顯示數據點的 y 值。也可指定顯式數據點標簽表達式和數字或 DateTime 格式字符串來自定義標簽。通常,會使用類似于用于計算數據點值表達式中 y 值的表達式執行數據點標簽計算。例如,要在該部分所占的相對份額大于總量的 5% 時只顯式數據點標簽,可使用類似以下步驟中代碼的數據點標簽表達式。

  • 對于數據點標簽表達式,請使用以下表達式:

    =Code.GetLabel(Sum(Fields!Sales.Value), Sum(Fields!Sales.Value,"SalesChart"))

  • 打開“報表屬性”對話框,然后單擊“代碼”選項卡。在“自定義代碼”選項中添加以下 GetLabel(…) 自定義代碼函數。

    Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
    If currentValue / totalValue < 0.05 Then
    Return " "
    Else
    Return Format(currentValue / totalValue, "P1")
    End If
    End Function

代碼解釋

GetLabel() 函數有兩個參數。第一個參數提供該特定數據點的當前值。第二個參數提供總量計算。此函數計算相對百分比。如果它小于 5% (0.05),將返回一個具有空格的字符串。

注意 返回一個空值或空字符串將顯示自動生成的默認標簽。如果相對百分比至少為 5%,則將返回百分比格式字符串(格式字符串:P1)。

可在此白皮書隨附的 PiePercentage 示例報表中找到應用此種格式的示例。

餅圖和圓環圖數據標簽位置

對于餅圖和圓環圖,只有兩種數據點標簽位置:內部(將數據點標簽位置設置為“自動”或“居中”)和外部(任何其他標簽位置)。圖 5(以及 PieSimplePercentage 示例報表)中顯示了外部標簽示例。


圖 5。餅圖中圖表外的數據點標簽

可如圖 6 所示指定餅部分標簽的位置。
 
 圖 6。通過選擇除中央位置外的任意位置將數據點標簽設置在餅圖或圓環圖外

圖例標簽

通常,基于動態系列組值或標簽(如在組上顯式指定)和(靜態系列)值的名稱確定圖例標簽。因為圖表實質上是分組層次結構的扁平化表示,所以圖例標簽基于該層次結構生成。

例如,如果圖表含有兩個系列分組(外部的定義為 OrderYear,內部的定義為 OrderQuarter),且僅有一個圖表值(如 Actual),圖例標簽將通過將組值和圖表值串聯生成,如表 1 所示。


 假設我們再添加一個名為 Budget 的圖表值。使用與上一示例相同的數據,所生成的標簽將如表 2 所示。


 注意 通過將組標簽表達式設置為返回空字符串 (=""),可隱藏層次結構中的單個內部級別。這將從生成的圖例標簽中刪除該組級別。

空數據點和標簽

以下情況您可能會覺得很熟悉。您構建了一個具有一個數據系列的圖表,數據點標簽已打開,此圖表看上去很好。您決定添加一個動態系列組以便該圖表顯示多個數據系列。可此時該圖表卻具有額外標簽(用于空數據點)。

在底層數據集對每個系列/類別組合都不包含數據值時,會出現空數據點。此圖表實質上等同于一個具有空單元的(稀疏)矩陣。

可刪除空數據點的標簽。使用此白皮書隨附的 EmptyDataPointLabels 示例報表中所示的方法(另請參閱圖 7),而不打開數據點標簽和使用默認標簽。以下是執行此操作的示例代碼。

1.使用 Count(…) 函數確定為此數據點聚合多少底層數據集行。如果計數為零,則這是個空數據點。通過實際的標簽值將計算值傳入自定義代碼函數:

=Code.GetLabel(Avg(Fields!UnitsInStock.Value), Count(Fields!UnitsInStock.Value))

2.打開“報表屬性”對話框,然后單擊“代碼”選項卡。在“自定義代碼”選項中添加以下 GetLabel(…) 自定義代碼函數。

Public Function GetLabel(ByVal datapointValue As Double, ByVal count As Integer) As String
If count = 0 Then
Return " "
Else
Return Format(datapointValue, "N1")
End If
End Function


 
 圖 7 具有無標簽空數據點的示例報表

數據點標簽格式設置問答

問:在圖表充滿數據點和標簽時,靠近數據點標簽的灰線(稱為輪廓)有何用途?

答:如果數據點標簽位置設置為“自動”,則圖表控件會將標簽移至空閑空間區中以避免重疊數據點標簽。這些輪廓將通過數據點位置連接數據點標簽。

可使用手動定位避免此情況。使用表達式,可通過提供具有空格 (=" ") 的字符串的計算結果動態隱藏大部分數據點標簽。否則,將在打開數據點標簽時顯示默認標簽。

 問:標簽格式設置可使用 Dundas 關鍵字嗎?

答:可以,可對數據點標簽使用內置的 Dundas 關鍵字。不過,通常建議您不要同時將 RDL 表達式和 Dundas 關鍵字同時使用(RDL 表達式將首先被計算,Dundas 函數將由圖表控件隨后進行解釋)。表 3 含有有用的 Dundas 關鍵字的列表。

 

  返回頁首

 示例圖表和報表

 本節包含了創建不同類型圖表和報表的示例。您可能會發現在研究這些示例時,有時回到先前小節中介紹的圖表標簽主題會很有幫助。以下是本節介紹的一些示例。

  • 柱形圖和折線圖混合圖表 大體介紹了組合圖表和 SalesCostTarget 示例報表。
  • Pareto 圖表 實現圖表的 Pareto 可視化(ParetoChart 示例報表)。
  • 移動平均計算 圖表中時間系列趨勢的計算和可視化(MovingAverage 示例報表)。
  • 自定義圖表調色板和圖例 如何自定義圖表中的顏色(CustomColorPalette 示例報表)。
  • 餅圖和圓環圖 使用餅圖和圓環圖時要注意的具體信息。
  • 添加圖表數據表 說明如何將聚合的圖表數據鏈接到明細數據(PiePercentage 示例報表)。
  • 散點圖和氣泡圖 設計散點圖和氣泡圖的重要提示(BubbleChart、StepFunctionChart)。
  • 表格內嵌圖表 也許您不需要復雜的圖表顯示,或者您必須在運行時處理未知數量的數據,但仍希望有用、良好的顯示。本節介紹了實現此目標的途徑 (TableInlineCharts)。
  • 圖表可擴展性和手動創建圖表 討論在內置圖表不夠時有何選擇。

在下載文件中,與此白皮書一起還包含了基于 SQL Server 2005 AdventureWorks 示例數據庫和 Northwind 示例數據庫的一些示例報表。

柱形圖和折線圖混合圖表

將一些數據系列顯示成柱形并將其他數據系列顯示為線條的圖表常用于說明總體趨勢、目標值或用于深入分析圖表中的數據。本節介紹了關于如何在 Reporting Services 中設計這種圖表的通用信息。

創建柱形圖和折線圖混合圖表:

 1.將一個圖表添加到報表,并將圖表類型設置為“柱形圖”。

 2.通過添加類別組和/或系列組以及數據值來設計圖表。

 3.對于要用折線顯示的數據值,在“報表設計器”中執行以下步驟:

1.打開“圖表屬性”對話框。

 2.單擊“數據”選項卡。

 3.選擇要顯示為折線的數據值,然后單擊“編輯”。

 4.在“編輯圖表值”對話框中,單擊“外觀”選項卡,再選擇“將數據繪制為線條”(見圖 8)。

圖 8. 在柱形圖中將數據系列繪制成折線


 圖 8. 在柱形圖中將數據系列繪制成折線

將常數或動態目標值添加到圖表:

1.設計圖表。

 2.在“圖表屬性”對話框中的“數據”選項卡上,添加新的數據值(例如,Target)。

 3.設置目標值(圖 9 中的示例使用了橫跨所有類別的常數目標值 100000)。請確保使用以 = (等號)開始的表達式。否則,不會將目標值解釋為數字值。

 
 圖 9. 添加目標值

SalesCostTarget 示例報表(見圖 10)使用此方法在圖表中添加了一條簡單的銷售目標線。


 圖 10. 目標值(紅色線)

注意 由于折線圖系列的線條是通過連接多個類別的數據點來繪制的,因此只有在類別分組至少有兩個在運行時不同的組實例值時才能看到線條。

注意 如果圖表包含一個或更多的系列組,目標數據值對于每個系列組實例都相同。如果每個組實例都具有特定的目標值,這可能會很有用。

如果您只希望將一個全局目標值用于所有系列,可以按以下方式動態設置目標數據值:

=iif(Fields!.Value = First(Fields!.Value, ), , Nothing)

具體的表達式實例可能與以下代碼類似:

=iif(Fields!Year.Value = First(Fields!Year.Value, "SalesChart"), 100000, Nothing)

Pareto 圖表

Pareto 圖表概括并顯示了數據組之間差異的相對重要性。Pareto 圖表可將“致命的少數”和“有用的多數”區別開來。還可將 Pareto 圖表定義成柱形以降序排列的柱形圖,以識別最大的改進機會。

盡管內置的 Reporting Services 圖表目前并不直接支持 Pareto 圖表,但是您可以使用 Reporting Services 2005 功能并編寫一些代碼來創建 Pareto 圖表。本節深入解釋了此白皮書附帶的 ParetoChart 示例報表。

以下是 ParetoChart 示例報表的方案描述。

SQL Server 2005 AdventureWorks 數據庫包含關于銷售雇員的數據。我們對分析以下與我們的銷售雇員有關的信息特別感興趣:

  • 如果以獲得去年最高獎金的銷售雇員為基礎,Pareto 分析會是什么樣子?(見圖 11 中的橙色線。)
  • 去年哪些雇員領取到最高獎金?這與他們今年的總銷售額相比結果如何?(見圖 11 中的藍色和綠色圓柱。)
  • 將去年的獎金與今年的銷售額相比較,在銷售業績上有沒有重大變化?雖然可通過比較藍色和綠色的圓柱對此做出解答,但圖 11 中橙色和紅色 Pareto 線條的巨大差距使結果更加明顯。 對于某個具體的銷售雇員,我們想深化其過去和現在的銷售業績以根據多年的數據分析歷史趨勢。

這一點可通過增加對銷售數據值(圖 11 中的綠色圓柱)的鉆取操作來實現,因為通過鉆取操作可詳細分析個別銷售人員的數據而完成趨勢分析。鉆取報表(MovingAverage 示例報表)將在下一節詳細說明。


   圖 11. Pareto 圖表示例報表

構建 Pareto 圖表報表

1.定義檢索必需銷售數據的查詢。

該查詢將根據獎金值對每個銷售人員的數據進行預排序。它不會檢索獨立的銷售訂單,因為此報表不需要它們。這樣也可使數據集盡可能小。

 2.設計總體圖表布局。

將柱形圖添加到報表中。若要分析每個銷售人員的數據,需基于銷售人員添加一個類別組(分組依據 =Fields!SalesPersonID.Value)。對于類別標簽,顯示銷售人員的名和姓。這一點可通過將類別組標簽表達式設為以下形式來實現。

=Fields!FirstName.Value & " " & Fields!LastName.Value

3.準備圖表以進行 Pareto 計算。

我們將 RunningValue(…) 函數用于計算。

注意 僅在從 Reporting Services 2005 開始的圖表中才支持 RunningValue 函數。

與矩陣相似,RunningValue 函數需要圖表中明確的分組范圍,以確定運行值是否應跨越某個特定數據系列的所有類別運行(實質上是水平方向),或者是否應跨越某個特定類別的所有數據系列運行(比較少見)。

 對于 Pareto 計算,我們需使用 RunningValue 函數以使用一個系列組名稱作為其“重置”范圍(因此跨越所有類別運)。由于我們還沒有用于此特定圖表的系列組,因此我們可只根據常數值(例如 1)添加一個假系列組。

組表達式:1

標簽表達式:=""(從生成的圖例標簽中隱去系列標簽)

結果將產生一個數據系列,同時提供一個明確的系列范圍名稱。

 4.將獎金和銷售數據值添加為圓柱。

通過將相應的數據集字段拖到圖表上,可將 Bonus 和 SalesYTD 的數據值添加到圖表中。

注意 本示例對獎金和銷售值使用了 Sum() 聚合函數。

我們想將圖例放在圖表繪圖區的左上角。因此,我們希望縮放 y 軸,以便圖表中顯示的最大數據點值不超過 y 軸總高度的 75%。

我們通過將獎金計算按 75% 的系數縮放實現此目標:

=0.75 * Sum(Fields!Bonus.Value) / Max(Fields!Bonus.Value, "SeriesGroup")

?

我們對銷售計算執行相同的操作:

=0.75 * Sum(Fields!SalesYTD.Value) / Max(Fields!SalesYTD.Value, "SeriesGroup")

5.將 y 軸設置為百分數軸。

在上一步中,我們將獎金計算和銷售計算設置為百分比計算(相對最大值的數量)。

將 y 軸的格式字符串設為 P0 將應用百分比格式(實際 y 軸將在 0.0 和 1.0 之間按比例劃分)。為獲得良好的間隔,我們將 y 軸的主要間隔設置為 0.2 以設置 20% 的間隔。

 6.將獎金和銷售的 Pareto 計算添加為線條。

RunningValue() 函數在重置之前一直進行累積計算。我們希望永不重置。由于我們起初沒有明確的系列組,因此我們在步驟 3 添加了一個系列組。

Pareto 計算是指累加和除以總值。對于獎金 Pareto 計算,我們使用以下表達式。

=RunningValue(Fields!Bonus.Value, Sum, "SeriesGroup") / Sum(Fields!Bonus.Value, "SeriesGroup")

我們對銷售 Pareto 計算執行相同的操作:

=RunningValue(Fields!SalesYTD.Value, Sum, "SeriesGroup") / Sum(Fields!SalesYTD.Value, "SeriesGroup")

7.添加針對銷售數據值的鉆取操作。

要啟用對 MovingAverage 示例報表中單個銷售人員的銷售數據進行鉆取分析,我們需要添加針對銷售數據點的鉆取操作(見圖 12)。由于我們只對某一個特定的銷售人員感興趣,因此我們將 SalesPersonID 鉆取參數設為當前類別組的值。在本例中為當前銷售人員 ID:=Fields!SalesPersonID.Value。


 圖 12. 添加鉆取操作

8.通過添加格式、數據點標簽和圖例完成圖表。

移動平均計算

移動平均是用于分析時間系列數據的一系列類似的統計技術之一。可對任何時間系列計算移動平均系列。

雖然內置的 Reporting Services 圖表不直接支持移動平均計算,但是您通常可編寫代碼來執行此類計算。本節深入講解了 MovingAverage 示例報表。

該示例報表與上一節有關 Pareto 圖表中說明的方案有關。對于某個具體的銷售雇員,我們想分析其過去和現在的銷售業績以根據多年的數據分析歷史趨勢。移動平均可用于消除短期波動,以此強調長期走向或周期。

MovingAverage 示例說明了如何計算簡單的移動平均數(先前 n 個數據點的未加權平均數)。在這個具體示例中,我們使用了先前三個月的銷售數據。請參見圖 13。


 圖 13. 移動平均計算

構建報表

  • 定義查詢以便其檢索必要的銷售明細數據。 該查詢需經過參數化,以便只檢索一個特定銷售人員的數據。根據報表參數(由一個基于有效值列表的數據集填充)設置查詢參數。
  • 設計總體圖表布局。 將柱形圖添加到報表中。對 x 軸使用類別模式,以便您能擁有兩個分組級別:在內部級別按月分組,在外部級別利用分組跨度按年分組。月份組使用以下的顯式組標簽表達式將月份格式化為縮寫的月份名稱。=Format(Fields!OrderDate.Value,"MMM")
  • 準備圖表以進行移動平均計算。 如在 Pareto 計算的步驟 3 中一樣,我們使用 RunningValue 函數。移動平均計算不能跨越類別重置,因此我們根據 SalesPersonID 添加系列分組。由于已基于特定的銷售人員對查詢進行過參數化,因此將只有一個銷售人員系列。該系列組標簽表達式被設為 =Fields!FullName.Value,因此圖表的圖例項將包含銷售人員的全名。
  • 將銷售計算添加為圓柱。 將 TotalDue 數據集字段拖到圖表值放置區以根據 Sum() 聚合添加銷售數據值。若要將詞“Sales”連接到系列組標簽(如步驟 3 中所定義,該組標簽為銷售人員的全名),我們可將數據值標簽顯式設置為 Sales。
  • 添加移動平均自定義代碼函數。下表說明了通過使用隊列進行移動平均計算的一個示例。“隊列內容”列顯示了一個具體月份的當前隊列內容。表的最后一列基于聚合添加到隊列和從隊列刪除的項來顯示 RunningValue 計算。表下方的代碼示例說明了此算法的實現。



 要實現基于隊列的 RunningValue,請將以下代碼添加到“報表屬性”對話框“代碼”選項卡的“自定義代碼”部分。

Private queueLength As Integer = 3
Private queueSum As Double = 0
Private queueFull As Boolean = False
Private queue As New System.Collections.Generic.Queue(Of Double)

Public Function MovingQueue(ByVal currentValue As Double) As Object
Dim removedValue As Double = 0
If queue.Count >= queueLength Then
removedValue = queue.Dequeue()
End If
queueSum += currentValue
queueSum -= removedValue
queue.Enqueue(currentValue)
If queue.Count < queueLength Then
Return Nothing
ElseIf queue.Count = queueLength And queueFull = False Then
queueFull = True
Return queueSum / queueLength
Else
Return (currentValue - removedValue) / queueLength
End If
End Function

  • 將移動平均銷售值添加成線條。

移動平均的數據值計算將基于由 MovingQueue 自定義代碼函數返回的值使用 RunningValue 函數。MovingQueue 函數將為累計的 RunningValue 運算計算調整值。通過使用以下代碼來實現這一點。

=RunningValue(Code.MovingQueue(Fields!TotalDue.Value), Sum, "SalesPerson")

注意 要在一個圖表內運行多個移動平均計算,必須確定在系列結尾重置隊列的方式,或使用多個隊列。例如,您可以使用隊列(這些隊列基于系列組值進行索引,并作為附加參數傳遞給 MovingQueue 函數)的散列表。

注意 一個圖表不能跨過多個頁面。因此,需將變量聲明為專用非共享變量。

 若要在另一個跨過多個頁面的數據區域(例如列表、表格或矩陣)中使用移動平均計算,必須將變量聲明為共享(即,靜態)變量以越過分頁維持狀態。然而,由于此時使用靜態變量,如果兩個人同時運行報表,將存在其中一個人破壞另一個人的變量狀態的可能性,但這種可能性很小。如果您需要徹底回避這種可能性,可基于請求用戶的 ID (=Globals!UserID) 將每個共享變量創建到一個散列表中。

自定義圖表調色板和圖例

圖表使用有 10 到 16 種不同色彩的預定義內置調色板。從 Reporting Services 2000 Service Pack 1 (SP1) 開始,您就可以覆蓋默認色彩。若要將色彩值指定為常量或基于表達式的值,請單擊外觀屬性上的“系列樣式”按鈕以獲取“編輯圖表值”對話框中的數據值。例如,您可以通過此操作來基于特定條件(如當前系列中的最小值或最大值)突出顯示值。

注意 如果您不想定義一個完整的自定義調色板,您可以覆蓋單個數據點的色彩。請使用表達式返回一個具體色彩值(以便覆蓋)或返回“空值”,這樣可從底層內置調色板拾取當前色彩。

例如,您想以紅色突出顯示 y 值為負數的所有數據點值。對于所有其他數據點,您希望使用默認色彩顯示。為此,請選擇“編輯數據值”并單擊“外觀”選項卡。單擊“系列樣式”按鈕以打開“樣式屬性”對話框。單擊“填充”選項卡。在填充色彩樣式屬性中輸入以下表達式。

=iif(Sum(Fields!Sales.Value - Fields!Cost.Value) < 0, "Red", Nothing))

注意 如果您將填充色彩設置為一個常量值,此色彩會應用于具體數據系列的所有數據點。

圖表圖例使用色彩字段將圖例項匹配到可見數據點。圖例只能對每個圖例項(數據系列)顯示一個色彩字段;因此,它顯示系列內第一個數據點的色彩。在您使用表達式動態確定系列內單個數據點色彩時請牢記這一點;即圖例項總是顯示第一個數據點的實際色彩。

雖然內置于 Reporting Services 圖表中的圖例易于使用,但是缺乏靈活性。例如,圖例會占用圖表內的空間。如果將圖例置于繪圖區外,在圖例有所增長時,圖表繪圖區的尺寸會相應地縮小。

您可以通過使用圖表或矩陣生成您自己的自定義圖例來獲得更大的靈活性以更好地控制圖例。若要使圖表中的色彩與自定義圖例同步,最簡單的方法是定義您自己的自定義圖表調色板。CustomColorPalette 示例報表實現了一個自定義調色板和一個自定義圖例。請參見圖 14。


 圖 14. 帶有自定義調色板和自定義圖例的條形圖報表

創建自定義調色板

1.定義圖表系列組和類別組。

默認情況下,每個圖表數據系列都分配有一種色彩。此色彩基于選中的圖表調色板。在本例中,我們要基于系列組實例值覆蓋這些色彩。

 2.定義自定義調色板并添加自定義代碼。

colorPalette 變量存儲自定義調色板的定義,該調色板有 15 種不同的色彩。count 變量跟蹤不同分組值的總數,以便在超出自定義調色板中的不同色彩數時回繞。mapping 散列表跟蹤分組值和色彩之間的映射。這保證了同一數據系列中的所有數據點具有相同的色彩。隨后,該表用于同步自定義圖例色彩與圖表色彩。將以下代碼加入報表的自定義代碼窗口。

Private colorPalette As String() = {"Green", "Blue", "Red", "Orange",
"Aqua", "Teal", "Gold", "RoyalBlue", "MistyRose", "LightGreen",
"LemonChiffon", "LightSteelBlue", "#F1E7D6", "#E16C56", "#CFBA9B"}
Private count As Integer = 0
Private mapping As New System.Collections.Hashtable()
Public Function GetColor(ByVal groupingValue As String) As String
If mapping.ContainsKey(groupingValue) Then
Return mapping(groupingValue)
End If
Dim c As String = colorPalette(count Mod colorPalette.Length)
count = count + 1
mapping.Add(groupingValue, c)
Return c
End Function

3.調用 GetColor() 函數將色彩分配給數據點。

從填充色彩樣式屬性調用 GetColor 函數。編輯數據值以打開“編輯圖表值”對話框并單擊“外觀”選項卡(圖 15)。單擊“系列樣式”按鈕并單擊“填充”選項卡。當前系列組值將作為參數傳遞給 GetColor 函數,將內部組實例值映射到色彩值時需要此函數。

 
 圖 15. 指定明確的數據系列樣式

注意 如果存在多個圖表系列組,您可以連接系列組值以創建一個在 GetColor 函數中使用的唯一標識符。以下代碼是一個示例。

=Code.GetColor(Fields!Country.Value & "|" & Fields!City.Value)

4.添加圖表圖例。

您可以使用內置的圖表圖例。或者,也可關閉內置的圖表圖例并按照下一操作過程中的步驟創建您自己的、有一個表格或一個矩陣數據區的自定義圖表圖例。

創建自定義圖例

  • 將一個表格數據區域添加到報表。 將表格放到圖表旁并將其綁定到與圖表相同的數據集。
  • 通過添加表格組在表格中反映圖表分組結構。 如果圖表使用系列分組,則通過添加基于與圖表系列組中組表達式相同的表格組來將它們添加到表格。然后添加圖表類別分組(如果存在)作為內部表格組。

一般而言,如果圖表有 m 個系列分組和 n 個類別分組,則您需要為自定義圖例添加 m+n 個表格組。

 對于各個表格組,請確定只顯示組頭(它將包含圖例說明)。另外,請刪除表詳細信息行,除非您要使用表詳細信息行來模擬圖表數據表。

  • 設計自定義圖例。

為自定義圖例的色彩字段添加一個矩形。例如,您可能會將其添加到第一個表格列。如步驟 2 所示,您將在表格中只有組頭行。矩形將加到最內部的組頭層級。

將矩形的 BackgroundColor 屬性設置為與用于圖表數據點的填充色彩的表達式等價的表達式。在最普通的情況下,該表達式會像以下代碼中一樣僅包含一個分組值。

=Code.GetColor(Fields!Country.Value)

對于圖例文本,可使用與類別及系列組/標簽表達式中相同的表達式,或進行實驗直到獲得您所要的圖例說明文本。

餅圖和圓環圖

數據點標簽和圖例標簽部分說明了如何為餅圖扇面設置內部和外部數據點標簽。本節說明了餅圖和圓環圖的幾個附加屬性。

與其他圖表類型不同,餅圖或圓環圖只有一個“分組維度”(即,一個數據系列)。若要在餅圖和圓環圖中使用兩個維度,就需要將圖表相互堆疊。

注意 在發布報表期間,Reporting Services 自動地將餅圖或圓環圖的系列組轉換成類別組以將數據顯示成一個數據系列。

餅圖常用于顯示數據點的相對百分數。一般而言,百分比值(例如,可將其顯示成數據點標簽)可通過用數據點值表達式除以整個圖表的總和來計算。以下代碼是一個相應的示例。

=Sum(Fields!Sales.Value) / Sum(Fields!Sales.Value, "SalesChart")

如圖 16 所示,表達式被作為一個數據標簽表達式添加。


 圖 16. 數據標簽百分比計算

默認情況下,餅圖扇面使用了黑色邊框以增強其可見性。但是,如在下一節的圖 17 所示,您可以使用特定的數據點外觀設置覆蓋邊框。如果您希望邊框的色彩與餅圖扇面的色彩一致,您必須使用上一節所述的自定義調色板。使用自定義調色板,您可以通過調用基于類別分組值分配色彩的自定義代碼函數為數據點(餅圖扇面)設置與邊框相同的色彩。

添加圖表數據表

您可能希望將明細數據添加到圖表中。直接將數據添加到圖表可能會使圖表更難以理解。可代之以數據表形式添加相應信息。

圖表是可用來形象化值的總體分布及識別關注區域(如,非常大及非常小的值)的一種非常有效的方法。讀者可能希望根據底層明細數據更詳盡地分析信息。

Reporting Services 提供以下三種方式在圖表數據點上添加互動操作:

  • 使用“跳至報表”操作可基于當前系列/類別組值,通過將這些值作為鉆取參數值添加,鉆取到其他報表來顯示明細數據。
  • 使用“跳至書簽”操作可跳至同一報表中的某部分(如數據表部分)。
  • 使用“跳至 URL”操作可生成一個指向報表外的外部導航目標的超鏈接。

圖 17 顯示了包含在本白皮書中的 PiePercentage 示例報表的簡化版本。

圖 17. 使用了自定義格式、自定義調色板及數據表格的餅圖

創建數據表格

  • 創建有自定義調色板的餅圖。

圖 17 中的餅圖有兩個類別分組。外部分組以訂單年度為基礎。內部分組以產品類別為基礎。定義自定義調色板,如在創建自定義調色板步驟中的步驟 2 所述。

由于存在兩個類別分組,我們使用以下表達式生成一個復合鍵,該鍵將被傳遞給 GetColor 函數。

=Code.GetColor(Fields!OrderYear.Value & Fields!ProdCat.Value)

 如果我們對數據點填充色彩屬性和數據點邊框色彩屬性應用相同的 GetColor 函數調用,餅圖扇面將不顯示默認的黑色邊框。

  • 僅為那些代表大于全部餅圖 4% 的餅圖扇面顯示數據點標簽。

要實現這一目的,請將以下函數添加到報表自定義代碼部分。重要的是為那些沒有標簽的餅圖扇面返回空白標簽字符串,否則圖表控件將為該扇面顯示默認標簽。(默認標簽是底層數據點值。)

Public Function GetLabel(ByVal currentValue As Double, ByVal totalValue As Double) As String
If currentValue / totalValue < 0.04 Then
Return " "
Else
Return Format(currentValue / totalValue, "P1")
End If
End Function

數據點的標簽表達式調用 GetLabel 函數以計算百分比值/標簽。

=Code.GetLabel(Sum(Fields!Sales.Value), Sum(Fields!Sales.Value, "SalesChart"))

為圖表創建數據表(矩陣)。

圖表僅按年度和產品類別顯示聚合的銷售數據。在數據矩陣中,我們希望以同樣的方式對數據進行分組。

我們添加矩陣數據區域并將其綁定到與圖表相同的數據集。然后,我們將 OrderYear 和 ProdCat 字段作為行組添加到矩陣上,并在矩陣單元中聚合 Sales 值。若要添加小計,可右鍵單擊矩陣中的組頭單元格并從上下文菜單中選擇“小計”。

注意 單擊矩陣標題中的綠色小三角形,選擇“小計”屬性,在這里您可以為小計單元格明確設置樣式屬性。例如,您可以用不同的背景色彩顯示小計單元格以從視覺上與其他數據相區別。

底層數據集提供了比圖表中顯示粒度更為細的數據粒度。我們可基于子類別添加另一個(內部)行組,以及添加季度和月份作為矩陣的列組來利用數據矩陣的優勢。

 將切換明細添加到數據矩陣中。

要為特定組添加明細效果,請右鍵單擊組頭并編輯組屬性。在“組屬性”對話框的“可見性”選項卡上,選擇應切換當前組可見性的報表項名稱。通常在父組中選擇文本框的報表項名稱。如果不存在父組,可將文本框添加到矩陣角中,并將其用于在矩陣中關聯最外面的分組級別。

設置切換狀態的“初始可見性”選項也在組的“可見性”選項卡上進行設置。將此選項設置為“可見”意味著初始狀態為展開,而設置為“隱藏”意味著初始狀態為折疊。

 調整初始切換圖像和切換狀態。

如果組的初始切換可見性狀態設置為“可見”,則切換該組的報表項上的切換圖像可能顯示一個加號 (+)。相反,要顯示減號 (-) 切換圖像,請右鍵單擊切換組的報表項;這通常是父組頭中的文本框。在上下文菜單中選擇“屬性”。在“文本框屬性”對話框中,選擇“可見性”選項卡并設置切換圖像的初始外觀。因為組切換可見性設置為“可見”,所以文本框的初始外觀應設置為“展開 (-)”,如圖 18 所示。


 圖 18 調整切換圖像的初始外觀

添加書簽以連接圖表和數據矩陣(可選)。

啟用從圖表數據點到數據矩陣的書簽導航可分為兩步。第一步,在數據矩陣內部定義書簽 ID。第二步,定義圖表數據點上書簽導航操作的跳轉。

要在數據矩陣中添加書簽,請右鍵單擊 order year 行組的組頭,并在上下文菜單中選擇“屬性”。在“文本框屬性”對話框中,選擇“導航”選項卡,并使用生成字符串的表達式定義“書簽 ID”表達式:=CStr(Fields!OrderYear.Value)。這為我們提供書簽跳轉目標。

打開“圖表屬性”對話框,編輯數據點屬性。在“操作”選項卡上,選擇“跳至書簽”,使用同樣用于書簽 ID 的表達式。

 散點圖和氣泡圖

散點圖和氣泡圖與其他圖表類型不同,因為它們具有明確的數據點 x 值,而不是將類別分組值用作 x 值。因此,可對數據進行分組(和聚合),將其分為不同的類別而不是顯示在 x 軸上的值。例如,若要在 x 軸上顯示各銷售人員去年的銷售量,如果兩個銷售人員擁有相同的 x 值,則不希望聚合 y 軸上的值。BubbleChart 示例報表(圖 19)具有基于銷售人員的類別分組,所以該報表聚合每個銷售人員的銷售數據。但在 x 軸上顯示的是去年的銷售值。

注意 了解數據點的 x 值屬性和基于系列組與類別組的圖表數據分組之間的區別非常重要。如果設計散點圖或氣泡圖,并且該圖在預覽中僅顯示一個數據點,但是本應該顯示很多不同的點,則最有可能的解釋就是未定義任何的類別組或系列組。如果未對類別組和系列組進行定義,則基礎數據集行聚合為具有特定 x 值和 y 值的一個數據點。在某些情況下,您可以定義與 x 值表達式相同的類別組或系列組表達式,但是在散點圖或氣泡圖中,您更想根據數據所表示的內容添加類別或系列分組。如果圖表為每位銷售人員聚合銷售值,類別或系列分組應以 BubbleChart 示例報表中顯示的銷售人員 ID 或姓名為依據。


 圖 19 使用銷售人員分組的系列數據的氣泡圖

StepFunctionChart 示例報表給出了散點圖的另一用途。散點折線圖基于測量 ID 使用類別分組。對于特定的幾天(顯示為 x 值),在數據集中存在多個測量值(沿 y 軸上顯示),從而導致豎直遞增。


 圖 20 例如基于傳感器測量值的散點圖

表內嵌圖

有時,運行時的數據量未知,并且希望動態“增長”圖表的大小。實現此目的一個方法是在另一個數據區域的組中嵌入一個圖表。例如,可以根據下列表達式,在列表數據區域使用詳細信息組:

=Ceiling(RowNumber(Nothing)/20)

這將每二十個詳細信息行分為一組。將圖表嵌入到該列表中可在運行時每二十行創建一個圖表實例。

要創建數據的內嵌條形圖可視化,可使用兩種不同的方法實現:

  • 嵌入一個已動態算出右填充量的圖像(參見圖 21)。調整靜態圖像的右填充量可獲得動態伸展圖像所得的條形圖效果。
  • 嵌入一個具有已算出的 y 軸最大值的條形圖(參見圖 23)。
  • 這兩種方法在 TableInlineCharts 示例報表中并行實現。


    圖 21 由內嵌圖像和動態填充量模擬的表內嵌圖

若要基于內嵌的圖像實現內嵌可視化

  • 設計將用于“條形圖”可視化的內嵌圖像。 通常,簡單的梯度圖像可一目了然。將作為內嵌圖像的圖像添加到報表中。
  • 將表格添加到組并將數據可視化。設計表格的分組結構。可以將圖像可視化置于組頭中或置于表格詳細信息行中。在新的表格列中添加內嵌圖像。從步驟 1 中選擇內嵌圖像作為圖像源。
  • 計算右(或左)圖像填充量。 為圖像報表項的右(或左)填充量屬性創建表達式。表達式將要進行可視化的數值除以最大值。然后將相對大小乘以步驟 2 中定義的表格列的寬度。必要時,您可能也想通過使用 Math.Min 或 Math.Max 函數將填充量限制在特定范圍內。

在 TableInlineChart 示例報表中,表格列的寬度為 2 英寸。對于填充量計算,我們使用點測量單位,每英寸包括 72 個點。因此,假設將左填充量設置為 0 點,則“右填充量”選項的范圍是在 144 點之內。使用下列代碼設置填充量。

=144 * (1.0 - Fields!UnitsInStock.Value / Max(Fields!UnitsInStock.Value, "DataSet1")) & "pt"


 圖 22 動態計算圖像右填充量大小

將圖像大小屬性設置為“合適”。

在前一步驟中定義的填充量決定可用于圖像伸展的空間的大小,從而生成條形圖可視化效果。

內嵌圖像方法的一個缺點是如果在圖像中使用字體或細線,圖像可能會拉長。使用圖表進行內嵌可視化(圖 23)可提供更多對可視化的控制,并通常能獲得更佳效果。


 圖 23 基于表格組頭中內嵌圖表的表格內嵌圖表

若要使用圖表進行內嵌可視化

1.添加表格以分組數據。 設計表格的分組結構。請記住,只能將圖表置于表格表頭或表格表尾中或置于組頭或組尾中。

 2.添加新的表格列并將圖表置于組頭中。

要將條形圖可視化的圖表繪圖區調整至最大尺寸,請應用下列圖表屬性設置。

常規設置:設置為條形圖,關閉圖例。

數據:將圖表與父表綁定到相同的數據集;基于要進行可視化的值添加數據點值。

X 軸:關閉軸標簽,關閉網格線,將刻度線設置為“無”。

Y 軸:關閉軸標簽,將刻度線設置為“無”,將最大值設置為在包含表格或數據集范圍內計算出的最大值。要實現正確的條形圖大小需要如此設置,否則每個圖表實例將基于特定組的數據值僅自動縮放 y 軸。

 3.優化圖表可視化(可選)。

嘗試調整圖表繪圖區樣式設置、y 軸的主要網格線、3D 效果或動態顏色設置,以進一步優化內嵌圖表可視化。

圖表可擴展性和手動創建圖表

本白皮書提供通過表達式和自定義代碼功能調整圖表設置和擴展現有圖表功能方面的信息。除此之外,還有其他方法可將更多高級圖表功能集成到 Reporting Service 中:

  • 集成由自定義程序集生成的表格圖像。
  • 基于 Reporting Services 2005 的新“自定義報表項”功能實現圖表可擴展性。
  • 使用可提供增強表格功能的第三方 Reporting Services 2005 加載項組件。這些都基于自定義報表項功能。

若要集成由自定義程序集生成的圖像

1.設計和實現自定義程序集以生成圖像。

自定義程序集必須自行檢索數據、負責分組/排序數據以及生成圖表圖像。

注意 自定義程序集必須以 byte[] 形式返回圖像。不能以 System.Drawing.Image 形式返回圖像。通常可使用與下列代碼相似的代碼轉換 System.Drawing.Image 對象。

System.IO.MemoryStream renderedImage = new MemoryStream();
myChart.Save(renderedImage);
renderedImage.Position = 0;
return renderedImage.ToArray();

2.將圖像添加到報表中。

將圖像類型設置為“數據庫”。如果生成的圖像是 PNG 圖像格式的位圖,則將圖像的“mimetype”屬性設置為“image/png”。對于圖像值屬性,請使用與下列表達式類似的表達式。

=MyCustomAssembly.GenerateChart()

3.在“報表設計器預覽”視圖中查看報表以確認報表工作正常。

注意 在默認配置中,自定義程序集在“報表設計器”預覽中以“FullTrust”運行。因此,對于要求特定代碼訪問安全權限的操作(如文件輸入/輸出、數據提供訪問等等),在“FullTrust”下將自動為它們授予這些權限。

 4.在報表服務器上部署自定義程序集。

確保報表服務器的安全策略配置在運行時為自定義程序集授予足夠的權限,否則圖像生成將失敗。有關詳細信息,請參閱 SQL Server 2005 聯機叢書中的 Understanding Code Access Security in Reporting Services(英文)。

基于 CustomReportItem 的圖表與自定義程序集的比較

通過自定義程序集方法使用自定義報表項有多項益處。首先,可以構建自己的、可直接集成到“報表設計器”的設計時支持組件。其次,在運行時,可利用 Reporting Services 處理引擎來檢索數據、應用分組/排序和篩選器。CustomReportItem 運行時控件訪問經過處理的數據,并根據交互圖像映射和關聯操作生成圖表圖像。

在構建自己的 CustomReportItem 之前,請仔細學習、研究文檔和示例。下列站點提供更多相關信息:

  • SQL Server 2005 聯機叢書的自定義報表項示例
  • 有關自定義報表項的信息,請參閱 MSDN 上的 Chris Hays's Reporting Services Sleazy Hacks Weblog(英文)。

?

?

==================

1:為什么需要基于服務器的報表?

基于服務器的報表功能為實現以下任務提供了方法:集中存儲和管理報表、設置策略和確保對報表及文件夾的安全訪問、控制處理和分發報表的方式,以及將在業務中使用報表的方式標準化。

Reporting Services 是可伸縮的。您可以在單個服務器、分布式服務器和 Web 場配置中安裝報表服務器。

2:將報表功能添加到應用程序

您可以將Reporting Services 功能添加到新的或現有應用程序中。許多應用程序都包含預定義的報表,這些報表提供有關應用程序操作的信息和分析。如果要生成帶有報表功能的應用程序,可以在應用程序中添加 Reporting Services。通過創建要包含的報表,然后將這些報表、報表服務器引擎和報表服務器數據庫與應用程序一起打包,就可以將報表功能添加到現有應用程序中。在運行時,當用戶啟動調用報表的操作時,應用程序代碼將調用報表服務器引擎,后者將在報表服務器數據庫中檢索報表定義并用最新數據處理報表。
3
:報表制作
報表制作在客戶端上完成,而不是在報表服務器上。在報表的外觀滿足需要后,您可以將其發布到報表服務器上,在這里,報表將可以供常規使用。
4
報表管理

使用 Reporting Services 的主要優點之一是可以從一個中央位置管理報表和相關項。可以管理的項包括報表、文件夾、數據源連接和資源。對于這些項,您可以定義安全性、屬性;在某些情況下,還可以定義計劃操作。此外,可以創建共享計劃和共享數據源,用于通用目的。
5
:報表的訪問和傳遞

Reporting Services 中,有兩種方法可用于訪問和傳遞報表:按需訪問(使用戶可以通過報表查看工具選擇所需要的報表)和推式訂閱(自動生成報表并將其傳遞到目標位置)。

要按需查看報表,用戶需要從報表服務器文件夾層次結構中選擇報表。用戶可以使用報表管理器來瀏覽報表服務器文件夾,或搜索特定報表。

要自動接收報表,用戶需要訂閱某個特定報表或一組報表。當報表運行時,用戶將收到報表可用的通知,或通過電子郵件收到報表的副本。報表服務器管理員可以生成數據驅動訂閱,用于將報表推向一大組用戶。數據驅動訂閱將在運行時生成一個收件人列表。在數據驅動訂閱中,傳遞設置是在觸發訂閱時從存儲的數據(如員工數據庫中的數據)生成的。

Reporting Services 支持多種查看格式。在顯示報表后,用戶可以用其他格式重新顯示報表。
6
Reporting Services 組件概述
1
)報表服務器

報表服務器是 Reporting Services 的主要組件。它是一項 Web Service,提供了一系列編程接口,客戶端應用程序可使用這些編程接口對該報表服務器進行訪問。通過其子組件,報表服務器可以處理報表請求;檢索報表屬性、格式設置信息和數據;將格式設置信息與數據進行合并;以及呈現最終報表。

子組件包括:編程接口、報表處理器、數據處理擴展插件、呈現擴展插件、報表服務器數據庫、計劃和傳遞處理器、傳遞擴展插件。
2
)報表管理器

報表管理器是一個基于 Web 的報表訪問和管理工具,它包含在 Microsoft? SQL Server? Reporting Services 中。使用報表管理器可以執行以下任務:

·???????? 查看、搜索和訂閱報表

·???????? 創建和管理文件夾、鏈接報表、報表歷史、計劃、數據源連接以及訂閱

·???????? 設置屬性和報表參數

·???????? 管理角色定義和角色分配(這兩者控制著用戶對于報表和文件夾的訪問權限)

3)報表設計器
4
)報表服務器命令行實用工具

?

總結

以上是生活随笔為你收集整理的SSRS 使用(1)建立简单的Report的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。