传递列名时,报表参数不起作用

时间:2018-07-06 17:42:53

标签: sql sql-server reporting-services ssrs-2012

我的报告的目的是检查以给定列名作为参数的空值。

问题在于它没有将我的参数从报表传递到数据集。我有一个名为class SalesRepById { SalesRepById(...) { ... } @Override public Map<String, ObjectImplementation> parse() { try { Class<? extends ObjectImplementation> typeFromFile = Class.forName(...).asSubclass(ObjectImplementation.class); ObjectImplementation instance = typeFromFile.getConstructor().newInstance(); ... } } 的报告参数。在我的数据集的“参数”部分中,我将@employeeField设置为ParameterName,并将值设置为@employeeField

查询我的数据集的示例:

[@employeeField]

这也是它在运行时评估的结果(当我将文本框设置为SELECT top 100 employeePK from Employees WHERE @employeeField is null时)。此外,如果我输入无效的列名作为参数,则报表将正常执行。我本以为会引发错误,但不会。

感谢您的输入-如果需要更多说明,我可以进行编辑/评论

2 个答案:

答案 0 :(得分:0)

想出了一个解决方案-如果是正确的解决方案,则不是肯定的。

我认为,如果要尝试动态构建其查询,则必须使用表达式

在传递诸如WHERE Age > @ageParam之类的过滤器时,常规参数传递将起作用

如果执行类似我正在尝试的操作(值相同,但列更改),则应构建一个表达式,如下面的屏幕快照所示。

我的表情的最终价值

="Select * from Employee WHERE " & Parameters!employeeField.Value & "= 'foo' "

Expression Button

答案 1 :(得分:0)

不可能使用字段名作为参数来动态更改查询。 要达到您想要的目的,您将必须使用多个替代(OR)条件构建WHERE子句:

SELECT top 100 employeePK from Employees 
WHERE (@employeeField = 'Field1' AND Field1 IS NULL)
   OR (@employeeField = 'Field2' AND Field2 IS NULL)
   OR (@employeeField = 'Field3' AND Field3 IS NULL)
   -- ... and so on...