Jasper reports 从Ireport调用时如何在过程中调用和添加条件?
我已经使用Ireport 4.5创建了一个报告,但报告运行速度非常慢,我想这是因为有多个联合和联接 我复制了一个简单的查询以进行测试:-Jasper reports 从Ireport调用时如何在过程中调用和添加条件?,jasper-reports,ireport,Jasper Reports,Ireport,我已经使用Ireport 4.5创建了一个报告,但报告运行速度非常慢,我想这是因为有多个联合和联接 我复制了一个简单的查询以进行测试:- SELECT b.Project_Id, b.Project_Manager, b.project_title, b.Project_location, b.Project_Level, SUM(COALESCE(b.Project_Budget, 0)) Projected,
SELECT b.Project_Id,
b.Project_Manager,
b.project_title,
b.Project_location,
b.Project_Level,
SUM(COALESCE(b.Project_Budget, 0)) Projected,
SUM(COALESCE(c.Accounting, 0)) Actual
FROM t_authorized_budget a, t_project_c b,t_project_allocation c
WHERE a.Project_Id = b.Project_Id and b.project_id=c.`Key`
and a.Project_Id = c.`Key`
and $X{IN,b.project_location,p_project_location}
and $X{IN,b.project_manager,p_project_manager}
and $X{IN,b.project_id,p_project_id};
因此,我使用这个查询创建了一个过程调用GetAllcompo(),但没有
$X{IN,b.project_location,p_project_location}
and $X{IN,b.project_manager,p_project_manager}
and $X{IN,b.project_id,p_project_id};
现在我试图在从Ireport调用时在过程中添加这些条件。
我该怎么做呢?您需要使用该程序吗?我通过添加另一个参数来实现这一点。首先,提示用户定义您使用的WHERE子句的类型:
$P{PROJECT_PROMPT}
然后使用定义WHERE子句的默认表达式创建第二个参数($p{PROJECT_SQL_DEF}):
$P{PROJECT_PROMPT} == 'SHORT' ?
" ' a.Project_Id = b.Project_Id
and b.project_id=c.Key
and a.Project_Id = c.Key '" :
" ' a.Project_Id = b.Project_Id and b.project_id=c.`Key`
and a.Project_Id = c.`Key`
and $X{IN,b.project_location,p_project_location}
and $X{IN,b.project_manager,p_project_manager}
and $X{IN,b.project_id,p_project_id} ' "
在您的查询中:
SELECT b.Project_Id,
b.Project_Manager,
b.project_title,
b.Project_location,
b.Project_Level,
SUM(COALESCE(b.Project_Budget, 0)) Projected,
SUM(COALESCE(c.Accounting, 0)) Actual
FROM t_authorized_budget a, t_project_c b,t_project_allocation c
WHERE $P!{PROJECT_SQL_DEF}
另一个想法——如果你把null传递给$X{…,它等于1=1。那么如果你使用完整的WHERE子句,只是不把参数传递给$X{…?我认为如果我们不把任何参数传递给$X{},意味着所有的值都没有任何WHERE条件。你认为呢?是的,它就像“和$X”{IN,b.project_location,p_project_location}”替换为“and 1=1”。它将为您提供所有b.project_location值。