我想写一个查询并允许对不同的列进行分组;例如,最终用户可以分组国家,地区,城市或没有分组 结果将用于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
答案 0 :(得分:2)
避免用户键入分组(请参阅@NeilP建议),只需创建一个名为Grouping
的参数,在Available Values
标签中可以指定下拉选择器值。
在“可用值”选项卡中,使用以下设置:
然后在数据集属性中将SSRS参数映射到T-SQL参数。
现在您可以在数据集中使用@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 + ';'
将提示用户在下拉列表中选择一个值:
您可以定义报告中使用的默认值,该值允许用户在不指定任何值的情况下运行报告。
转到Default Values
中的Parameter Properties
标签,如果您希望报告在默认情况下没有任何组运行,请添加=0
。
如果有帮助,请告诉我。
答案 1 :(得分:1)
答案 2 :(得分:0)
我会将它包装在存储过程中,然后从数据集中调用它
create proc report_1
@value varchar(200)
as
@sqlquery = 'select name '+@value+' from foo group by field1'+ @value + ';'
EXEC(@sqlquery);
在使用动态sql时,请注意SQL注入,建议您为下拉参数设置已定义的值列表,无论是静态还是通过查询列名称的信息架构。