【Reporting Services 報表開發】— 交互式報表

      咱們知道,界面是人與系統間的對話方式,當使用者面對的是冷冰冰的界面,不但會形成使用者對於系統的熱情減低,也會由於不便而產生諸多抱怨。尤爲像報表時企業內幾乎每日都會使用到的工具,所以,如何讓使用者能夠再複雜的報表中最快找到所須要的信息,正是報表工具所努力的重要課題,爲了提高使用者的便利與滿意度,SSRS提供了許多便利的交互性功能,包括:交互式排序、文檔結構圖、書籤、深化報表和鑽取報表。html

1、交互式排序數據庫

     在查看數據的過程當中,爲了能快速地找出特定的信息以及確認數據的相對大小,總免不了使用排序的動做:「找出業績最差的業務員」、「找出毛利最高的產品」等如此類的需求,這些對於分析人員來講能夠說是屢見不鮮。可是不一樣的分析人員面對不一樣的使用習慣以及分析目的,報表數據必須隨着利用不一樣的字段進行升序i和降序。架構

   1.新建報表,新建數據源和數據集,須要用到的SQL腳本:ide

 1 SELECT 
 2 YEAR(TRX_DTE) AS TRX_YEAR,
 3 DATEADD(dd,1-DAY(TRX_DTE),TRX_DTE) AS TRX_MONTH,
 4 C.PRODUCTSUBCATEGORY_KEY,
 5 C.PRODUCTSUBCATEGORY_NAME,
 6 D.PRODUCTCATEGORY_KEY,
 7 D.PRODUCTCATEGORY_NAME,
 8 F.COUNTRY_NAME,
 9 SUM(SALES_AMT) AS SALES_AMT,
10 SUM(SALES_QTY) AS SALES_QTY
11 FROM dbo.FACT_SALES A
12 LEFT JOIN 
13 dbo.DIM_PRODUCT B
14 ON A.PRODUCT_KEY=B.PRODUCT_KEY
15 LEFT JOIN 
16 dbo.DIM_PRODUCTSUBCATEGORY C
17 ON B.PRODUCTSUBCATEGORY_KEY=C.PRODUCTSUBCATEGORY_KEY
18 LEFT JOIN 
19 dbo.DIM_PRODUCTCATEGORY D
20 ON C.PRODUCTCATEGORY_KEY=D.PRODUCTCATEGORY_KEY
21 LEFT JOIN
22 dbo.DIM_STORE E
23 ON A.STORE_KEY=E.STORE_KEY
24 LEFT JOIN 
25 dbo.DIM_REGION F
26 ON E.REGION_KEY=F.REGION_KEY
27 GROUP BY 
28 YEAR(TRX_DTE) ,
29 DATEADD(dd,1-DAY(TRX_DTE),TRX_DTE) ,
30 C.PRODUCTSUBCATEGORY_KEY,
31 C.PRODUCTSUBCATEGORY_NAME,
32 D.PRODUCTCATEGORY_KEY,
33 D.PRODUCTCATEGORY_NAME,
34 F.COUNTRY_NAME
SQL Code

    2.添加父組(以[PRODUCTCATEGORY_NAME]),設置圖1:工具

    

                        圖1post

    3.點擊「銷售數量」的文本框屬性,請勾選「對此文本框啓用交互式排序」,並在排序區域單擊「組」,並選擇「PRODUCTCATEGORY_NAME」組。具體如圖2性能

   

                                                                  圖2url

   4.預覽,此時發現剛纔設置的表頭處會有出現一個三角形圖示,只要一單擊,畫面的數據就會如圖3般自動切換升序和降序。具體如圖3spa

  

                       圖3設計

 2、文檔結構圖

      當使用者查看一份頁數超過數十頁甚至於數百,數千頁的報表時,可憐的使用者只能利用工具欄上方的「上一頁」,「下一頁」,逐頁靠本身的能力尋找所須要的信息內容,這種搜尋模式不只浪費時間,同時使用者在使用上也容易由於眼花而遺漏重大信息。所以,SSRS提供了「文檔結構圖」功能,讓報表產生文檔的結構圖標籤,藉此解決使用者對大型報表數據搜尋的困擾。

      "文檔結構圖"的展示方式是在報表的左方提供了文件導引模式,文件導引模式中包含了報表使用者用來尋找信息的字段索引,索引來源可使來自單一字段,同時也可使多個組字段構成的層次式索引。使用「文檔結構圖「的效果是當使用者單擊左方文檔結構圖索引的某個項目是,右方的報表就會馬上跳至使用者選取的項目位置,這對使用者在數據量龐大的報表中尋找數據,是至關使用的小幫手。如下將利用兩個範例,帶領你們熟悉」文檔結構圖「的設計方式

  範例一:

    1.須要用到的SQL腳本:

