我有一个SSRS 2008表格报告,其中有一个下钻组by。这个组是AssignedAnalystId。在数据库和服务器中,只有AssignedAnalystId可用。我在另一台服务器上有另一个数据库,该数据库具有AssignedAnalystId与实际名称(完整用户名)之间的映射表。
我想做的是能够在飞行中传递assigndanalystid到其他数据集,就好像它是一个标量函数,并获得完整的用户名显示在组中,而不是AssignedAnalystId。有办法做到这一点吗?
理想情况下,您希望在初始查询中连接这些表,但是您可以在报表中使用两个独立的数据集,并使用Lookup函数来执行所需的操作。Lookup函数有4个参数;在您的情况下,您将填写:ID字段从第一个数据集,ID字段从第二个数据集,用户名字段从第二个数据集,数据集的名称。有关更多信息,请参阅MSDN文章:http://msdn.microsoft.com/en-us/library/ee210531.aspx
过滤数据的一个好方法是使用Split函数。将SSRS参数设置为逗号分隔的值,甚至为多值,然后您可以使用下面的表值函数将其转换为查询中使用的临时表:
CREATE FUNCTION Split (@origString varchar(max))
returns @temptable TABLE (items varchar(max))
as
begin
declare @idx int
declare @split varchar(max)
set @idx = 1
if datalength(@origString )<1 or @origString is null
return
while @idx <> 0
begin
set @idx = charindex(',', @origString)
if @idx <> 0
set @split = left(@origString, @idx - 1)
else
set @split = @origString
if(datalength(@split) > 0)
insert into @temptable(Items) values(ltrim(rtrim(@split)))
set @origString = right(@origString, datalength(@origString) - @idx)
if datalength(@origString) = 0
break
end
return
end
那么你的查询可以包含像这样的东西作为过滤器:
SELECT *
FROM Table1 as T1
INNER JOIN Split(@SSRScsvParameter) as T2 on T1.ID = T2.ID