Jasper reports jasper报表中的动态查询

Jasper reports jasper报表中的动态查询,jasper-reports,Jasper Reports,我们正在使用jaspersoft studio创建一个报告,我被困在查询部分。 从逻辑上讲,我想要的查询类型是: select * from mytable where IF (condition1) raw_sql_part_1 ELSE raw_sql_part_2 现在,为了在“查询编辑器对

我们正在使用jaspersoft studio创建一个报告,我被困在查询部分。 从逻辑上讲,我想要的查询类型是:

select * from mytable where
                    IF (condition1)
                              raw_sql_part_1
                    ELSE
                              raw_sql_part_2
现在,为了在“查询编辑器对话框”中实现这一点,我写道:

select * from mytable where $P!{param1}
并在表达式编辑器中添加“param1”默认值为:

"$P{param2}.equals("A") ?  "1 <> 1" :"1=1" , is 'For prompting' as false
问题1:我的预期错了吗

Q2:为什么param2不用于解析param1中定义的条件?


我们使用的是Jaspersoft studio 6.1.1版

事实上,我不认为您可以基于另一个参数的值对一个参数设置
defaultValueExpression
,但是如果参数在jrxml中的顺序是正确的,它似乎可以工作

范例

<parameter name="param1" class="java.lang.String">
    <defaultValueExpression><![CDATA["A"]]></defaultValueExpression>
</parameter>
<parameter name="param2" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{param1}.equals("A") ?  "1 <> 1" :"1=1"]]></defaultValueExpression>
</parameter>

请参阅此处了解更多信息:

,我定义参数的顺序是正确的,即先声明param2,然后声明param1(param1计算条件)。。。很抱歉,我们实际上尝试了使用
$P!{param1}
。。修正了问题中的打字错误。。。。当你说它在你方有效时,它是否根据param2对条件的两侧进行评估?…在我们的情况下,无论我们为param2给出什么值,我们的条件总是根据param2的默认值进行评估,它有效!!我犯的错误是,在jasper studio预览窗口中运行报告之前,我一直在单击“重置”按钮,这看起来很像“运行”按钮,但实际上它清除了值。无论如何,感谢您的帮助。感谢您的接受,我说它似乎起作用,因为使用这样的参数似乎有点奇怪。。。。。为什么不直接将正确的值传递给param2。。。。注意:最终客户端不应使用iReport(通常)。。。
<parameter name="param1" class="java.lang.String">
    <defaultValueExpression><![CDATA["A"]]></defaultValueExpression>
</parameter>
<parameter name="param2" class="java.lang.String" isForPrompting="false">
    <defaultValueExpression><![CDATA[$P{param1}.equals("A") ?  "1 <> 1" :"1=1"]]></defaultValueExpression>
</parameter>
select * from mytable where $P!{param1}