即时传递SSRS数据集参数

时间:2013-05-16 19:45:33

标签: sql-server ssrs-2008

我有一份SSRS 2008表格报告,其中包含一个向下钻取组。 group by是AssignedAnalystId。在数据库和服务器中,只有AssignedAnalystId可用。我在另一台服务器上有另一个数据库,该数据库的表具有AssignedAnalystId和实际名称(完整用户名)之间的映射。

我想要做的是能够将AssignedAnalystId动态传递给其他数据集,就像它是一个标量函数一样,并获得要在组中显示的完整用户名而不是AssignedAnalystId。有没有办法做到这一点?

1 个答案:

答案 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