1

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

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

4

1 回答 1

0

理想情况下,您希望在初始查询中加入表,但您可以在报表中有两个单独的数据集,并使用 Lookup 函数来完成您需要的操作。Lookup 函数有 4 个参数;在您的情况下,您将填写:第一个数据集的 ID 字段,第二个数据集的 ID 字段,第二个数据集的用户名字段,数据集的名称。有关详细信息,请参阅 MSDN 文章:http: //msdn.microsoft.com/en-us/library/ee210531.aspx

过滤数据的一个好方法是使用拆分函数。将您的 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
于 2013-05-16T20:23:28.033 回答