宁可逆流而上与众不同,也不顺风顺水随波逐流
分类: SQLServer
2018-06-30 21:26:51
由于在制作报表的过程中需要用到能多选的参数于是就有了今天这篇博文。
通常情况下单值参数我们只需要在where后面这样写where columnname=@variable即可,但是多值的时候却有些复杂。只要按照一下几步操作即可。在此之前,我需要先说明几点知识
多值参数在你选择后是以数组形式存储你所选择的参数的,但是数组是无法直接传递到你的语句里去的,与其这样说倒不如说是你根本不知道对方选择了多少值,所以直接传数组值是不妥当的,我的思路就是将所有值连接成字符串,然后再将字符串传递过去
但是字符串传递给语句之后也无法做筛选,这时候你需要一个函数能将字符串里的所有值提取出来,然后用in条件就可以了
我这里提供这样一个函数给你。当然,这个函数就是默认你的值的分隔符是逗号
然后你可以在where后面写形如:where columnname in(select * from SsrsMultiChoice(@variable))就行了。
接下来就是如何将数组转化为字符串。在转化前你还需要将这个参数设置成可以多选,这个做过SSRS的应该都知道
那我们就直接开始说将数组转化为字符串的步骤,你需要一个函数join即可。首先在左侧的Datesets里面右击你的数据集,然后选择Dateset Properties,再选择Parameters,你会看到你的参数。然后再你对应想传过去的参数右边点击fx也就是自定义函数的意思了。清除里面的内容后选择Join(variable,","),variable那里要选你自己的变量,注意形如=Join(Parameters!warehouse.Value,","),warehouse就是你自己的变量名,逗号就是数组间的值的分隔符。这个函数的作用就是将数组的各个值用你指定的分隔符连成一个字符串,如此便全部结束了。其它任务步骤都是多余的,或者说还有我不知道的另一种办法