SELECT PRODUCTCATEGORY_NAME, PRODUCTSUBCATEGORY_NAME, TRX_DTE, SUM(SALES_QTY) AS SALES_QTY, SUM(SALES_AMT) AS SALES_AMT FROM FACT_SALES A LEFT JOIN DIM_PRODUCT B ON A.PRODUCT_KEY=B.PRODUCT_KEY LEFT JOIN DIM_PRODUCTSUBCATEGORY C ON B.PRODUCTSUBCATEGORY_KEY=C.PRODUCTSUBCATEGORY_KEY LEFT JOIN DIM_PRODUCTCATEGORY D ON C.PRODUCTCATEGORY_KEY=D.PRODUCTCATEGORY_KEY WHERE TRX_DTE BETWEEN @START_DTE AND @END_DTE
GROUP BY TRX_DTE , PRODUCTCATEGORY_NAME, PRODUCTSUBCATEGORY_NAME
SQL Code2

    2. 先以產品大類(PRODUCTCATEGORY_NAME)分組,在添加子組(交易日[TRX_DTE]),如圖4

    

                                  圖4

    3.在產品大類"組屬性」對話框切換至「高級」標籤頁,在「文檔結構圖」下拉菜單中選擇產品大類」PRODUCTCATEGORY_NAME「,便可,如圖5

    

                                                 如圖5

   4.預覽報表,此時左方會出現以產品大類名稱爲基礎的索引,展開索引後,單擊索引中的」傢俱「的項目,此時右方報表就會馬上移到」傢俱「組的開頭,如圖6

   

                                                 圖6

    範例二:

    1.在範例一的報表上,在產品大類的組內加入一個產品種類的子組。如圖7

    

                                                       圖7

   2.一樣,在產品中類"組屬性」對話框切換至「高級」標籤頁,在「文檔結構圖」下拉菜單中選擇產品中類」PRODUCTSUBCATEGORY_NAME「,便可,如圖8

     

                                          圖8

     設置後如圖9

    

                                                 圖9

   3.預覽報表,此時仔細看畫面左方的文檔結構圖,第一層以」產品大類「爲索引單位,單擊左方的層次式文檔結構圖產品大類層級中的」傢俱「項目後,會同步展開出現全部的產品種類。此時只要單價產品中類爲」臥室傢俱陳列「,右方報表馬上會移到」臥室傢俱陳列「組開頭。如圖10

     

                                                   圖10

 3、書籤

      相信對網頁熟悉的人對於定位錨(Anchor)的用途也不會感到陌生,我對這個就很熟悉,設置定位錨以後能夠經過簡單的點擊,就讓網頁快速跳轉到指定的地方。SSRS也能夠作到相似的效果,只須要經過」書籤「的設置,便可在報表頁面使用超連接快速移動到指定」書籤「的位置。

     1.使用前面範例二的報表的,範例的報表處添加一個文本框」這是首頁「,在這個文本框,首先要在這個文本框中設爲定位錨,此時只需點擊此文本框後,按F4,在屬性窗口的」Bookmark「屬性中填入」這是首頁「做爲書籤。如圖11

    

                                                                      圖11

   書籤能夠是任何字符串,可是在報表中必須是惟一的。若是書籤並不是惟一,則連接此書籤是,系統會指向第一個相符的書籤。

  2.在數據表的最左邊插入一列,並在文本框裏面輸入」返回首頁「,單擊該「文本框屬性」,在」文本框屬性「對話框中切換至」操做「標籤頁,勾選」轉到書籤「,並在下拉菜單內填入要調至的書籤。這裏爲「這是首頁」。如圖12

  

                                                           圖12

 3.預覽報表,不管在報表何處,好比第二頁,第三頁等,只要把鼠標放至在」返回首頁「的存儲格上方,就會出現」小手指(表示超連接)「的圖示,畫面就會自動調回至報表首頁(設置書籤之處)。如圖13和圖14

  

                                        圖13

   點擊圖13的返回首頁,直接會跳轉到圖14

   

                                    圖14

 4、深化報表

     在報表中」組「是常用來顯示彙總數據的方式,經過組可讓數據進行結構化的彙總,以方便瀏覽者解讀報表信息。在複雜的商業報表中,一般會有多重的組結構,例如,時間久可能會有年,季,月,日,爲了方便使用者查看,若是組可以讓使用者自行展開和縮合,分析者就能夠選擇想要查看的年份並深化至想要的時間層。

   多維度分析是用數據事先彙總來達到動態報表的效果,在SSRS中也提供類相似的」深化報表「功能(Drill-down),雖然沒有辦法像多維度分析般動態拖拉報表的橫軸和縱軸,可是仍舊能夠利用組結構設計出動態展開和縮合的架構。

     範例一:深化式報表

      1.須要用到的SQL:

 1 SELECT 
 2 YEAR(TRX_DTE) AS TRX_YEAR,  3 month(TRX_DTE) AS TRX_MONTH,  4 C.PRODUCTSUBCATEGORY_KEY,  5 C.PRODUCTSUBCATEGORY_NAME,  6 D.PRODUCTCATEGORY_KEY,  7 D.PRODUCTCATEGORY_NAME,  8 F.COUNTRY_NAME,  9 SUM(SALES_AMT) AS SALES_AMT, 10 SUM(SALES_QTY) AS SALES_QTY 11 FROM dbo.FACT_SALES A 12 LEFT JOIN 
