我想使用 BIRT 创建报告。我有 5 个 SQL 标准作为报告的参数。通常,当我有 3 个条件时,我会使用嵌套的 if-else 作为带有 javascript 的 WHERE 语句。
由于现在我有更多的标准,因此编写代码并检查可能性变得更加困难,特别是出于调试目的。
例如表员工的条件,有这 5 个条件:年龄、城市、部门、职称和教育程度。所有条件都是动态的,您可以将其留空以显示所有内容。
有谁知道这种方法的替代方法?
有一种神奇的方法可以处理这个问题,无需任何脚本,这使得报告更容易维护!我们可以使用这样的 SQL 查询:
SELECT *
FROM mytable
WHERE (?='' OR city=? )
AND (?=-1 OR age>? )
AND (?='' OR department=? )
AND (?='' OR title=? )
因此,每个条件都有两个数据集参数,其中“OR”子句允许在参数获取特定值、空值或空值时忽略条件。所有这些“OR”子句都使用常量值进行评估,因此查询的性能不会受到影响。
在此示例中,我们应该有 4 个报告参数、8 个数据集参数(每个报告参数绑定到 2 个数据集参数)和 0 个脚本。查看使用此方法的报告的实时示例here http://www.visioneo.org/interactive-birt-table.
如果还有更多标准,我建议使用存储过程,因此我们可以对每个标准仅使用一个数据集参数来执行相同的操作。
整数参数处理
如果我们需要处理整数列的“全部”值,例如年龄:我们可以将报告参数“age”声明为字符串类型,将数据集参数“age”声明为整数。然后,在数据集的参数选项卡中使用值表达式而不是“链接到报告参数”。例如,如果我们喜欢处理“所有”、“null”和空值的稳健输入,则需要输入以下表达式:
(params["age"].value=="all" || params["age"].value=="" || params["age"].value==null)?-1:params["age"].value
可以下载样本报告here http://www.visioneo.org/documents/10179/129221/visioneo-interactive-table.rptdesign/5426b058-10cc-4785-852e-590c8d6f1ead(4.3.1 版)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)