2017-02-09 13 views
1

Набор данных SSRS имеет два запроса T-SQL. Один запрос будет выполняться только в том случае, если определенный параметр имеет два или более значений. Другой запрос будет выполняться только в том случае, если параметр имеет только одно значение. Как я могу позволить набору данных знать, было ли выбрано одно значение или несколько значений из параметра?Отчеты SSRS - множественные выборки Определение нескольких запросов

+1

Вы можете создать addional целочисленный параметр, установите его, чтобы быть ** скрыт ** и использовать выражение, как это в качестве значения по умолчанию: 'Параметр YourMultipleValueParam.Value.Count' затем в наборе данных, вы можете использовать скрытый параметр для определения количества значений, выбранных в параметре 'YourMultipleValueParam'. –

+0

Хорошо, что я пишу в главном наборе данных, чтобы определить, какой запрос нужно использовать? Будет ли что-то вроде IF (@YourMultipleValueParam> 1) и (@YourMultipleValueParam = 1) в порядке? –

+0

Я имею в виду, что у вас есть два, которые создают дополнительный скрытый параметр в SSRS и используют его для передачи числа выбранных значений в набор данных. Поэтому, если вы укажете скрытый параметр как 'NumberOfValues', вы должны использовать' IF (@NumberOfValues> 1) 'в SQL. –

ответ

2

Вы можете создать addional целочисленный параметр, называемый NumberOfValues, установите его, чтобы быть hidden и использовать выражение, как ниже в Значение по умолчанию:

=Parameter!YourMultipleValueParam.Value.Count 

Затем в наборе данных можно использовать параметр NumberOfValues для определения числа значений, выбранных в YourMultipleValueParam параметра.

IF @NumberOfValues > 1 BEGIN .... 
0

Хороший вопрос. Вот один из способов, который я нашел вокруг этого.

Шаг 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 
+0

Я понимаю все, кроме функции split. Где я могу написать функцию? Я добавляю его в основной набор данных (тот, у которого два запроса), набор данных параметра или я помещаю его в новый набор данных? –

+0

Ни одна из функций (https://msdn.microsoft.com/en-us/library/ms186755.aspx) не добавляется в базу данных (думаю, SSMS, а не через службы отчетов). Как только он находится в базе данных, вы можете использовать его в своих запросах. Если у вас нет доступа, чтобы добавить его в базу данных, я изменю шаг 2, чтобы включить встроенное решение, которое вы можете просто добавить в начало запроса. –

+0

Хотя в решении Matt H нет ничего плохого, я бы выбрал решение Алехандро, поскольку он использует функции SSRS для определения количества выбранных значений параметра. После того, как вы добавили параметр, предложенный Алехандро, в вашем наборе данных вы можете просто изменить свой набор данных, чтобы читать IF @MyNewParameter> 1 BEGIN .... ваш многозначный запрос ... END ELSE. НАЧАТЬ ваш запрос с одним значением END. (извинения за отсутствие разрывов строк) –

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

  • Нет связанных вопросов^_^