BIRT中的可选多值参数

时间:2015-06-02 16:08:44

标签: birt

我有一个BIRT报告,有4个可选参数。 开始日期;结束日期; stringparam和listparam(多值参数)。

我跟着"蓝色"此链接上的代码How do I set a parameter to a list of values in a BIRT report?

如果我将一个或全部值赋给参数,它就可以工作。但是,当我将参数留空时,我得到一个空白报告(结果不正确)。

这是我的疑问:



select f1,f2,f3,f4
where f1 >= ?    -- startdate parameter
or f2 <= ?       -- endate paramter
or f4 = ?        -- stringparam
and ( f3 in (''/*?listparam*/) ) 
&#13;
&#13;
&#13;

我确实在我的Oracle数据库上查询了什么参数传递给我的查询我得到了&#39; NULL&#39;当我将参数值保留为空时,作为VALUE_STRING。

感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

听起来你想偶尔在参数中的4个标准中的一到三个中搜索记录。

有几种方法可以做到这一点:

一种方法是使用like,并将默认参数值设置为%即外卡。当参数运行时,它返回所有值。请注意,如果字段包含null,则可能会出现问题。

or f4 like ?  

所以你需要使用类似于下面的东西来返回空值。

or (f4 is null
      or f4 like ?)

我通常更喜欢使用“All”作为我的默认参数值,正如您在第二个“和”中看到的那样,我们查看参数值是否为All,如果返回的是PRODUCTTYPEM1.CATEGORY的所有值,如果是其他任何内容,则在字段PRODUCTTYPEM1.CATEGORY中查找输入的值。

where PRODUCTTYPEM1.ACTIVE = 't'
 and DEVICE2M1.ISTATUS = 'In Use'
 and ( 'All' = ? 
  or PRODUCTTYPEM1.CATEGORY = ?)

为此,您将需要两个参数条目,第一个用于全部,第二个用于除All之外的任何值。

enter image description here

我在报告中只有一个Category参数,如果参数值不是All,则第二个条目第二次查看相同的参数

这种方式有效。 (按要求扩充说明

打开where语句,以及“使用中”的简单第二个标准

where PRODUCTTYPEM1.ACTIVE = 't'
 and DEVICE2M1.ISTATUS = 'In Use'

第三个标准是在括号中设置的两个部分,其中OR语句将两部分分开

 and ( 'All' = ? 
  or PRODUCTTYPEM1.CATEGORY = ?)

如果参数的值为All,则满足语句的第一部分,查询将跳过括号中的所有其他内容。就像你的SQL查询中没有参数一样。

如果参数的值为 NOT all,则不满足语句的第一部分,因此查询将在字段PRODUCTTYPEM1.CATEGORY中查找参数值。

你的最终查询可能看起来像这样,虽然它的问题在于我们的默认日期为“全部”,你可能想要使用某种日期作为默认值,如1900年1月1日。

select f1,f2,f3,f4
where f3 in (''/*?listparam*/) 
AND (  'All' = ? 
      OR f1 >= ?)    -- startdate parameter
AND ( 'All' = ? 
      OR f2 <= ?)       -- endate paramter
AND ( 'All' = ? 
      OR f4 = ?)      -- stringparam