【问题标题】:How to pass parameters conditionally in iReport?如何在 iReport 中有条件地传递参数?
【发布时间】:2013-12-06 06:54:28
【问题描述】:
有什么方法可以在iReport中有条件地添加参数吗?
在我的一份报告中,我想根据其值传递参数。以下为报表查询:
从学生中选择姓名、desi、班级
其中 class=$P{calss}
AND joinYear=$P{joinYear}
我只想在 joinYear 被传递的情况下添加 joinYear 条件,如果 joinYear 的值为空,则只应用一个条件。
有没有办法在 iReport 中查看报表查询的条件?
【问题讨论】:
标签:
jasper-reports
ireport
【解决方案1】:
你可以试试这个:-
SELECT name,
desi,
class
FROM student
WHERE (class=$P{calss} or $P{calss} is null )
AND (joinYear=$P{joinYear} or $P{joinYear} is null)
在这种情况下,您将传递的任何参数都只会在查询中传递该参数值。
【解决方案2】:
您可以尝试使用子报表。创建一个虚拟主报告,它将您的报告称为子报告,并带有类似的虚拟查询
select 1 as dummy
并添加一个变量,即。 $V{joinYearCond} 带表情
($P{joinYear} == "" || $P{joinYear} == null) ? "" : "and joinYear = " + $P{joinYear}
同时修改您的报告中的查询(现在是一个子报告)
select name,desi,class from student where class=$P{calss} $P!{joinYearCond}
对于参数$P{joinYearCond},传递$V{joinYearCond} 的值。它看起来不漂亮,但它会起作用。
【解决方案3】:
新建参数joinYear_query并设置为DEFAULT VALUE EXPRESSION
$P{joinYear}==null ? " true": " joinYear=".concat($P{joinYear}.toString())
然后
select name,desi,class from student where class=$!P{calss} AND $P!{joinYear_query}
您可以在以下位置查看更多详细信息:
Accepting null values as parameters in jasper report