Reporting Services 2008 多值参数查询

  众所周知,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】查询客户信息。

1 SELECT [CustomerId],[Name],[Level]
2 FROM [Customer] C
3 WHERE C.Level IN (SELECT * FROM dbo.ufn_SplitStrToTab(@para))
4     OR EXISTS(SELECT * FROM dbo.ufn_SplitStrToTab(@paraWHERE Id = '-1')

(六)结果展示。

附: 上文中使用的SQLServer函数--ufn_SplitStrToTab

 

 1 CREATE FUNCTION [dbo].[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

 

posted @ 2011-08-29 00:19  忘战则危  阅读(1691)  评论(5)    收藏  举报