【问题标题】:Filter a SSRS report based on a R stored procedure?根据 R 存储过程过滤 SSRS 报告?
【发布时间】:2016-06-07 10:49:04
【问题描述】:

有没有人想出如何对 sp_execute_external_script 进行参数化或过滤?例如,我想在带有日期过滤器的 SSRS 报告中使用它。 我找到的解决方案使用临时表,但我想找到一个更简单的解决方案和更可靠的解决方案。 目标是消除对临时表的需要。 代码如下:

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 id=@id


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)))

我相信我可以将它放入一个存储过程并使用 id 作为参数,然后将它用于 SSRS。但必须有更简单的方法。我已经尝试过Dynamical sql方式,但它不起作用。有任何想法吗?

【问题讨论】:

    标签: r reporting-services sql-server-2016


    【解决方案1】:

    谢谢乌马昌达。您的脚本在存储过程的 R 部分中使用了一个参数。为了使用 SSRS 的参数,我还需要过滤 input_data。

    简而言之,该技术是使用@params 变量声明变量,然后分别定义每个参数。在存储过程的 R 部分中,我们使用不带 @ 的变量。另一方面,在存储过程的SQL语句部分,我们使用以@为前缀的变量(请看下图)。

    您可以通过运行此代码并查看图片上的 cmets 来进行测试。

    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 
    , @aParamCalled_ID2=@anInteger
    
    
    WITH RESULT SETS((columnName char (11)))
    

    这里是cmets:

    【讨论】:

      【解决方案2】:

      指定参数的最简单方法是在报告的命令文本中包含参数或变量。执行以下操作:

      1. 在您的数据库中创建一个包含 sp_execute_external_script SP 调用的过程。您也可以直接使用 sp_execute_external_script。例如:

        创建过程 sqlr_test_sp (@input int) 作为 开始 exec sp_execute_external_script @language = N'R', @script = N'OutputDataSet

      2. 在 SSRS 报告中,添加以下内容作为数据集的命令文本。例如,报表生成器将自动创建名为“@input”的参数。您可以从参数属性中设置默认值等

        执行 sqlr_test_sp @input

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多