报告问题

问题描述:

我正在研究需要生成包含数据网格数据的报告(包括多个动态过滤器)的应用程序。我的筛选目前从SQL查询中得到一个结果集,导致以下问题:我无法将筛选器发送到SSRS或Crystal报表的多个位置,因为它不会让我将字段绑定到动态生成的查询。报告问题

这是我的问题:是否有任何方法可以在where语句中创建具有无限条件的报表,或者使用dynamic where子句创建存储过程,以便我可以将它与CR或SSRS一起使用?如果没有,是否有任何报告引擎可以让我在where子句中连接该过滤器?

注意:我正在使用C#4.0以及SQL Server 2008 Express(安装了SSRS)和Crystal Reports for Visual Studio 2010库。

后在Crystal Reports多一些挖,我发现用命令和参数就可以到WHERE语句的一部分连接成的查询,这在一定程度解决了我的问题。这不是报告应该如何完成的,所以我会尽力找到一个更干净的方式来做到这一点。在一个存储过程的情况下,SSRS不支持这个,你必须让整个查询成为一个你执行的字符串,然后从该存储过程结果中查询,就好像它是一张表,坦白地说这不值得麻烦。

一个简单的技巧,以增加它们被定义时,过滤器对您的WHERE子句中添加以下代码:

where (@param is null or @param = field) 

所以,当@param未定义(空),则未应用滤镜。你可以建立一个较长的where子句,如:

where (@param1 is null or @param1 = field1) 
    and (@param2 is null or @param2 = field2) 
    and (@param3 is null or @param3 = field3) 
    and (@param4 is null or @param4 = field4) 
    ... 
+0

这将不起作用,因为没有定义参数的数量。一个用户只能在一个字段上过滤,而另一个用户可以很好地使用5个以上的过滤器。我不认为有一个for循环为报表中的每个参数生成这个循环都很干净。 – 2012-07-16 15:10:06

+0

你的意思是“未定义参数的数量”?它必须在报告中定义,否则用户将无法选择要应用的过滤器。 – 2012-07-16 15:23:58

+0

这就是我的意思,用户是定义过滤器的用户,我需要使用用户在那个时候拥有的过滤器过滤报告,例如来自过滤数据网格的wysiwyg报告。在Crystal Reports或SSRS中可以这样做吗? – 2012-07-16 18:38:03