自创算法实现Reporting Service中多值判定
前提条件:用Reporting Service做过报表,并碰到想确定多选下拉框选了哪些选项却无法确定的情况。如:根据选项显示相应的值。
功能实现:用算法实现Reporting Service中多值判定。
算法说明:设a=1,b=2,c=4,d=8,e=16,f=32,大家能从这组数中看到什么规律?很容易得到它们的值是2的n-1次方,还有什么呢?很容易忽视的一点:b=a+1,c=a+b+1,d=a+b+c+1,e=a+b+c+d+1,f=a+b+c+d+e+1,这个规律决定了一件事,如果每个数只能用一次,只要给出一个他们的和值那就唯一决定了产生这个和值的一组数。那么,在多选下拉框中,正好符合每个数只能用一次的情况,因此,如果给每个选项赋一个值,给出他们的和值就能判定该选项是否被选中。经过一段时间的验证,我得出判定方法如下:和值除以要判定选项的值,取整数部分再除以2,取余,如果余数为1那就被选中了,用伪代码表示就是:
if(sum \ value mod 2=1)return true,该算法是否已被前人定义我不知道,我数学比较差,如果已经有了那就见笑了。
具体实现:添加一个内部参数,用来保存和值。和值可以通过SQL语句得到,如下:
select sum(val) as sum from
(select 1 as val,'a' as sel
Union
select 2,'b'
Union
select 4,'c'
Union
select 8,'d'
Union
select 16,'e'
Union
select 32,'f' ) as t
where t.sel in (@MulSel)
a\b\c\d\e\f分别为多选参数的值.
有了这个和值,就可以判定哪些值该显示哪些该隐藏,将表达式写在“可见性”就行。
总结:这只是我自己琢磨的方法,有闭门造车之嫌,如果已有更好的或我进死胡同了,希望各位不吝赐教,在此仅作抛砖引玉。
功能实现:用算法实现Reporting Service中多值判定。
算法说明:设a=1,b=2,c=4,d=8,e=16,f=32,大家能从这组数中看到什么规律?很容易得到它们的值是2的n-1次方,还有什么呢?很容易忽视的一点:b=a+1,c=a+b+1,d=a+b+c+1,e=a+b+c+d+1,f=a+b+c+d+e+1,这个规律决定了一件事,如果每个数只能用一次,只要给出一个他们的和值那就唯一决定了产生这个和值的一组数。那么,在多选下拉框中,正好符合每个数只能用一次的情况,因此,如果给每个选项赋一个值,给出他们的和值就能判定该选项是否被选中。经过一段时间的验证,我得出判定方法如下:和值除以要判定选项的值,取整数部分再除以2,取余,如果余数为1那就被选中了,用伪代码表示就是:
if(sum \ value mod 2=1)return true,该算法是否已被前人定义我不知道,我数学比较差,如果已经有了那就见笑了。
具体实现:添加一个内部参数,用来保存和值。和值可以通过SQL语句得到,如下:
select sum(val) as sum from
(select 1 as val,'a' as sel
Union
select 2,'b'
Union
select 4,'c'
Union
select 8,'d'
Union
select 16,'e'
Union
select 32,'f' ) as t
where t.sel in (@MulSel)
a\b\c\d\e\f分别为多选参数的值.
有了这个和值,就可以判定哪些值该显示哪些该隐藏,将表达式写在“可见性”就行。
总结:这只是我自己琢磨的方法,有闭门造车之嫌,如果已有更好的或我进死胡同了,希望各位不吝赐教,在此仅作抛砖引玉。