13 dbo.DIM_PRODUCT B 14 ON A.PRODUCT_KEY=B.PRODUCT_KEY 15 LEFT JOIN 
16 dbo.DIM_PRODUCTSUBCATEGORY C 17 ON B.PRODUCTSUBCATEGORY_KEY=C.PRODUCTSUBCATEGORY_KEY 18 LEFT JOIN 
19 dbo.DIM_PRODUCTCATEGORY D 20 ON C.PRODUCTCATEGORY_KEY=D.PRODUCTCATEGORY_KEY 21 LEFT JOIN
22 dbo.DIM_STORE E 23 ON A.STORE_KEY=E.STORE_KEY 24 LEFT JOIN 
25 dbo.DIM_REGION F 26 ON E.REGION_KEY=F.REGION_KEY 27 WHERE YEAR(TRX_DTE)=@YEAR
28 GROUP BY 
29 YEAR(TRX_DTE) , 30 month(TRX_DTE), 31 C.PRODUCTSUBCATEGORY_KEY, 32 C.PRODUCTSUBCATEGORY_NAME, 33 D.PRODUCTCATEGORY_KEY, 34 D.PRODUCTCATEGORY_NAME, 35 F.COUNTRY_NAME
SQL Code

  在【Reporting Services 報表開發】— 矩陣的使用 圖14的基礎上稍微改下,如圖15

   

                                                         圖15

    

   2.在下方數據行組面板右擊」PRODUCTSUBCATEGORY_NAME「行組選擇」組屬性「,切換至屬性對話框的」可見性「標籤頁,在報表最初運行時」處勾選「隱藏」,這表示「PRODUCTSUBCATEGORY_NAME」組在報表展現時默認爲隱藏(縮合),並選擇「PRODUCTCATEGORY_NAME」,並選如圖16

  

                                                        圖16

   3.切換至預覽,此時報表一開始數據行只會出現「產品大類」彙總項目,可是顯示的組內容表頭上都會出現小型的「+」符號,點擊該符號後,會展開該產品大類內的的全部產品中類,同時該「+」會切換爲「-」。如圖17

   

                                                                       圖17

   注意這裏要設置pading 的Left的屬性,如圖18:

   

                                                                                 圖18

   範例二:父子式層次報表

    1.須要用到的SQL:

