2016-12-12 39 views
1

我有7个报告,全部使用相同的查询,除了where子句中的一行。我如何将这些结合到1个报告中,并根据所选的报告类型更改该行。SSRS 2016 - 根据参数选择更改SQL的一部分

代码示例 从言论中选择a.remark在其中a.code(:rpt_parm)

:rpt_parm有7个选项,但我似乎无法得到查询接受我把值的列表该值或使用返回列表的数据集。

注意我使用SSRS 2016与VS2015和Oracle数据库连接。

+0

有办法做到这一点。我们需要查看所有SQL和参数选项才能提供帮助。 –

+0

@WesPalmer我真的很想做的是从备注中选择a.remark a:rpt_parm但是我可以避开上面的问题。报告类型为POU备注,POD备注等,并且将具有('P100','P105',P0110')或('P200','P205','P210')等的值...如何正确地将该列表放入查询的值字段以使用它? – SnowXTC

回答

0

我按列表的方式假设你是用逗号分隔的列表吗?

从SSRS报告中,最好的方法是将参数列表传递给存储过程。它将被接受为单值字符串。在存储过程中,您需要将字符串拆分为一个字符串表,然后根据字符串值字段使用该表加入查询的其余部分。

0

你可以改变你的查询简单地接受报告类型像这样(MS-SQL ...很抱歉没有一个Oracle实例踢左右):

declare @report_type int; 
select * 
from remarks a 
where (@report_type = 'POU Remarks' and a.remarks in ('P100', 'P105', 'P0110')) 
or  (@report_type = 'POD Remarks' and a.remarks in ('P200', 'P205', 'P210')) 
or  ...; 
+0

您是否必须为查询执行单独的存储过程? – SnowXTC

+0

只有你想要。查询可以嵌入报告中的数据集中。我们通常会为每个报告创建一个过程,以便让我们更容易地发现dba,如果我们发现需要调整,但很多人只是嵌入查询。多个报告将使用相同的查询时使用共享数据集。 – SMM

0

https://dataqueen.unlimitedviz.com/2013/10/how-to-use-a-delimited-string-in-a-multi-valued-parameter/

这工作真棒。逗号分隔的字符串在参数中的每个选项的值中,然后在查询的参数部分中使用分隔函数。

我承认我对SSRS相当陌生,在年底之前我们正在严肃的时间紧缩下将100个Discoverer报告转换为SSRS。但是我的编程强迫症让我想要尽可能正确地做到这一点。

我非常感谢帮助。

否定以上,它只返回第一个值列表中的

0

我不知道我理解的问题正确,但我给它一个镜头。

我想你可以有一个表helper两列,optionvalue。对于每个选项,您拥有的行数与该选项的值相同。 (所以一个值可能会出现多次 - 有多次使用该值的选项)。

然后,您只输入选项编号,如:option。您的查询应该是:

... where a.code in (select value from helper where option = :option) 

如果性能是一个问题,你可以将索引上option。这应该比任何基于逗号分隔字符串的解决方案更好地工作。

相关问题