• 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

  • 相关阅读:
    234. Palindrome Linked List(判断链表是否回文)
    141. Linked List Cycle(判断链表是否有环)
    第二届“中国高校计算机大赛-大数据挑战赛” 20名
    Spark集群 Python Package管理
    Android中单选框RadioButton的基本用法
    【Android】进程间通信IPC——Binder
    Spring Boot 集成 JWT 实现单点登录授权
    pythonGUI编程——Qt库(1)
    Android获取SD卡路径/内存的几种方法
    Android主题更换换肤
  • 原文地址:https://www.cnblogs.com/Albert-Lee/p/4371567.html
Copyright © 2020-2023  润新知