动态传递SSRS数据集参数



我有一个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

最新更新