【问题标题】:Optional Multi-Value parameter in BIRTBIRT 中的可选多值参数
【发布时间】:2015-06-02 16:08:44
【问题描述】:

我有一个包含 4 个可选参数的 BIRT 报告。 开始日期;结束日期; 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*/) ) 

我对我的 Oracle 数据库进行了查询,以查看传递给我的查询的参数是什么,当我将参数值留为空白时,我得到了 'NULL' 作为 VALUE_STRING。

感谢任何帮助。

【问题讨论】:

    标签: birt


    【解决方案1】:

    听起来您想偶尔搜索参数中 4 个条件中的一到三个条件的记录。

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

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

    or f4 like ?  
    

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

    or (f4 is null
          or f4 like ?)
    

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

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

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

    我在报告中只有一个 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
    

    【讨论】:

    • 很抱歉,因为 Java 和 BIRT 对我来说是新手,所以我在收到您的建议时有点慢。我不明白 BIRT 或 SQL 如何以及在何处评估“All”参数值以返回表中的所有值?所以我确实按照上面的建议设置了参数和查询,当我运行没有参数值的报告时 - 我得到了空白页报告。和以前一样的问题。
    • 我已经扩展了答案。您是否在查询中添加了其他参数?尝试简化您的报告,以便您在研究如何使用空参数从数据中获取结果时只使用一个参数。我不熟悉您的数据,但我怀疑您可能希望将 SQL 查询中出现的两次 OR 更改为 AND。
    • ('All' = ? .....) 明白了.....谢谢你的解释。是的,我确实添加了额外的数据集参数并将其链接到我的报告的相同报告参数 f3。
    • 对不起....仍然是空的结果。是的,我确实为每个 AND('All' = ? OR f1 >= ?)的每个报告参数创建了 2 个数据集参数。一个有趣的发现是,当我将 f3 字段从 where 子句中取出时……我对您的最新更改有正确的结果。当我把 f3 放回 where 子句时......空报告。
    猜你喜欢
    • 2014-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多