Reporting Services 2008 多值参数查询

本文介绍Microsoft Reporting Services 2008中实现多值参数查询的方法,通过设置参数允许多个值、创建处理参数值的函数及T-SQL查询,实现了客户经理按客户级别筛选信息的需求。

  众所周知,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

 

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值