[翻譯]初識SQL Server 2005 Reporting Services Part 2

來源:互聯網
上載者:User

標籤:style   blog   http   io   ar   color   os   使用   sp   

原文:[翻譯]初識SQL Server 2005 Reporting Services Part 2

   在Part 1文章中我們對SQL Server Reporting Services 2005(SSRS)有了一個初步的瞭解。我們分別通過報表精靈和報表設計師構建了兩個報表。在Part 2我們將以一個SSRS開發人員的身份深入查看更多特徵資訊。

  以下是我們要研究的:

  l 運算式的用法。這些運算式可以讓你動態控制從控制項屬性到資料繫結的報表的各個方面。

  l 報表中用到的計算和操作的通用函數。

  l 報表中自訂代碼。

  我們也會建立一個矩陣控制項,建立一個子報表。最後我們會見識一下報表的動態切入和排序。

開始

  為了運行樣本,你需要安裝和配置了SQL Server 2005, SQL Server 2005 Reporting Services和Visual Studio 2005,如果你還不太清楚該怎麼做,那麼可以回到Part 1去學習一下。然後下載原始碼檔案。這些檔案中包含了Visual Studio 項目和建立ReportDemo資料庫的SQL指令碼。如果這些你都有了,那麼可以直接建立資料庫了。

  現在先建立一個商業智慧項目。選擇項目中的添加新項,把共用資料來源ReportDb.rds和報表檔案FirstReportMan.rdl添加到項目中。然後更改資料來源中的相關配置資訊以保障能串連到你的資料庫。我們先從FirstReport.rdl開始,所以先在設計器中將它開啟。

運算式

  運算式是寫在代碼中用來設定屬性值的簡短陳述。運算式可以設定報表中任意用到的資料屬性:參數,全域變數,資料集中的字還有嵌入函數。

  SSRS2005在建立運算式方面有了很大的進步。現在提供了一個很直觀的運算式編輯器。如果你滾動查看屬性視窗,就會發現大多數控制項的屬性都可以通過運算式進行設定(運算式選項到處都是)。你也可以看到彈出的屬性對話方塊中有很多寫著fx的按鈕。這些按鈕就可以開啟運算式編輯器。

 

  這樣的運算式特徵將SSRS2005變成了一個非常好用的工具。因為這使得從資料展現到如何展現都可以動態設定。而不是直接寫死在裡面。SSRS用運算式對屬性進行設定。

  看一下你的報表,現在我們想要高亮顯示從特定State來的客戶資訊。我們可以這樣設計運算式:=iff(Fields!State.Value = “CA”, “Bold”, “Normal”)

  如果我們將這個運算式應用到表格的明細列,運行報表的時候,所有來自California的列都被高亮顯示。如果你正需要這些資料,就會很方便。然而如果每個高亮顯示的列都需要一個報表那就太滑稽了。所以我們得進行動態設定。當報表啟動並執行時候根據傳入的參數不同而高亮顯示不同的內容。

  首先,先提添加一個參數。命名為HightlightState,設定如下的數值:

California

CA

Florida

FL

Louisiana

LA

Illinois

IL

Texas

TX

  單擊確定。

  筆記:

  可以看到要對一個參數進行預先賦值操作的時候,有一個來自查詢選項。你可以通過在報表設計師定義資料集來使用這個選項。

  下一步就是建立運算式。單擊報表中的表格控制項,可以看到表格的左邊和上邊多出了一列和一行表格,單擊前邊的表徵圖,可以對正行進行屬性設定。單擊屬性中的FontWeight中的運算式,輸入=iif(Fields!State.Value = Parameters!HighlightState.Value, "Bold", "Normal")

 

  函數iif是SSRS中經常用到的一個運算式。格式是:

  iif (boolean statement, true result, false result)

  如果布林運算式返回true那麼函數將返回ture result,如果布林運算式返回false,那麼函數就會返回false result。布林運算式會問:現在傳進來的參數是不是等於當前的state code呢?如果返回true那麼文本就會加粗顯示,否則正常。

  轉到預覽選項卡,可以看到效果。

