【问题标题】: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

      【讨论】:

        猜你喜欢
        • 2011-09-13
        • 1970-01-01
        • 1970-01-01
        • 2020-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多