zoukankan      html  css  js  c++  java
  • 【Reporting Services 报表开发】— 交互式报表

          我们知道,界面是人与系统间的对话方式,当使用者面对的是冷冰冰的界面,不但会造成使用者对于系统的热情减低,也会因为不便而产生诸多抱怨。尤其像报表时企业内几乎每日都会使用到的工具,因此,如何让使用者可以再复杂的报表中最快找到所需要的信息,正是报表工具所努力的重要课题,为了提升使用者的便利与满意度,SSRS提供了许多便利的交互性功能,包括:交互式排序、文档结构图、书签、深化报表和钻取报表。

    一、交互式排序

         在查看数据的过程中,为了能快速地找出特定的信息以及确认数据的相对大小,总免不了使用排序的动作:“找出业绩最差的业务员”、“找出毛利最高的产品”等如此类的需求,这些对于分析人员来说可以说是家常便饭。但是不同的分析人员面对不同的使用习惯以及分析目的,报表数据必须随着利用不同的字段进行升序i和降序。

       1.新建报表,新建数据源和数据集,需要用到的SQL脚本:

     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:

        

                            图1

        3.点击“销售数量”的文本框属性,请勾选“对此文本框启用交互式排序”,并在排序区域单击“组”,并选择“PRODUCTCATEGORY_NAME”组。具体如图2

       

                                                                      图2

       4.预览,此时发现刚才设置的表头处会有出现一个三角形图示,只要一单击,画面的数据就会如图3般自动切换升序和降序。具体如图3

      

                           图3

     二、文档结构图

          当使用者查看一份页数超过数十页甚至于数百,数千页的报表时,可怜的使用者只能利用工具栏上方的“上一页”,“下一页”,逐页靠自己的能力寻找所需要的信息内容,这种搜寻模式不仅浪费时间,同时使用者在使用上也容易因为眼花而遗漏重大信息。因此,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

     三、书签

          相信对网页熟悉的人对于定位锚(Anchor)的用途也不会感到陌生,我对这个就很熟悉,设置定位锚之后可以通过简单的点击,就让网页快速跳转到指定的地方。SSRS也可以做到类似的效果,只需要通过”书签“的设置,即可在报表页面使用超链接快速移动到指定”书签“的位置。

         1.使用前面范例二的报表的,范例的报表处添加一个文本框”这是首页“,在这个文本框,首先要在这个文本框中设为定位锚,此时只需点击此文本框后,按F4,在属性窗口的”Bookmark“属性中填入”这是首页“作为书签。如图11

        

                                                                          图11

       书签可以是任何字符串,但是在报表中必须是唯一的。如果书签并非唯一,则链接此书签是,系统会指向第一个相符的书签。

      2.在数据表的最左边插入一列,并在文本框里面输入”返回首页“,单击该“文本框属性”,在”文本框属性“对话框中切换至”操作“标签页,勾选”转到书签“,并在下拉菜单内填入要调至的书签。这里为“这是首页”。如图12

      

                                                               图12

     3.预览报表,无论在报表何处,比如第二页,第三页等,只要把鼠标放至在”返回首页“的存储格上方,就会出现”小手指(表示超链接)“的图示,画面就会自动调回至报表首页(设置书签之处)。如图13和图14

      

                                            图13

       点击图13的返回首页,直接会跳转到图14

       

                                        图14

     四、深化报表

         在报表中”组“是经常使用来显示汇总数据的方式,通过组可以让数据进行结构化的汇总,以方便浏览者解读报表信息。在复杂的商业报表中,通常会有多重的组结构,例如,时间久可能会有年,季,月,日,为了方便使用者查看,如果组能够让使用者自行展开和缩合,分析者就可以选择想要查看的年份并深化至想要的时间层。

       多维度分析是用数据事先汇总来达到动态报表的效果,在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

          

      五、钻取式报表:

        主要是主表跳转到子表,通过传参数到子表。具体如下图,大家自己思考下吧。 

       

                                                 图26

     

       六、总结:

         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”数据库

  • 相关阅读:
    怎样用javascript关闭本窗口
    ASP.NET 3.5控件和组件开发技术之客户端回发/回调揭密
    谈谈"求线段交点"的几种算法(js实现,完整版)
    您是哪个等级的CSS开发人员?
    使用CSS3创建文字颜色渐变(CSS3 Text Gradient)
    拦截asp.net输出流做处理
    ASP.NET读取RSS
    简单高效的asp.net目录树源代码
    使用HTML5、CSS3和jQuery增强网站用户体验[留存]
    ASP.NET中的加密页面机制
  • 原文地址:https://www.cnblogs.com/allenhua/p/3804881.html
Copyright © 2011-2022 走看看