2016-06-07 3 views
0

Кто-нибудь понял, как параметризовать или фильтровать sp_execute_external_script? Я хочу использовать это в отчете SSRS с фильтром даты, например. Решение, которое я нашел, использует временную таблицу, но я бы хотел найти более простое решение и более надежное решение. Цель состоит в том, чтобы удалить необходимость в таблице temp. Вот код:Отфильтровать отчет SSRS на основе хранимой процедуры R?

Declare @id nvarchar(3)='1' 

drop table if exists #TempTable 

select * into #TempTable from (
select 0 id,1234 as Col 
union 
select 1 id, 12 
union 
select 2 id, 985 
) as a1 
where [email protected] 


EXECUTE sp_execute_external_script 
@language = N'R', 
@script = N'OutputDataSet <- InputDataSet', 
@input_data_1 = N'select col from #TempTable' 
WITH RESULT SETS((columnName char (11))) 

Я считаю, что я мог бы поставить это в хранимой процедуре и использовать идентификатор в качестве параметра, а затем использовать это в SSRS. Но должен быть более простой способ. Я пробовал Dynamical sql-путь, и он не работает. Есть идеи?

ответ

1

Спасибо Umachandar. В вашем скрипте используется параметр внутри секции R хранимой процедуры. Чтобы использовать параметр для SSRS, мне нужно также фильтровать input_data.

Короче говоря, техникой является объявление переменных с помощью переменной @params, а затем для определения каждого параметра отдельно. Внутри секции R хранимой процедуры мы используем переменную без @. С другой стороны, внутри части инструкции SQL хранимой процедуры мы используем переменную с префиксом @ (см. Рисунок ниже).

Вы можете проверить это, выполнив этот код и просмотреть комментарии к изображению.

Declare @id nvarchar(3)='2' 
Declare @anInteger int=17 


drop table if exists #TempTable 

select * into #TempTable from (
select 0 id,0 as Col 
union 
select 1 id, 100 
union 
select 2 id, 200 
union 
select 3 id, 300 
) as a1 


EXECUTE sp_execute_external_script 
@language = N'R' 
, @script = N'ThisIsThe_result <- ThisIsThe_inputSQL*aParamCalled_ID+aParamCalled_ID2' 
, @input_data_1 = N'select col from #TempTable where id in(@aParamCalled_ID,1)' 
, @input_data_1_name = N'ThisIsThe_inputSQL' 
, @output_data_1_name = N'ThisIsThe_result' 
, @params=N'@aParamCalled_ID int, @aParamCalled_ID2 int' 
, @aParamCalled_ID= @id 
, @[email protected] 


WITH RESULT SETS((columnName char (11))) 

Вот комментарии:

How to creates parameters on both the SQL statement and R code

0

Самый простой способ указать параметр - включить параметр или переменную в текст команды в отчете. Выполните следующие действия:

  1. Создайте процедуру в своем db, которая содержит вызов sp_execute_external_script SP. Вы также можете использовать sp_execute_external_script. например:

    создать процедуру sqlr_test_sp (@input целое) , как начать Exec sp_execute_external_script @language = N'R '@script = N'OutputDataSet < - as.data.frame (вход);', @ input_data_1 = N '', @params = N '@ input int', @input = @input; конец; go

  2. В отчете SSRS добавить ниже текст команды для набора данных. Например, построитель отчетов автоматически создает параметр «@input». Вы можете установить значение по умолчанию, и такие из свойств параметров

    Exec sqlr_test_sp @input

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