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

一、交互式排序

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

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

 SELECT
YEAR(TRX_DTE) AS TRX_YEAR,
DATEADD(dd,1-DAY(TRX_DTE),TRX_DTE) AS TRX_MONTH,
C.PRODUCTSUBCATEGORY_KEY,
C.PRODUCTSUBCATEGORY_NAME,
D.PRODUCTCATEGORY_KEY,
D.PRODUCTCATEGORY_NAME,
F.COUNTRY_NAME,
SUM(SALES_AMT) AS SALES_AMT,
SUM(SALES_QTY) AS SALES_QTY
FROM dbo.FACT_SALES A
LEFT JOIN
dbo.DIM_PRODUCT B
ON A.PRODUCT_KEY=B.PRODUCT_KEY
LEFT JOIN
dbo.DIM_PRODUCTSUBCATEGORY C
ON B.PRODUCTSUBCATEGORY_KEY=C.PRODUCTSUBCATEGORY_KEY
LEFT JOIN
dbo.DIM_PRODUCTCATEGORY D
ON C.PRODUCTCATEGORY_KEY=D.PRODUCTCATEGORY_KEY
LEFT JOIN
dbo.DIM_STORE E
ON A.STORE_KEY=E.STORE_KEY
LEFT JOIN
dbo.DIM_REGION F
ON E.REGION_KEY=F.REGION_KEY
GROUP BY
YEAR(TRX_DTE) ,
DATEADD(dd,1-DAY(TRX_DTE),TRX_DTE) ,
C.PRODUCTSUBCATEGORY_KEY,
C.PRODUCTSUBCATEGORY_NAME,
D.PRODUCTCATEGORY_KEY,
D.PRODUCTCATEGORY_NAME,
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:

 SELECT
YEAR(TRX_DTE) AS TRX_YEAR,
month(TRX_DTE) AS TRX_MONTH,
C.PRODUCTSUBCATEGORY_KEY,
C.PRODUCTSUBCATEGORY_NAME,
D.PRODUCTCATEGORY_KEY,
D.PRODUCTCATEGORY_NAME,
F.COUNTRY_NAME,
SUM(SALES_AMT) AS SALES_AMT,
SUM(SALES_QTY) AS SALES_QTY
FROM dbo.FACT_SALES A
LEFT JOIN
dbo.DIM_PRODUCT B
ON A.PRODUCT_KEY=B.PRODUCT_KEY
LEFT JOIN
dbo.DIM_PRODUCTSUBCATEGORY C
ON B.PRODUCTSUBCATEGORY_KEY=C.PRODUCTSUBCATEGORY_KEY
LEFT JOIN
dbo.DIM_PRODUCTCATEGORY D
ON C.PRODUCTCATEGORY_KEY=D.PRODUCTCATEGORY_KEY
LEFT JOIN
dbo.DIM_STORE E
ON A.STORE_KEY=E.STORE_KEY
LEFT JOIN
dbo.DIM_REGION F
ON E.REGION_KEY=F.REGION_KEY
WHERE YEAR(TRX_DTE)=@YEAR
GROUP BY
YEAR(TRX_DTE) ,
month(TRX_DTE),
C.PRODUCTSUBCATEGORY_KEY,
C.PRODUCTSUBCATEGORY_NAME,
D.PRODUCTCATEGORY_KEY,
D.PRODUCTCATEGORY_NAME,
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”数据库

