我的报告的目的是检查以给定列名作为参数的空值。
问题在于它没有将我的参数从报表传递到数据集。我有一个名为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
时)。此外,如果我输入无效的列名作为参数,则报表将正常执行。我本以为会引发错误,但不会。
感谢您的输入-如果需要更多说明,我可以进行编辑/评论
答案 0 :(得分:0)
想出了一个解决方案-如果是正确的解决方案,则不是肯定的。
我认为,如果要尝试动态构建其查询,则必须使用表达式。
在传递诸如WHERE Age > @ageParam
之类的过滤器时,常规参数传递将起作用
如果执行类似我正在尝试的操作(值相同,但列更改),则应构建一个表达式,如下面的屏幕快照所示。
我的表情的最终价值
="Select * from Employee WHERE " & Parameters!employeeField.Value & "= 'foo' "
答案 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...