常見函數

  現在然我們回到運算式編輯器。在編輯器的下半部分有三列。第一列顯示的是為建立運算式所用的分類列表,最後一個就是常見函數,展開這個節點選擇時間和日期類別。在第二列中雙擊任意個元素,這樣就會將其添加到編輯文字框中,如果把游標放在第一個括弧一邊,就會看到智能感知的資訊:

 

  現在讓我們用Year函數只顯示某人的出生年份。選擇DateOfBirth列的屬性,在常規選項卡的值資訊中單擊運算式按鈕進入運算式編輯器。把運算式改成:

=Year(Fields!DateOfBirth.Value)

  這樣就行了,現在預覽一下。

  值得注意的還有彙總函式。這些函數可以協助你處理資料集中的資料。比如說,你的報表是關於一些商品的單價資訊,這樣就可以用Sum函數創造一個總價格。再比如,你有一個關於購買日期和每筆交易的購買數量報表,就可以通過AVG函數獲得平均價格。

全域變數

  再次回到運算式編輯器。這次讓我們單擊第一列中的全域,第二列中就會顯示提供給報表使用的全域變數。

  這一次讓我們利用全域變數做一個對頁數進行計數的報表。首先,給報表加上頁尾,將四個文字框拖拽進頁尾,把字型屬性設定為8pt,按照下面方式進行設定:

Page

=Globals!PageNumber

of

=Globals!TotalPages

  預覽報表就可以看到有“‘Page 1 of 5‘.”這樣的資訊。

  還有一些值得注意的全域參數:

  l ExcutionTime – 這個會顯示運行報表需要的時間

  l ReportUrl – 這個保證你的報表來自正確的資料來源

  l UserID – 這個顯示報表啟動並執行User ID

  你可以利用這些全域參數進行報表的基本診斷操作。你可以將這些參數加到頁尾並利用參數對它們進行顯示或者隱藏。這樣在發布後,報表使用者就可以看到一個清爽的報表,而你可以看到跟多的資訊。

自訂函數

  SSRS2005裡面有100多個函數,這足以應付大多數情況的需要,但是有的時候你需要更靈活的控制。所以在這裡你可以用VB.NET 或 C#進行編寫自訂的運算式。

  現在讓我們添加一個進去。

  開啟報表設計師的布局選項卡,選擇報表菜單中的報表屬性,直接跳到代碼選項卡。我們將寫一個根據傳入的資料不同而返回不同顏色的函數。然後在表格細節中對這個函數進行運用。

  把下面的代碼拷貝進去:

  Public Function GetColor(ByVal status as String) as String

     IF status = "100" Then

        Return "White"

     End IF

     IF status = "101" Then

        Return "Yellow"

    End IF

     IF status = "102" Then

        Return "Tomato"

     End IF

  End Function

  單擊確定關閉對話方塊。

  筆記:

  所有的顏色都在屬性中的Color下拉式清單中。

  我們現在有了一個函數,現在來封裝成運算式。右擊Customer Status列開啟屬性視窗。找到Background Color屬性,從下拉式清單中選擇運算式。添加下面的代碼建立一個運算式:

  =code.GetColor(Fields!CustomerStatus.Value)

  當報表啟動並執行時候,這個函數會被處理,而且參數資訊將會傳遞進去。函數根據參數決定該顯示哪個顏色。SSRS就可以確定要用那個顏色賦值給相應的儲存格。

 

  注意為了使用這個函數我們需要這樣寫:=code.<myfunction>.

  預覽報表。

