微軟BI 之SSRS 系列 - 如何實現報表導航 Navigation 和鑽取 Drill Down 的效果


開篇介紹

如何在 SSRS 報表中實現標簽導航 Navigation 和向下鑽取 Drill Down的效果? 如同下面這個例子一樣 -

在頁面第一次加載的時候,默認顯示是全部地區的銷售總和情況,上面一張圖是顯示各個國家的零售額和網售額,下面一張圖是根據時間小時銷售額的趨勢。

那么 Overall 的部分即圖中紅色部分內容為全部地區匯總的信息,藍色圈表示的位置都是可以點擊的,通過選擇不同的國家可以導航或者鑽取到不同的國家具體數據。

比如在導航菜單中選擇 United Kingdom 或者點擊了柱狀圖中 United Kingdom 表示的區域,那么報表將刷新跳轉到 United Kingdom 所在的數據區域。

同樣的在最左邊的導航中如果選擇 United States 也會跳轉到 United States 所在的數據報表。

這種需求肯定存在,比如不希望設計多個報表,跳轉來跳轉去覺得別扭。希望在一個報表中實現這樣的效果,能夠很直觀的進行導航。

實際上這個例子所有的操作都是基於同一個報表來實現的,在點擊導航的時候其實已經發生了報表的跳轉,由自身跳往自身然后根據參數的傳遞來控制頁面中各個組件的顯示或者隱藏效果,以及標簽內容和標簽顏色的改變。對這些細節仔細調整,那么用戶在導航或者鑽取報表的時候除了頁面刷新的等待時間,是感覺不到其它的異常的。

還有一種想法就是能不能直接在 SSRS 報表上添加一些 Move Over 事件,然后再來控制組件的顯示或者隱藏效果? 在 SSRS 報表中是沒有這樣的特性的,唯一有可能的操作應該是在用其它WEB 頁面嵌入 SSRS 報表的時候通過 JS 來控制報表的布局和事件相應,但是對於這一點我也是道聽途說,至少我沒有研究過具體如何實現。

像這個類型的例子,實現的方式有很多種,我這里是用的一些硬編碼的參數方式來控制的,大家如果有類似的需求可以在這個基礎上自己動手擴展。

只有一個參數 - CountryName,字符串類型並允許空值。

Dataset 的數據表來源可以參考這一篇文章中的示例數據 ,下面是一個非常簡單的查詢,為了避免數據過多,只特意選擇了部分數據。如果參數 @CountryName 為空的話那么就顯示所有國家的信息,反之,只查詢參數所表示國家的數據。

IF @CountryName IS NULL
SELECT dg.EnglishCountryRegionName AS 'Country',
       dg.StateProvinceName AS 'StateProvince',
       dg.City,
       dc.CustomerName, 
       fa.OrderDateKey,
       fa.SalesAmount AS 'Internet Sales Amount',
       fa.SalesAmount * RAND(10) AS 'Reseller Sales Amount'
FROM DimCustomer AS dc
INNER JOIN DimGeography AS dg
ON dc.GeographyKey = dg.GeographyKey
INNER JOIN FactInternetSales AS fa
ON fa.CustomerKey = dc.CustomerKey
WHERE dg.EnglishCountryRegionName IN ('United States','United Kingdom','Germany','Canada')
AND OrderDatekey BETWEEN 20050701 AND 20050731
ELSE
SELECT dg.EnglishCountryRegionName AS 'Country',
       dg.StateProvinceName AS 'StateProvince',
       dg.City,
       dc.CustomerName, 
       fa.OrderDateKey,
       fa.SalesAmount AS 'Internet Sales Amount',
       fa.SalesAmount * RAND(10) AS 'Reseller Sales Amount'
FROM DimCustomer AS dc
INNER JOIN DimGeography AS dg
ON dc.GeographyKey = dg.GeographyKey
INNER JOIN FactInternetSales AS fa
ON fa.CustomerKey = dc.CustomerKey
WHERE dg.EnglishCountryRegionName IN ('United States','United Kingdom','Germany','Canada')
AND OrderDatekey BETWEEN 20050701 AND 20050731
AND dg.EnglishCountryRegionName = @CountryName

 

 

左側導航區都是使用不同的 Textbox 表示不同的國家,右側和下側圖表的底層還有表示 Overall 的圖表,也就是說是兩層圖表,一層被遮蓋了。

 對於導航的文本控件,主要就是設置 Action 導航動作 - 調到報表自身並傳遞參數值,這個參數值將用做 Dataset 查詢的結果集過濾條件以及各個子圖表的 Title。

同樣的,為了增強一些效果,可以做的細致一些來修改文本的背景顏色和字體顏色。

子圖表的標題部分也可以通過傳入的參數來控制。

在 Overall 表的 Series Properties 中可以選擇 Action,意味着只要用戶點擊了柱狀圖區域,那么就可以根據選擇的國家來做導航。

這里的 Action 中的參數就不需要硬編碼了,因為報表知道你選擇了圖標中的哪一個國家。

對於各個主圖表和子圖表的顯示或者隱藏可以通過判斷 CountryName 參數是否為空來決定,這里的配置是子圖表。

基本的配置就是以上這些,實際上像上面的這個報表設計的過程還是非常簡單和容易的,如果熟練的話半個小時就可以完成一個比較有意思的導航和鑽取效果。在導航或者鑽取到國家這個層面之后,其實還可以繼續往下鑽取到省份乃至城市的級別。這些都可以通過參數來進行控制,同時需要對 Dataset 中的查詢做出一些調整以配合起來控制。

雖然,微軟 SSRS 報表在很多功能和設計上顯的比較落后,包括單板的界面樣式,選擇性很少的圖表等等很多能夠被吐槽的地方。但是,可以通過各種變通的方式以及耐心細致的設計在很多情況下是可以達到客戶的要求的。換句話說,不要求報表做的有多么炫,但是需要能夠站在客戶的角度,提供客戶以最便捷的方式最簡單的操作來找到他們做需要關心的數據,我認為這樣的報表設計就已經很成功了。

更多 BI 文章請參看 BI 系列隨筆列表 (SSIS, SSRS, SSAS, MDX, SQL Server) 如果覺得這篇文章看了對您有幫助,請幫助推薦,以方便他人在 BIWORK 博客推薦欄中快速看到這些文章。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM