Chinaunix首页 | 论坛 | 博客
  • 博客访问: 152230
  • 博文数量: 69
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 595
  • 用 户 组: 普通用户
  • 注册时间: 2016-07-16 00:00
个人简介

宁可逆流而上与众不同,也不顺风顺水随波逐流

文章分类

全部博文(69)

文章存档

2020年(1)

2018年(9)

2017年(43)

2016年(16)

我的朋友

分类: SQLServer

2018-06-30 21:26:51

SSRS使用多值参数方法

由于在制作报表的过程中需要用到能多选的参数于是就有了今天这篇博文。

通常情况下单值参数我们只需要在where后面这样写where columnname=@variable即可,但是多值的时候却有些复杂。只要按照一下几步操作即可。在此之前,我需要先说明几点知识

  • 多值参数在你选择后是以数组形式存储你所选择的参数的,但是数组是无法直接传递到你的语句里去的,与其这样说倒不如说是你根本不知道对方选择了多少值,所以直接传数组值是不妥当的,我的思路就是将所有值连接成字符串,然后再将字符串传递过去

  • 但是字符串传递给语句之后也无法做筛选,这时候你需要一个函数能将字符串里的所有值提取出来,然后用in条件就可以了

一:创建自定义函数能将形如“a,b,c,d"等格式的字符串里面的内容拆解出来,里面的逗号是你自定义的分隔符

我这里提供这样一个函数给你。当然,这个函数就是默认你的值的分隔符是逗号

  1. create function SsrsMultiChoice
  2. (
  3. @string varchar(8000)--形参存储将要处理的字符串
  4. )
  5. returns @result table--自定义返回的表格式
  6. (
  7.     name varchar(80)
  8. )
  9. as
  10. begin--代码段开始
  11.     declare @start int,@end int,@status int--@start变量存储要从字符串中截取的字符串的起始位置,@end是结束位置,@status判断是否可以退出函数
  12.     select @start=1,@end=2,@status=0
  13.     while @start<>@end
  14.     begin
  15.         select @end=charindex(',',@string)
  16.         if @end=0
  17.         begin
  18.             select @status=@status+1
  19.             if @status=2
  20.             begin
  21.                 break
  22.             end
  23.             select @end=len(@string)+1
  24.         end
  25.         insert into @result values(substring(@string,@start,@end-1))
  26.         select @string=ltrim(stuff(@string,@start,@end,''))
  27.     end
  28.     return
  29. end
  30. go


然后你可以在where后面写形如:where columnname in(select * from SsrsMultiChoice(@variable))就行了。

接下来就是如何将数组转化为字符串。在转化前你还需要将这个参数设置成可以多选,这个做过SSRS的应该都知道

那我们就直接开始说将数组转化为字符串的步骤,你需要一个函数join即可。首先在左侧的Datesets里面右击你的数据集,然后选择Dateset Properties,再选择Parameters,你会看到你的参数。然后再你对应想传过去的参数右边点击fx也就是自定义函数的意思了。清除里面的内容后选择Join(variable,","),variable那里要选你自己的变量,注意形如=Join(Parameters!warehouse.Value,","),warehouse就是你自己的变量名,逗号就是数组间的值的分隔符。这个函数的作用就是将数组的各个值用你指定的分隔符连成一个字符串,如此便全部结束了。其它任务步骤都是多余的,或者说还有我不知道的另一种办法

阅读(3517) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~