向Reporting Services报告添加where条件

时间:2011-04-17 22:16:16

标签: reporting-services

我的报告的数据集为:

选择Field1,Field2,Field3,... FieldN 从记录 customers.customer_id = records.customer_id

上的内部联接客户

在报告服务中,我如何以编程方式添加 - “其中Field3 ='SomeData'”

还是我必须将我的SQL更改为 - 选择Field1,Field2,Field3,... FieldN 从记录 customers.customer_id = records.customer_id上的内部联接客户 其中Field3 = @ Field3Parameter

并在运行时设置我的参数?

我想让我的客户能够从超过100个字段中进行选择,并且不希望将每个字段设置为参数。

提前致谢!

2 个答案:

答案 0 :(得分:0)

您可以在SQL中进行,参数化,如您所建议的那样,或者在Tablix中作为过滤条件。我更喜欢参数化的SQL,将@parameter设置为报表参数值,因为它的性能会更好。我通常遵循这种模式:

SELECT
    c.Field1
    , c.Field2
    , r.Field3
    , ...
FROM
    records r
JOIN
    customers c ON c.customer_id = r.customer_id
WHERE
    ((@Field1Parameter IS NULL) OR (c.Field1 = @Field1Parameter)) AND
    ((@Field2Parameter IS NULL) OR (c.Field2 = @Field2Parameter)) AND
    ((@Field3Parameter IS NULL) OR (r.Field3 = @Field3Parameter)) ...

这允许您将报表参数保留为可空或具有默认值NULL的“全部”选项。我意识到你不想创建参数,但如果你使用2008年报告,它将自动从你的SQL创建参数列表。你仍然需要创建报告参数,我认为没有办法解决这个问题。

答案 1 :(得分:0)

  

“我想让我的客户拥有   能够从超过100的选择   字段,不想要设置   每个都作为参数。“

客户如何选择当前的字段?如果这是一个固定的要求,你几乎停留在过滤器或参数(如Cory指出)或构建动态SQL,这会产生自己的问题。

另一个选择:根据业务逻辑的复杂程度,您可以使用包含相关项的几个多选参数,并在存储过程中实现检查。例如,有一个多选参数,如下所示,并在存储过程中拉出客户选择的选项并在WHERE子句中实现它们。你得到了与Cory提到的相同的结果,但减少了参数。

Multi-select Parameter
-----------------------
Include Widgets
Include Completed Sales
Include West Coast 
(lots more options)