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( @para WHERE  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

 

转载于:https://www.cnblogs.com/fmc1983/archive/2011/08/29/JasonFan.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值