子報表

  子報表就是嵌入到另一個報表中的報表。子報表可以使用參數還有使用自己的資料集。值得注意的是其實SSRS中子報表是另外一個報表。實際上,在SSRS中,你可以單獨運行一個子報表。

  為了建立子報表,只需要從工具箱中拖拽一個子報表控制項到報表中然後設定它在哪個報表中呈現。如果子報表需要參數,你就得告訴主報表要把那個參數傳遞給子報表。其實很簡單。

  現在在項目中添加一個報表MainReport.rdl,再建立一個使用共用資料來源的資料集。使用下面的查詢:

  SELECT CustomerID, FirstName, LastName FROM Customer

  轉到布局選項卡,拖拽一個表格控制項進去。選擇第一列將客戶的姓添加進去,第二列是名字。第三列的名字設定成Address。預覽報表確定可以運行。

  再建立一個子報表MySubReport.rdl。同樣建立一個使用共用資料來源的資料集。使用下面的查詢語句:

  SELECT Address, City, State, ZipCode

  FROM Customer

  WHERE (CustomerID = @CustomerID)

  轉到布局選項卡,利用文字框控制項顯示地址資訊。只需要把資料集欄位拖拽進去就可以自動建立文字框控制項。還可以注意到當這樣做的時候,文字框中的資料  自動使用First()函數。這個函數將使用資料集返回的第一行資料,其它的將被忽略。

 

  現在用“100”這個書進行運行報表測試。

  現在回到MainReport.rdl主報表。為了進行嵌入操作,將一個子報表控制項拖拽進Address列。右擊子報表選擇屬性,將子報表設定成MySubReport。

 

  接下來轉到參數選項卡,這裡正是你將子報表串連到主報表的地方。在這裡設定要將哪個參數傳遞個子報表相應的參數。  

  在參數名中選擇CustomerID,參數值中選擇=Fields!CustomerID.Value,這樣就可以讓子報表知道該顯示那個客戶的資訊。

 

  單擊確定,預覽主報表。

矩陣

  下面我們要用矩陣控制項來建立一個矩陣風格的報表。

  首先,在項目中添加一個MatrixReport.rdl報表。用共用資料來源添加一個資料集,查詢語句是Select * from Customer。

導航到報表設計師布局選項卡,將一個矩陣控制項拖拽進來,將State拖進行,將CustomerStatus拖進列,將FirstName和LastName拖進資料區域。經過一點點美化後,應該是下面的效果:

 

  運行起來是這個樣子:

 

添加切入

  SSRS中的切入功能可以使得你的報表像一個樹一樣可以展開和收縮。

  首先,建立一個AdvancedTable.rdl報表。用共用資料來源添加資料集,查詢語句是Select * from Customer query。

轉到布局選項卡,將一個表格控制項拖拽進去。首先我們得給表格控制項添加分組。選中表格控制項,右擊前面的小表徵圖,選擇插入組。分組和排序屬性對話方塊就彈出來了,在分組方式的運算式選擇=Fields!State.Value,這樣報表就會以State進行分組。現在把State欄位拖拽到第一列組列。然後把FirstName,LastName和City拖進詳細資料區域。美化一下進行預覽。

 

  我們現在實現了分組,但是還不能進行切入。選擇表格控制項,選擇明細列前邊的小表徵圖,右擊選擇屬性。展開Visibility部分,將Hidden屬性設定為True,把ToggleItem屬性設定為State。Hidden決定了報表運行時這一列的狀態。如果設定為True那麼開始是縮起和隱藏的。把ToggleItem屬性設定為State,這樣當報表啟動並執行時候旁邊就會向樹狀結構一樣有個可以展開的小“+”號。

  預覽報表發現只有States列顯示,但是可以對其進行展開和收縮操作。

 

添加動態排序

  要對錶格控制項進行動態排序操作其實很容易。先開啟FirstReportMan.rdl報表。轉到報表設計師的布局選項卡。右擊表頭的FirstName文字框選擇屬性。轉到互動式排序選項卡。將將互動式排序操作添加到詞文字框複選框選中,然後設定排序運算式為=Fields!FirstName.Value,排序運算式是在這一列中顯示的值。對其他列也進行類似設定。

 

  現在預覽報表,就可以進行每一列的互動式排序。

 

總結

  我希望這些SQL Server Reporting Services 2005進階的主題能協助你更好的與使用者進行溝通。在Part 3中,我們將會看一標控制項和它的多種多樣的功能。

[翻譯]初識SQL Server 2005 Reporting Services Part 2

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.