我的报告的数据集为:
选择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个字段中进行选择,并且不希望将每个字段设置为参数。
提前致谢!
答案 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)