1. 程式人生 > >[轉]RDL(C) Report Design Step by Step 3: Mail Label

[轉]RDL(C) Report Design Step by Step 3: Mail Label

設置 ted 運算 lec 標題 report 對數 win 信息管理

本文轉自:http://www.cnblogs.com/waxdoll/archive/2006/09/02/493350.html

Crystal Report在報表向導中提供了三種向導類型給用戶進行選擇——Standard、Cross-Tab和Mail Label,而Visual Studio/BIDS報表向導只有兩種——表格格式和矩陣,這是和Crystal Report的前兩種報表類型相對對應的,那麽怎麽在Visual Studio/BIDS中實現Mail Label呢?

先來看一下什麽是Mail Label。Mail Label如果直譯成中文的話,就是“郵件標簽”,這是一個有歧義的名詞,一些郵箱(如Gmail)和客戶端郵件工具(如Foxmail)將“郵件標簽”作為一種將郵件進行分類以方便信息管理的工具。而本篇隨筆討論的顯然無關“電子”郵件,而是一種比較常用的報表。設想如下的場景:如果一個組織(比如一家出版社)需要向一批客戶發一份比較正式的書面信件(比如征訂啟事)。而這些客戶的通信地址、收件人郵政編碼等又以某種形式(數據庫、平面文件等)存儲在計算機中,工作人員顯然不希望在每一個信封上手工書寫這些信息,他/她要做的無非是把這些打印出來並粘貼到信封上就可以了。這樣的話,一個普通的報表也可能就已經能夠滿足他/她的需求了,盡管我們知道郵政編碼、通信地址、收件人三個字段之間是需要換行的。但是,如果他/她恰巧使用的是常見的如A4之類的紙張,而同時他/她又不希望浪費紙張,那麽他/她希望要的報表可能就是如圖1所示的報表了。這就是所謂的“郵件標簽”報表了,當然“郵件標簽”報表不僅僅局限於多個信件通信地址的一次打印,凡是具有類似結構的報表都可以被稱為“郵件標簽”報表。

技術分享 圖1 Access的Northwind示例數據庫中的“郵件標簽”報表(點擊小圖看大圖)

正如圖1的標題所示,Access是支持“郵件標簽”報表的,不過在報表設計上只是讓標簽中涉及到的字段縱向排列而已,真正實現多列標簽打印是通過對報表的“頁面設置”來完成的,如圖2所示。

技術分享
圖2 Access中“郵件標簽”報表的“頁面設置”

在進行報表設計之前,我們先為本文的郵件標簽進行數據準備。本文的示例報表的數據來源於SQL Server 2005的示例數據庫AdventureWorks,在AdventureWorks數據庫中使用以下SQL語句建立視圖Production.MailLabel:

技術分享代碼1:創建視圖Production.MailLabel

打開視圖,我們可以得到如圖3所示的示例數據,這將是本文示例所使用的報表數據。

技術分享 圖3 示例使用數據

也就是說,本文的示例演示的郵件標簽中展示的數據是AdventureWorks生產的自行車的名稱、顏色以及縮略圖。

既然是郵件標簽,我們要將Name、Color以及ThumbNailPhoto這三個一行中字段縱向顯示,這個比較容易實現;我們還需要將指定行數的數據作為一列顯示在報表中,這就涉及到行到列的轉換問題。事實上,可以說行列轉換問題是郵件標簽報表面臨的最大的問題,要解決這個問題,一種可行的方案是使用SQL語句中出現在FROM子句中的PIVOT關系運算符將表結構進行轉換,然後使用Table控件顯示數據。另外,我們知道標準控件中的Matrix控件的功能其實就是一個Pivot Table(數據透視表),我們可以清楚地在控件工具欄上看到對Matrix控件的提示是“用於任何多列樣式報表的行列布局”,該控件對數據的處理其實是和PIVOT運算符是相通的,就是說使用該控件可以避免使用PIVOT運算符而實現一個交叉表的結構,所以本文選擇使用這種方案來實現郵件標簽報表。

1、創建報表服務器項目RDLML。

2、新建共享數據源DataMailLabel,設置到數據庫AdventureWorks的連接,並為報表指定相應的訪問憑據。

3、不使用向導新建報表rptMailLabel,在報表設計器的“數據”選項卡,新建數據集MailLabel,使用工具欄按鈕切換到通用查詢設計器,在“關系圖”窗格中使用右鍵菜單“添加表”並選擇視圖Production.MailLabel,選擇Name、Color、ThumbNailPhoto三列作為輸出,這樣我們在SQL窗口中可以看到以下SQL語句:

技術分享代碼2:選擇數據的SQL語句

4、在SQL窗格中修改代碼2中的SQL語句如代碼3所示。

技術分享代碼3:修改代碼2得到的SQL語句

[轉]RDL(C) Report Design Step by Step 3: Mail Label