SSRS中的动态查询

时间:2016-11-02 15:26:44

标签: reporting-services dynamic-sql

我想写一个查询并允许对不同的列进行分组;例如,最终用户可以分组国家,地区,城市或没有分组 结果将用于ssrs报告中。

所以我会写一个这样的查询:

@value = CASE WHEN @dropdown=1 THEN ', foo.country' ELSE ', foo.region'

@sqlquery = 'select name '+@value+' from foo group by field1'+ @value + ';'

EXEC(@sqlquery);

这在管理工作室中可以正常工作(如果我定义变量并将某些内容分配给@dropdown );

我对如何在ssrs报告中实现这一点感到有些不知所措:我希望用户能够选择不分组(让@value为空) Visual Studio将无法看到'该字段因此允许将其添加到Tablix

3 个答案:

答案 0 :(得分:2)

避免用户键入分组(请参阅@NeilP建议),只需创建一个名为Grouping的参数,在Available Values标签中可以指定下拉选择器值。

enter image description here

在“可用值”选项卡中,使用以下设置:

enter image description here

然后在数据集属性中将SSRS参数映射到T-SQL参数。

enter image description here

现在您可以在数据集中使用@Grouping

set @value = CASE WHEN @Grouping = 1 THEN ', foo.country' 
                  WHEN @Grouping = 2 THEN ', foo.region'
                  WHEN @Grouping = 3 THEN ', foo.city'
                  ELSE ''
             END

set @sqlquery = 'select name '+@value+' from foo group by field1'+ @value + ';' 

将提示用户在下拉列表中选择一个值:

enter image description here

您可以定义报告中使用的默认值,该值允许用户在不指定任何值的情况下运行报告。

转到Default Values中的Parameter Properties标签,如果您希望报告在默认情况下没有任何组运行,请添加=0

如果有帮助,请告诉我。

答案 1 :(得分:1)

试试这个:
1.创建参数GroupBy
enter image description here

  1. 创建数据集。不要直接将您的查询写入框中,而是使用表达式 enter image description here

  2. 写下你的查询:
    enter image description here

  3. 我认为你可能需要尝试调整你的查询表达式一段时间,但它应该是要走的路。祝你好运。

答案 2 :(得分:0)

我会将它包装在存储过程中,然后从数据集中调用它

create proc report_1 
@value varchar(200)
as
@sqlquery = 'select name '+@value+' from foo group by field1'+ @value + ';'
EXEC(@sqlquery);

在使用动态sql时,请注意SQL注入,建议您为下拉参数设置已定义的值列表,无论是静态还是通过查询列名称的信息架构。