2009年10月26日 星期一

ReportViewer 轉秩資料

最近一直有同事在做BI相關的技術,之前問了我一個問題,是一個標準的資料轉秩(PIVOT)問題,這種問題在SQL 2005之後有新的T-SQL語法可以解決,請參考使用 PIVOT 和 UNPIVOT。 不過在沒有這個語法之前,怎麼解決這種問題呢? 先賣個關子^^ 今天先使用ReportViewer中的rdlc設計,來解決資料轉秩的問題。使用Visual Studio加入報表*.rdlc檔後,VS 會自動進入設計畫面,如下所示:






然後是經過處裡過後的Raw Data,如下圖所示:











如果想要把這樣的資料轉換成,底下這樣:

像這樣的結果,其實是可以輕鬆的使用T-SQL中提供的PVIOT來達成,但由於使用者通常會要求看到的報表資料可以匯出各式各樣形式的檔案,其中最流行的就是excel跟pdf這兩種,所以我習慣使用ReportViewer來製作報表,因為Client端的rdlc報表,基本上就提供了這兩種功能,設計上與使用Reporting Services差不多(註:Reporting Services 2008中提供更多種設計報表的功能,其中修改最多的以圖表跟Tablix,這方面以後有機會再來詳談)。
要使用rdlc來轉秩,最常使用的就是矩陣元件,我們先拉一個矩陣元件到報表設計畫面中,如下圖所示

然後我們要準備DataSet(資料來源),有使用過Reporting Services的人會知道,要在報表中設定資料欄位,必須新增資料集(DataSet),相同的觀念,在Client的rdlc中,需要新增一個資料集檔案,此時使用VS,新增一個資料集,然後在資料集的設計畫面中,新增一個 TableAdapter,如圖所示

然後再將撈取剛剛RawData的SQL語法貼入(資料集的使用方式,在本文章不探討,有興趣的可以參考 Creating a Data Access Layer)之後,如圖所示

資料集設定完畢資後,再回到rdlc報表設計畫面,請將左邊的浮動視窗選擇至報表資料來源
然後可由下方樹狀圖中找到剛剛新增的資料集中的DataTable

此時使用滑鼠將欄位拖曳至矩陣元件中,如圖所示

欄位之對應關係如下:
欄位YEAR -> 資料列
欄位PROTYPE -> 資料行
欄位SubCount -> 資料
此時基本上已經將報表設計完畢,剩下就是用一個host application將ReportViewer簽入,並指定剛剛所設計之報表。所以接下來 步驟1.新增一個Web Page 步驟2.在aspx Page的設計畫面中,從左邊工具項選擇ReportViewer

步驟3.於ReportViewer的設計畫面中選擇剛剛所設計的報表Report1.rdlc

步驟4.設定資料來源(由於剛剛是使用TableAdapter設計,所以基本上可以使用剛剛所新增的Method來擷取資料),設定完成後之結果如下

步驟5.瀏覽該網頁,此時就是轉秩完的結果

結論: 對於Client的ReportViewer使用,市面上介紹的書及其實很少,上面所介紹的內容中,其實還有許多觀念沒有詳細講明,但此篇文章主要介紹如何使用ReportViewer來轉秩資料,之後如果還有機會再來介紹報表設計的相關文章。

沒有留言: