SSRS 實用技巧 ---- 為表格添加展開/折疊操作(明細報表)


相信很多人都會遇到這樣的需求:當表格按照某幾個列分組時,需要為組添加展開和折疊的操作。

最初展現表格的時候只展現最外層分組,然后點擊展開后可以查看分組內的明細情況。

先來一張效果圖,然后再看具體如何實現:

 

話不多說,我們來看看這個功能如何實現。

首先創建示例表

CREATE TABLE [dbo].[DetailReportTestData]
(
    [Category1] [nvarchar](50) NULL,
    [Category2] [nvarchar](50) NULL,
    [Name] [nvarchar](50) NULL,
    [Value1] [int] NULL,
    [Value2] [int] NULL
)

然后造點數據插進去,代碼如下:

WITH A AS
(
    SELECT 'Name1' AS Name, 3 AS Value1, 4 AS Value2 UNION ALL
    SELECT 'Name2', 4, 5 UNION ALL
    SELECT 'Name3', 6, 66 UNION ALL
    SELECT 'Name4', 78, 22 UNION ALL
    SELECT 'Name5', 55, 66
), B AS
(
    SELECT 'Category21' AS Category2 UNION ALL
    SELECT 'Category22' UNION ALL
    SELECT 'Category23' UNION ALL
    SELECT 'Category24'
),C AS
(
    SELECT 'Category11' AS Category1 UNION ALL
    SELECT 'Category12' UNION ALL
    SELECT 'Category13' UNION ALL
    SELECT 'Category14' UNION ALL
    SELECT 'Category15' UNION ALL
    SELECT 'Category16' UNION ALL
    SELECT 'Category17'
)
INSERT INTO [dbo].[DetailReportTestData]
SELECT C.*, B.*, A.*
FROM A
CROSS JOIN B
CROSS JOIN C

 

 然后在SQL Server Data Tools (SSDT/BIDS) 中創建數據源(DataSource)和數據集(DataSet)

數據源為你創建表的數據庫,數據集如下:

SELECT [Category1]
      ,[Category2]
      ,[Name]
      ,[Value1]
      ,[Value2]
FROM [dbo].[DetailReportTestData]

 

然后從工具箱中托一個table 出來,把Name, Value1, Value2 選到table里,如下圖:

 

 

 

接着依次添加分組Category2, Category1,可以在單元格上點擊右鍵-->Add Group-->Parent Group 然后選擇列名來實現,也可以直接把列拖拽到指定的位置來實現,如下圖:

 

 

先看一下預覽的效果:

 

 

接下來我們開始添加可折疊操作,如下圖,在Row Groups 窗口里右鍵點擊 Details,然后選擇 Group Properties...

 

 

 

然后選擇 ”Visibility“, 右邊選擇”Hide“,下面勾選上”Display can be toggled by this report item:“,在下拉列表里選擇Category2

這樣,點擊Category2 列的時候才會展開 Name 列,如下圖:

 

 

然后對Category2 也執行相同的操作,只不過在Display can be toggled by this report item: 部分,選擇Category1

這樣 點擊Category1列 就會展開 Category2 列.

為了美觀,我為列頭添加了背景顏色以及修改了字體顏色,現在的預覽效果如下圖:

 這樣就可以點擊加號來展開詳細數據,如下圖:

 然后就完成了嗎?

不知道大家發現沒有,Name, Value1, Value2 三個列,在未展開時顯示的是Name1的數據,也就是第一行的數據。按照常理來講,當未展開的時候,當前行應該顯示的是匯總數據。

在Row Groups 窗口中的Details 右側,點擊小倒三角按鈕,選擇Add Total-->After. 如下圖

 

 

這樣就添加了一個匯總行,我們為匯總行命名為Total,如下圖所示:

 

 

預覽一下,效果如下所示:

可以看到,在未展開時,Name, Value1, Value2 顯示的是匯總的值,而展開后顯示的是具體的明細。

 

 

 

這樣就完了嗎?對於我這個有強迫症並且有完美主義傾向的人來看還不夠好,當展開所有Name 的時候,下面還有一行Total,如果我想看Total的信息,我不展開就好啦,如果展開所有的Name,下面都有一行Total,對表格本身也會增加很多的行,展現更多的數據使得我們眼花繚亂。

 

那么,我能否實現這樣的功能:當Name 未展開時,顯示的是匯總值,而展開的時候不顯示Total 的行呢?

答案是肯定的,還是在Visibility 屬性上面着手。

 

點擊表格的任意位置,會顯示表格邊框。然后右鍵點擊左下角的邊框,這是會彈出一個菜單欄,並且同時選中最下面一行。選擇Row Visibility...

 

 

這時會彈出一個屬性框,按照下圖勾選。

這里的選擇跟上面的選擇不同是因為,在這樣的默認狀態是Show的,只有在點擊Category2 列時,它才會變成Hide。

 

 

看一下預覽效果吧:

 

這樣,當展開所有Name 時,則不顯示Total 行,未展開所有Name 時,則顯示Total 行。大功告成。^_^

 

By: Albert Li, 2015-03-27 13:31:17


免責聲明!

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



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