我有一份SSRS 2008表格报告,其中包含一个向下钻取组。 group by是AssignedAnalystId。在数据库和服务器中,只有AssignedAnalystId可用。我在另一台服务器上有另一个数据库,该数据库的表具有AssignedAnalystId和实际名称(完整用户名)之间的映射。
我想要做的是能够将AssignedAnalystId动态传递给其他数据集,就像它是一个标量函数一样,并获得要在组中显示的完整用户名而不是AssignedAnalystId。有没有办法做到这一点?
答案 0 :(得分:0)
理想情况下,您可能希望在初始查询中加入表,但您可以在报表中使用两个单独的数据集,并使用查找功能执行所需操作。 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