Набор данных SSRS имеет два запроса T-SQL. Один запрос будет выполняться только в том случае, если определенный параметр имеет два или более значений. Другой запрос будет выполняться только в том случае, если параметр имеет только одно значение. Как я могу позволить набору данных знать, было ли выбрано одно значение или несколько значений из параметра?Отчеты SSRS - множественные выборки Определение нескольких запросов
ответ
Вы можете создать addional целочисленный параметр, называемый NumberOfValues
, установите его, чтобы быть hidden
и использовать выражение, как ниже в Значение по умолчанию:
=Parameter!YourMultipleValueParam.Value.Count
Затем в наборе данных можно использовать параметр NumberOfValues
для определения числа значений, выбранных в YourMultipleValueParam
параметра.
IF @NumberOfValues > 1 BEGIN ....
Хороший вопрос. Вот один из способов, который я нашел вокруг этого.
Шаг 1: В свойствах вашего набора данных перейдите на вкладку «Параметры». Добавьте параметр со следующим выражением, заменив MyParameterName
на имя вашего параметра.
=join(Parameters!MyParameterName.Value,",")
Шаг 2: Если вы уже не один, добавить функцию расщепления ваших функций SQL Server. Простой поиск в Google приведет вас к чему-то вроде этого: Split function equivalent in T-SQL?
Шаг 3: Выберите количество параметров, используемых в отчете SSRS. На основании результата, делать то, что требуется: (Моя функция расщепления просто называется Split)
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from Devl.dbo.Split(@MyParameterName,',')) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
EDIT: Альтернативы шаги 2 и 3, если вы не хотите (или не может) создать/использовать функцию split.
Шаг 2: В вашем главном запросе в верхней части, включают в себя следующее (в основном в версии в режиме он-лайн функции сплит)
declare @string varchar(max), @delimiter char(1)
declare @temptable table (items varchar(max))
set @string = @MyParameterName
set @delimiter = ','
declare @idx int, @slice varchar(max)
select @idx = 1
if len(@String)<1 or @String is null return
while @idx!= 0
begin
set @idx = charindex(@Delimiter,@String)
if @idx!=0
set @slice = left(@String,@idx - 1)
else
set @slice = @String
if(len(@slice)>0)
insert into @temptable(Items) values(@slice)
set @String = right(@String,len(@String) - @idx)
if len(@String) = 0 break
end
Шаг 3: Выберите подсчет параметров используется в отчете SSRS. На основании результата, делать то, что требуется: (Моя функция расщепления просто называется Split)
IF (select count(*) from @temptable) = 1
BEGIN
/* Do your second query here, when one parameter is selected */
END
IF (select count(*) from @temptable) > 1
BEGIN
/* Do your first query here, when more than one parameter is selected */
END
Я понимаю все, кроме функции split. Где я могу написать функцию? Я добавляю его в основной набор данных (тот, у которого два запроса), набор данных параметра или я помещаю его в новый набор данных? –
Ни одна из функций (https://msdn.microsoft.com/en-us/library/ms186755.aspx) не добавляется в базу данных (думаю, SSMS, а не через службы отчетов). Как только он находится в базе данных, вы можете использовать его в своих запросах. Если у вас нет доступа, чтобы добавить его в базу данных, я изменю шаг 2, чтобы включить встроенное решение, которое вы можете просто добавить в начало запроса. –
Хотя в решении Matt H нет ничего плохого, я бы выбрал решение Алехандро, поскольку он использует функции SSRS для определения количества выбранных значений параметра. После того, как вы добавили параметр, предложенный Алехандро, в вашем наборе данных вы можете просто изменить свой набор данных, чтобы читать IF @MyNewParameter> 1 BEGIN .... ваш многозначный запрос ... END ELSE. НАЧАТЬ ваш запрос с одним значением END. (извинения за отсутствие разрывов строк) –
- 1. LINQ - множественные вложенные выборки
- 2. Множественные выборки для подсчета
- 3. Как экспортировать отчеты SSRS 2011 CRM как отчеты SQL-запросов, а не отчеты fetchXML?
- 4. SSRS и кешированные отчеты
- 5. Просверлить отчеты в SSRS
- 6. Отчеты SSRS с DateFormat
- 7. Отчеты SSRS с querystring
- 8. Отчеты SSRS, групповая фильтрация
- 9. Связанные с SSRS отчеты
- 10. Отчеты диспетчера отчетов SSRS
- 11. Отчеты SSRS Источник данных
- 12. Непрерывные отчеты в ssrs
- 13. Отчеты SSRS - запрос параметров
- 14. Пользовательские отчеты с SSRS
- 15. Фильтры SSRS Множественные значения
- 16. Как создать множественные выборки программно
- 17. C# DataGridView множественные выборки перезаписываются
- 18. Mysql хранимые процедуры множественные выборки
- 19. Множественные выборки с помощью Influxdb
- 20. SSRS- суммирование из нескольких запросов/строк подробностей?
- 21. Как идентифицировать все отчеты SSRS
- 22. Заголовок наклонной колонки - отчеты SSRS
- 23. активные отчеты и сравнение ssrs
- 24. Отчеты SSRS в ASP.NET 5
- 25. Не удается открыть отчеты SSRS
- 26. Отчеты SSRS с параметрами datetime
- 27. Плановые отчеты SSRS не работают
- 28. создавать отчеты динамически в SSRS
- 29. Передвижные отчеты ssrs ad hoc
- 30. ввод кода на отчеты ssrs
Вы можете создать addional целочисленный параметр, установите его, чтобы быть ** скрыт ** и использовать выражение, как это в качестве значения по умолчанию: 'Параметр YourMultipleValueParam.Value.Count' затем в наборе данных, вы можете использовать скрытый параметр для определения количества значений, выбранных в параметре 'YourMultipleValueParam'. –
Хорошо, что я пишу в главном наборе данных, чтобы определить, какой запрос нужно использовать? Будет ли что-то вроде IF (@YourMultipleValueParam> 1) и (@YourMultipleValueParam = 1) в порядке? –
Я имею в виду, что у вас есть два, которые создают дополнительный скрытый параметр в SSRS и используют его для передачи числа выбранных значений в набор данных. Поэтому, если вы укажете скрытый параметр как 'NumberOfValues', вы должны использовать' IF (@NumberOfValues> 1) 'в SQL. –