众所周知,Microsoft Reporting Service 2008(简称RS)是一个轻量级客户端报表展示产品。本文是对该产品中【查询参数】的应用案例之一,主要内容是实现RS的多值参数查询。最终实现的效果图如下:

下面详细介绍背景、业务场景及实现过程。
-
背景。系统中记录了某公司所有【客户】的信息,并根据往来交易情况为每一个客户设定了【级别】{有效客户、重点客户、VIP客户},其中有一部分客户未设定级别,则为NULL。

-
业务场景。客户经理需要根据【客户级别】的不同值,过滤并查询客户信息,并且可以忽略【客户级别】查看所有客户。
-
具体实现。
关键点1.设置RS参数的数据类型为【允许多个值】。此时,该参数不支持NULL值,也就是在查询时必须选择参数列表中的一个值。
关键点2.当RS参数的数据类型为【允许多个值】时,其参数值为Object类型的数组,需要添加一个临时参数对数组进行处理,并在T-sql中使用该临时参数对客户进行筛选。
(一)向报表添加查询参数【客户级别】。

(二)设置【可用值】和【默认值】。此时,【默认值】为【全部】,为了实现业务场景中所述:忽略【客户级别】查询所有客户。

(三)新增临时参数【para】处理参数【客户级别】的值。步骤:新建参数,可用值为【无】、默认值为指定值=Join(Parameters!CustLevel.Value,",")
(四)创建函数ufn_SplitStrToTab,处理【para】,目的是拆分“,”分割的字符串。例如,【para】=“1,2,3”,则函数返回

(五)T-sql根据参数【para】查询客户信息。
2 FROM [Customer] C
3 WHERE C.Level IN (SELECT * FROM dbo.ufn_SplitStrToTab(@para))
4 OR EXISTS(SELECT * FROM dbo.ufn_SplitStrToTab(@para) WHERE Id = '-1')
(六)结果展示。


附: 上文中使用的SQLServer函数--ufn_SplitStrToTab
2 @Ids nvarchar(4000)
3 )
4 RETURNS @tab TABLE (Id INT)
5 BEGIN
6
7 DECLARE
8 @Id nvarchar(4000)
9 ,@N int
10 ,@N2 int
11
12 SET @N2 = 1
13 SET @N = 0
14 SET @Ids = @Ids + ','
15
16 WHILE @N <> len(@ids)
17 BEGIN
18 SET @N = charindex(',',@ids,@N2)
19 SET @Id = substring(@ids,@n2,@N-@N2)
20 INSERT INTO @tab VALUES ( CONVERT (INT , @id ) )
21 SET @N2 = @N + 1
22 END
23 RETURN
24
25 END
本文介绍Microsoft Reporting Services 2008中实现多值参数查询的方法,通过设置参数允许多个值、创建处理参数值的函数及T-SQL查询,实现了客户经理按客户级别筛选信息的需求。
46

被折叠的 条评论
为什么被折叠?



