Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
Добрый день!

Подскажите, кто сталкивался с такой проблемой. В SSRS создал отчет. Добавил Multi-Value параметр, чтобы в отчете можно было выбрать сразу нескольких пользователей. Проблема в том, при выборе более одного пользователя, в SQL передается значение вида:

‘User_1, User_2’

А нужно естественно такого вида:

‘User_1’, ‘User_2’, ..., чтобы использовать в процедуре .... where @param in (‘User_1’, ‘User_2’).

?
10 апр 17, 15:21    [20385412]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
IDVT
Member

Откуда:
Сообщений: 309
... @param in (‘User_1’, ‘User_2’). 
Это как? процедура отбирает значение параметра в параметрах?

Мне кажется вам достаточно поменять листинг в ХП'шки

Select P1
From Table
Where p1 in (@param)
10 апр 17, 15:24    [20385423]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
IDVT, сорри, конечно же:

where param in (@param)

т.е.

where User_Id in ('User_1','User_2')
10 апр 17, 15:33    [20385484]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
IDVT

Мне кажется вам достаточно поменять листинг в ХП'шки

Select P1
From Table
Where p1 in (@param)

"листинг в ХП'шки" - не совсем понятно, что имеется ввиду.
10 апр 17, 15:42    [20385552]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
IDVT
Member

Откуда:
Сообщений: 309
Ну так и пишите в запросе, обернув параметр в скобки, это часть листинга.

... where User_Id in (@ParametrName)
10 апр 17, 15:42    [20385555]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
IDVT, вот Вы о чем..

Это понятно. Неудачно получилось объяснить, без указания оригинального кода ((...

Проблема не в этом. Еще раз, SSRS, при использовании Multi-Value параметра возвращает значение ('Ivanov,Petrov'), мне нужно - ('Ivanov','Petrov').
Сталкивались с подобным?
10 апр 17, 15:56    [20385657]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
IDVT
Member

Откуда:
Сообщений: 309
В таком случае, в ХП'шки сделать парсер строки, сам запрос собирать в динамическом SQL (Exec)
10 апр 17, 16:30    [20385843]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
IDVT, да, я уже пытаюсь переделать через динамический SQL. Но пока не совсем все гладко.
10 апр 17, 17:06    [20385992]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
IDVT, пытался сообразить через динамический SQL. Ничего не получилось. Честно говоря я не очень силен в этой динамике.

Должны же быть более менее простые стандартные варианты?!
10 апр 17, 18:14    [20386305]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Дедушка
Member

Откуда: Город трёх революций
Сообщений: 5112
Corei3
возвращает значение ('Ivanov,Petrov'), мне нужно - ('Ivanov','Petrov').
declare @t varchar(100) = 'Ivanov,Petrov,Sidorov'
select '''' + replace(@t, ',', ''',''') + ''''
или я чего не понял?
10 апр 17, 20:39    [20386708]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5625
Не нужна здесь никакая динамика, просто обычный сплит строки, и джойн с результатом:
create function dbo.uf_SplitString(@StringToSplit varchar(4000), @SplitChar varchar(10))
returns table
as return
with StringToSplit as (
  select
    0 n,
    ltrim( rtrim( substring( @StringToSplit, 1, charindex( @SplitChar, @StringToSplit ) - 1 ) ) ) Head
    , substring( @StringToSplit, charindex( @SplitChar, @StringToSplit ) + 1, len( @StringToSplit ) ) Tail
  union all
  select
    n+1,
    ltrim( rtrim( substring( Tail, 1, charindex( @SplitChar, Tail ) - 1 ) ) ) Head
    , substring( Tail, charindex( @SplitChar, Tail ) + 1, len( Tail ) ) Tail
  from StringToSplit
  where charindex( @SplitChar, Tail ) > 0
  union all
  select
    n+1,
    ltrim( rtrim( Tail ) ) Head
    , '' Tail
  from StringToSplit
  where charindex( @SplitChar, Tail ) = 0
  and len( Tail ) > 0
)
select n, Head piece from StringToSplit
go

declare
  @values varchar(20) = 'A, B, C, D, E, F';
declare
  @t table (s varchar(1));
insert into @t values ('A'), ('B'), ('C'), ('D'), ('E'), ('F'), ('G'), ('H'), ('I'), ('J');
select t.s
from dbo.uf_SplitString(@values, ', ') f
join @t t on t.s=f.piece
11 апр 17, 06:20    [20387420]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
IDVT
Member

Откуда:
Сообщений: 309
Corei3
IDVT, пытался сообразить через динамический SQL. Ничего не получилось. Честно говоря я не очень силен в этой динамике.

Должны же быть более менее простые стандартные варианты?!


Разумеется есть, по сути это единственное правильное решение, но это обычно приводит к дополнительным действиям в сопровождении.... Вот пример решения Вашей задачи без использования парсеров и тем более временных таблиц.

Ваш параметр будет иметь следующий листинг:

="'" + Join( Parameters!ParametrName.Label, "','") + "'"


Но я до сиз пор не понимаю зачем Вам это =)
11 апр 17, 08:44    [20387568]     Ответить | Цитировать Сообщить модератору
 Re: Настройка Multi-Value параметра в SSRS  [new]
Corei3
Member

Откуда:
Сообщений: 76
Всем спасибо!

Решил проблему через временную таблицу.
30 май 17, 14:55    [20523744]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить