Jasper reports 从Ireport调用时如何在过程中调用和添加条件?

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,

我已经使用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,
      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值。