2013-05-16 9 views
0

У меня есть табличный отчет SSRS 2008 с развернутой группой. Группа - это AssignedAnalystId. В базе данных и сервере доступен только AssignedAnalystId. У меня есть другая база данных на другом сервере, которая имеет таблицу с сопоставлением между AssignedAnalystId и фактическим именем (полное имя пользователя).Передача параметров набора данных SSRS «на лету»

Что я хочу сделать, так это передать в AssignedAnalystId на лету другому набору данных, как если бы это была скалярная функция, и получить полное имя пользователя для отображения в группе вместо AssignedAnalystId. Есть ли способ сделать это?

ответ

0

В идеале вы хотели бы присоединиться к таблицам в своем первоначальном запросе, но вы можете иметь два отдельных набора данных в своем отчете и использовать функцию поиска, чтобы делать то, что вам нужно. Функция Lookup выполняет 4 параметра; в вашем случае вы должны заполнить: поле Идентификатор из первого набора данных, поле Идентификатор из второго набора данных, поле имени пользователя из второго набора данных, имя набора данных. См. Статью 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 
+0

Мне нравится это решение. Еще одна вещь, которая была запрошена мной, - это ограничить отчет на основе перечня или массива. В SQL что-то вроде SELECT * FROM a WHERE a.b_Id IN (SELECT Id FROM c). Проблема, с которой я сталкиваюсь сейчас, заключается в том, что, хотя я создал хранимую процедуру, в которой я передаю определенный пользователем тип таблицы, я не могу передать ее в качестве параметра через Reporting Services. Кто-нибудь знает об этом? Я думал об использовании DataSet в качестве источника данных служб Reporting Services, но не нашел для этого последних примеров. –

+0

ОК, см. Мои правки. – StevenWhite

+0

Мне это нравится и думаю, что это сработает для меня. Было бы неплохо, если бы я мог передавать пользовательский тип таблицы, но на самом деле это лучше, потому что он более общий, и теперь я могу использовать функцию split в большем количестве мест. –

Смежные вопросы