SELECT EMPLOYEE_KEY, MANAGER_KEY, EMPLOYEE_NAME, SUM(C.SALES_AMT) AS SALES_AMT FROM dbo.DIM_EMPLOYEE A LEFT JOIN dbo.DIM_STORE B ON A.EMPLOYEE_KEY=B.MANAGER_EMPLOYEE_KEY LEFT JOIN dbo.FACT_SALES C ON B.STORE_KEY=C.STORE_KEY AND YEAR(TRX_DTE)=2010
GROUP BY EMPLOYEE_KEY, MANAGER_KEY, EMPLOYEE_NAME
SQL Code

    2.加入數據表,將員工名稱和銷售金額字段加入數據表,

    3.創建以「EMPLOYEE_KEY」爲基礎的組,而後把詳細的信息刪除。如圖19

     

                                圖19

     4.右擊「EMPLOYEE_KEY」組,選擇組屬性,切換至「高級」標籤頁,在「遞歸父級」處下下拉選擇「[MANAGER_KEY]」。如圖20

     

                                                 圖20

    5.若是但願視覺上呈現數狀規則結構,則必須經過縮排的方式來顯示。因此,選中「EMPLOYEE_NAME」的文本框,按F4,在其屬性的Pading的「Left」的表達式中輸入如下表達式

     =(2 + (Level()*20)) & "pt"。如圖21

   

                                                                                          圖21

    6.在下方數據行組面板右擊」EMPLOYEE_KEY「行組選擇」組屬性「,切換至屬性對話框的」可見性「標籤頁,在報表最初運行時」處勾選「隱藏」,這表示「EMPLOYEE_NAME」組在報表展現時默認爲隱藏(縮合),並選擇「EMPLOYEE_NAME」。如圖22

     

                                            圖22

     7.預覽效果以下:

      

                                圖23

      發現一個問題:上級的沒有數字,由於是高級主管。高級主管必須爲下層的數字的求和。

  

                             圖24

   =Sum(Fields!SALES_AMT.Value)

  =Sum(Fields!SALES_AMT.Value,"EMPLOYEE_KEY",recursive)

  

  

                            圖25

      

  5、鑽取式報表:

    主要是主表跳轉到子表,經過傳參數到子表。具體以下圖,你們本身思考下吧。 

   

                                             圖26

 

   6、總結:

     SSRS報表開發基本上就差很少就這些,特別是對於Microsoft Dynamics CRM 中的報表開發者,這都是必需要掌握的知識。另外要開發出性能很好的報表,還須要掌握SQL Server的知識。另外SSRS還能夠開發一些圖表,微圖形與儀表等其餘功能,你們能夠本身去研究。

   參考書籍《SQL Server 2008 R2  Reporting Services 報表服務》

   須要下載的數據庫和SQL腳本:http://www.wsbookshow.com/bookshow/kjlts/jsj/kfzj/11395.html 的圖書詳情—>下載資源 都是用「ASIAMINER_SSRS」數據庫

相關文章
相關標籤/搜索