开篇介绍

如何在 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 博客推荐栏中快速看到这些文章。

微软BI 之SSRS 系列 - 如何实现报表导航 Navigation 和钻取 Drill Down 的效果的更多相关文章

  1. 微软BI 之SSRS 系列 - 如何让报表在一页显示,两种常用的技巧

    通常情况下,SSRS 报表在页面内容过多的时候会自动分页.但有的时候当页面内容不是很多,大概最多2页的情况下,或者客户要求所有内容必须在一页显示时,应该如何设置. 实际上,要考虑两种情况:第一种情况是 ...

  2. 微软BI 之SSRS 系列 - 如何实现报表标签的本地化 - 中文和英文的互换

    SSRS 中并没有直接提供本地化的配置方式,因此在 SSRS 中实现本地化,比如有英文标题还有可选的中文标题,就需要通过其它的方式来解决. 比如默认是这样的英文标题 - 但是本地中方用户可能比较喜欢看 ...

  3. 微软BI 之SSRS 系列 - 报表邮件订阅中 SMTP 服务器匿名访问与 Windows验证, 以及如何成功订阅报表的实例

    这篇文章源于在上一篇博文中有园友提出订阅 SSRS 报表时的一个问题,  于是就好好总结了一下,把有关 SSRS 报表订阅的要点和容易出现问题的地方写出来,希望对大家有所帮助! 参看上一篇博文 - S ...

  4. 微软BI 之SSRS 系列 - 在 Cube 中通过 MDX 查询实现基于父子递归关系的汇总报表

    之前我写了一篇在 SSRS 开发中处理这种父子关系的汇总与聚合的文章 (SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表),示例中的查询是基于 SQL Server 关系型 ...

  5. 微软BI 之SSRS 系列 - 基于时间段参数的 MDX 查询以及时间日历 Date Picker 的时间类型参数化

    今天在天善问答里看到一个问题,如果我没有理解错的话,它应该是指比如在一个报表中选取一个时间段,然后求出这个时间段的某个 Measure 的 SUM 和.并且同时求出这两个时间点对应的上一年的时间点之间 ...

  6. 微软BI 之SSRS 系列 - 实现 Excel 中图表结合的报表设计

    来自群里面讨论的一个问题,EXCEL 中有类似于这样的图形,上面是 Chart, Chart X轴上的值正好就是下方 Table 的列头,这个在 SSRS 中应该如何实现?   SSRS 2008.2 ...

  7. 微软BI 之SSRS 系列 - 使用带参数的 MDX 查询实现一个分组聚合功能的报表

    基于数据仓库上的 SSRS 报表展示,一般可以直接通过 SQL 查询,存储过程,视图或者表等多种方式将数据加载并呈现在报表中.但是如果是基于 Cube 多维数据集的数据查询,就不能再使用 SQL 的语 ...

  8. 微软BI 之SSRS 系列 - 使用 LookupSet 和 Adjacent Group 等高级技巧在报表中跨 Dataset 分组查询

    SSRS 报表中有一些高级的技巧,平常很少用到,下面我通过这个案例来展现一下如何在实际开发中使用它们,并且如何解决一些实际的需求. 这张报表分别统计了不同的 Product 产品在不同的月份的 Ord ...

  9. 微软BI 之SSRS 系列 - 使用分组 Group 属性实现基于父子递归关系的汇总报表

    基于父子关系的递归结构在公司组织结构里比较常见,基本上都是在一张表里实现的自引用关系.在报表中如果要实现这种效果,并且在这个基础上做一些数据的汇总,可以使用到下面提到的方法. 要实现的效果大致如下 - ...

随机推荐

  1. 在VC中使用SendInput函数实现中文的自动输入

    很早以前写了一个刷卡程序,功能是定时监控读卡器,当发现有IC卡放到读卡器上后,自动识别出卡号,然后带着这个卡号搜索一个英文用户名和卡号的对照表,最后把英文用户名直接自动输入到当前光标所在的位置.本来程 ...

  2. 【spring cloud】【spring boot】网管服务-->配置文件添加endpoints.enabled = false,SpringBoot应用监控Actuator使用的安全隐患

    转载:https://xz.aliyun.com/t/2233 ==================================================================== ...

  3. 异步图片下载引擎(升级版——ExecutorService+handler)

    [Android分享] 异步图片下载引擎(升级版——ExecutorService+handler)  [复制链接]     皮诺 13 主题 5 好友 844 积分 No.4 中级开发者 升级  2 ...

  4. cloudera安装笔记

    Cloudera安装教程 教程1:http://blog.csdn.net/a921122/article/details/51939692教程2:http://www.6gdown.com/soft ...

  5. Base64 JAVA后台编码与JS前台解码(解决中文乱码问题)

    中文通过Java后台进行Base64编码后传到前台,通过JS进行Base64解码时会出现中文乱码的问题,被这个问题也是困扰了几天,使用jquery.base64.js只能转码非中文字符,经过搜集各种方 ...

  6. Swift - 多个mask的动画效果

    Swift - 多个mask的动画效果 效果 源码 https://github.com/YouXianMing/Swift-Animations // // TranformFadeView.swi ...

  7. ExtJS 4.2 教程-01:Hello ExtJS

    转载自起飞网,原文地址:http://www.qeefee.com/extjs-course-1-hello-extjs, 本文还发布在了ExtJS教程网站起飞网上面,如果转载请保留本段声明,谢谢合作 ...

  8. 使用kubectl创建部署

    本文使用自己利用VirtubalBox搭建的集群环境,暂时只有一个Master.一个Node.如果想了解集群的搭建,可以参考我的文章离线环境安装Kubernetes集群以及使用kubeadm安装kub ...

  9. Asp.Net Core 文件上传处理

    本文主要介绍后台接收处理 1.在使用控制器接收 : [HttpPost] : public IActionResult UploadFiles(IList<IFormFile> files ...

  10. BMap:JavaScript API

    ylbtech-Map-Baidu:JavaScript API JavaScript API百度地图JavaScript API是一套由JavaScript语言编写的应用程序接口,可帮助您在网站中构 ...