【Reporting Services 报表开发】— 交互式报表的更多相关文章

  1. java报表开发之报表总述

    转自:https://blog.csdn.net/u011659172/article/details/40504271?utm_source=blogxgwz6

  2. Reporting Services 配置工具

    使用 Reporting Services 配置管理器可配置 Reporting Services 安装.如果使用“仅文件”选项安装报表服务器,则必须使用此工具来配置服务器,才能使用该服务器.如果使用 ...

  3. 【Reporting Services 报表开发】— 页码编列

    一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH4 二.在报表文件 ...

  4. 【Reporting Services 报表开发】— 表达式

    一.常用的SSRS原始函数可以打开文本框的表达式中看到,如图1 图1 如下为SSRS中设计报表时常用的运算函数: 运算符/函数 说明 + 前后位数字则为加法,前后为字符串则为链接符号 - 数值减法 * ...

  5. 【Reporting Services 报表开发】— 数据表的使用

    一.打开 SQL Server Business Intelligence Development Studio,新建项目—>商业智能项目—> 报表服务器项目,命名为CH3 二.在报表文件 ...

  6. 【Reporting Services 报表开发】— 矩阵的使用

    矩阵,相较于数据表示一维的数据,只能指定固定的数据列,来呈现动态的明细数据行,所以,它可以说是种二维的数据展现形式,让我们能够很容易地从数据行和数据集的交替中查看对应的汇总信息.像SQL Server ...

  7. 【Reporting Services 报表开发】— 如何根据明细的行数实现分页(比如每隔5行分页)

    一.新建报表:对于初学者可以参考我前面的文章[Reporting Services 报表开发]— 总结 如图1: 图 1 二.选择 new_name文本框—>添加组—>选择行组中的父组.具 ...

  8. 【Reporting Services 报表开发】— 级联式参数设置

    级联式参数设置 再清楚的菜单,只要遇到选择项目一多的时候,难免会让人眼花缭乱,而找不到该选的选项.举例来说,像是零售业动辄万种商品品类,如果希望快速的选择到希望查看的产品品类时,就需要更有效率的搜索方 ...

  9. 【Reporting Services 报表开发】— 数据表存储格式修改

    文本框 Format属性:日期:输入d(表示简易日期).2007/5/1 0:00:00   输入d之后 变成 2007/5/1 金额:输入C0(表示货币),系统会根据设定值产生对应的货币符号,至于0 ...

随机推荐

  1. 学习笔记:iPhone终极指南、手机端、浏览器各种规范

    手机图解参考:http://www.paintcodeapp.com/news/iphone-6-screens-demystified 手机图标尺寸参考:https://developer.appl ...

  2. HDU 4869 (递推 组合数取模)

    Problem Turn the pokers (HDU 4869) 题目大意 有m张牌,全为正面朝上.进行n次操作,每次可以将任意ai张反面,询问n次操作可能的状态数. 解题分析 记正面朝上为1,朝 ...

  3. 如何给magento的产品页面添加返回按钮

    如何给magento的产品页面添加返回按钮,最模板提供教程 第一步: 打开 E:\xampp\htdocs\magento\skin\frontend\default\bluescale\css\st ...

  4. C语言 负数取余的原理

    负数求余数运算是一个数学问题: 任何一个整数n都可以表示成 n=k*q+r 其中0<=|r|<|q| 这里的r就是n除以q的余数,即 r==n%q 例如: -9=(-2)*4+(-1) 则 ...

  5. LINQ 按多个字段排序

    多字段排序 添加到 LINQ 查询结果中的Take()扩展方法用于提取前 个结果: private static void Ordering() { var racers = (from r in F ...

  6. 12. Integer to Roman

    Given an integer, convert it to a roman numeral. Input is guaranteed to be within the range from 1 t ...

  7. Codeforces Round #285 (Div. 2) A B C 模拟 stl 拓扑排序

    A. Contest time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  8. name值与id值在Js获取元素时的区别

    1.适用范围 除base.head.html.script.meta.title标签外,id都可以用:name只适用于select.form.frame.iframe.img.a.input等中. H ...

  9. C++ Primer : 第十二章 : 动态内存之shared_ptr类实例:StrBlob类

    StrBlob是一个管理string的类,借助标准库容器vector,以及动态内存管理类shared_ptr,我们将vector保存在动态内存里,这样就能在多个对象之间共享内存. 定义StrBlob类 ...

  10. C++ Primer : 第九章 : 顺序容器的定义、迭代器以及赋值与swap

    顺序容器属于C++ STL的一部分,也是非常重要的一部分. 顺序容器包括: std::vector,包含在头文件<vector>中 std::string, 包含在头文件<strin ...