微软BI SSRS渐悟之各种场景下的交替行实现

浏览: 4990

这是本小菜的处女作,几次想完成最终都因懒惰搁置了下来,今天终于完成了。然而深知自己水平能力一般,还请各位走过路过的大神,不吝口水,点评指正。

引言

交替行,相邻行交替变色,就是两种颜色交替呈现。并不清楚交替行是否源于Excel,但是相信用过Excel的同学都实现过这个功能。至于为什么要做交替行呈现,看下图就会得到答案。


交替行呈现,与数据无关,纯是视觉呈现需要。一个简单的实现,对于报表查看者和使用者来说,却有着画龙点睛之功效。


关键知识点

实现交替行最本质的是什么?其实很简单,就是不择手段的按行构造出类似010101...、12345...、1357...、2468...等等这样的交替序列来。

Rownumber,杂项函数,返回指定范围内的所有行的运行计数。如:Rownumber(Nothing) 返回 1,2,3,4

Mod,算术运算符, 使两个数字相除,仅返回余数。如:0 Mod 2 =0, 1 Mod 2 =1,2 Mod 2 =0,3 Mod 2 = 1

IIF,程序流函数,根据表达式的值返回两个对象中的一个。如:IIF(1=1,"Red","Blue")

变量,组属性-变量,在SSRS中可以通过“Variables!”来引用作用域内的变量值。如:Variables!RowNum.Value

CODE,指定报表的自定义代码,可以使用VB语言更加灵活的实现一些复杂功能,如定义函数。使用如:Code.getGroupCounter


案例

简单交替行

正常、普通的数据列表,仅用来直接的呈现数据。

step1 选中要实现交替行的所有单元格


step2 在属性窗口中,选择BackgroudColor属性,表达式,按照知识点输入表达式,点击"确定”。此处之所以使用Rownumber(Nothing)是因为此处只是数据的原样呈现,而且Rownum使用Nothing参数,返回一个递增的行号。


step3 预览效果如下



小技巧:在我们设置Background表达式,在选择颜色时,有可能会不知道该使用什么颜色,或者不知道颜色值,希望能够直接选取,这时候只需要点击“常量”,即可在右下角直接选择我们需要的颜色。


简单分组交替行

在上一个案例的基础上,我们现在希望各商品按区域分组显示。实现的话很简单,添加父组,以区域字段分组即可。如果这个时候我们仍使用上例的Rownumber(Nothing)表达式设置交替行会是什么样的效果呢。


如图所示,交替行已出现了混乱,上图的情况还算乐观是由于聚合的数据量少的原因。那么,我们该如何做呢?

step1 添加行分组(两种方式)

a>选中任一单元格,右键,添加组,父组,选择分组字段

b>在行组窗口,右键“详细信息”组,添加组,父组,选择分组字段

step2 自定义CODE代码实现序列

沿着上面的思路,Rownumber(Nothing)不行,是不是Rownumber("分组名")可以呢。=IIf(RowNumber("RegionID") Mod 2 = 0,"Transparent","LightGrey")


好吧,并不是我们想要的结果。Rownumber("数据集")好像还可以这样,再试试吧。=IIf(RowNumber("商品") Mod 2 = 0,"Transparent","LightGrey")


哇塞,差点开心过头了,好像那里不对劲。没错,“看这里”,似乎同一分组的一色更合适些呢。Go on...看来这个时候RowNumber已经不能胜任这个事情了,那还有什么能够实现我们想要的效果呢,翻看上面提到的知识点,CODE灵活性够高,我们尝试下。


step3 添加分组变量

选择“组属性”,“变量”,添加变量,输入变量名,在值中引用自定义的CODE,引用方式Code.方法名。


step4 设置行Background属性,如果引用变量的值呢,知识点有提到Variables!.变量名。=IIf(Variables!RowNum.Value Mod 2 = 0,"Transparent","LightGrey")。


这样效果有没有好很多呢。当然有人觉得上一个效果好,特别是在同一分组数量较多时。OK,NO有问题,看实际情况和客户需求啦!

父子组交替行

父子组交替实现方式同上,需要注意的是:

a>设置变量应该在父组设置

b>如果父组不实现交替行,仅子组和数据行实现交替,可以使用RowNumber("父组名")来实现.

c>其实除了设置变量的方式,我们还可以给列表添加一列参考列,取值同给变量赋值,然后设置该列可见性为不可见.然后在Background属性表达式中引用这个列的值.引用方式ReportItems!列名.Value。

递归组交替行

递归组交替实现方式同上。根据实际需要组合实现。

简单交替列

这儿为什么会提到交替列呢,有的时候以列为主要视角的列表,通过对列的颜色交替能够更加清晰的阅读数据。但是通常交替列的时候,并不是以一列为一个交替,往往是一组列为一个交替。

列组交替列

列组交替本身就是简单交替列的一个动态产生

推荐 12
本文由 创作,采用 知识共享署名-相同方式共享 3.0 中国大陆许可协议 进行许可。
转载、引用前需联系作者,并署名作者且注明文章出处。
本站文章版权归原作者及原出处所有 。内容为作者个人观点, 并不代表本站赞同其观点和对其真实性负责。本站是一个个人学习交流的平台,并不用于任何商业目的,如果有任何问题,请及时联系我们,我们将根据著作权人的要求,立即更正或者删除有关内容。本站拥有对此声明的最终解释权。

16 个评论

写的好详细呀,收藏啊。
悟

回复 梁勇

本来想后面几个案例都写出来的,懒了。。。
梁勇

梁勇 回复

有编辑功能,可以慢慢补充,不捉急。。好文,明天推荐到首页去,哈哈。早点休息,天天睡这么晚。
悟

回复 梁勇

嗯 就睡了。刚想了想接下来写点什么。季度分组和Lookup使用。
虽然看不懂 但是还是图文并茂 一定是个花心思的好文 赞一个
都是常用的功能,谢谢整理分享
你好,我设置了代码, 变量,怎么不能交替变色?是哪里没设好? 谢谢
悟

回复 luorains

检查下是不是那里没有写对,特别是Code和Variables
悟

回复 老头子

你也学微软BI吧,以你的手速,分分钟就大神了
luorains

luorains 回复

按上面写的。变色是乱的。
悟

回复 luorains

你把你的定制过程去微软BI版块发个问题,看一下,尽可能的详细些。
很详细实用!
非得赞一下不行!
不错,写的很好很详细
处女作
悟老师的博客写得很清晰,不得不大赞

从BIwork老师的视频中学到了=IIf(RowNumber("RegionID") Mod 2 = 0,"Transparent","LightGrey")

但是还从来没想过如果有分组该怎么办?

Mark学习,以后用得上!~

要回复文章请先登录注册