如何使用单个查询结果数据创建多个图表

时间:2015-07-22 13:00:39

标签: jasper-reports

我有一个查询,每行返回40行有number_of_bugs_closed和closed_date。 closed_date值暴怒 从五月和六月开始。

现在我必须在JasperReports中创建3个报告图表

  1. 每天显示已关闭错误数量的图表。
  2. 每周显示已关闭错误数量的图表。
  3. 图表显示每个月的已关闭错误数。
  4. 我们可以使用单个查询结果数据创建这3个图表,还是创建了3个不同的查询?

    是否可以通过使用某种脚本或其他方式在jasper中进行?

2 个答案:

答案 0 :(得分:0)

我希望您可以在查询中使用某种日期检查。 像

这样的东西
  

may和jun之间的日期

而是创建两个参数,例如 $P{TimeCheck} $P{TimeRange}

其中, $ P {TimeCheck} 参数将用于 查询中进行时间比较 和参数 $ P { TimeRange} 将用于派生参数$ P {TimeCheck} 的值。为不同的图表传递不同的 $ P {TimeRange} ,同时映射参数,例如,图表 $ P {TimeRange} ='月' 图表, $ P {TimeRange} ='周' 每日图表, $ P {TimeRange} ='所有'

参数 $ P {TimeCheck} 应具有以下表达式 "$P{TimeRange} == 'week' ? 'date in (startdate or enddate of everyweek)' : $P{TimeRange} == 'month' ? 'date in (startdate or enddate of every month)' : 'date between may and jun'"

现在在where条件中将此参数用作 where $P!{TimeCheck}

注意:不要使用主查询。尝试创建数据集并使用查询。

我希望这可以解决你的问题。

答案 1 :(得分:0)

最好为每个图表使用不同的数据集。或者您可以使用相同的数据集,但这将很难开发。您可以使用以下步骤尝试此操作:

您需要在SQL查询中添加列(比如周数)并计算此列的日期的周数。喜欢选择周(你的日期)给你周数。

现在,数据集中有三列包含周数。

如果您在Jasper Charts中使用week_number作为类别,它将为您提供图表,但其值不匹配。

原因:jasper为列number_of_bugs_closed添加值,但也将其除以week_number。 例如:第一周你有两行。然后它将计算并将其除以2。

这意味着你需要另一个列(例如week_number_of_bugs_closed),它是week_number和number_of_bugs_closed数的倍数。

要计算week_number的数量,您需要进行一次联接,该联接将为您提供该特定周的总天数。

您可以参考下面显示查询结构的查询。

select a.*,b.week_count, week_number_of_bugs_closed * b.week_count as week_value from
(select xyz.number_of_bugs_closed , xyz.closed_date ,week(closed_date)         as week_number from xyz) a
join 
(select week(closed_date) week_number, count(*) as week_count from xyz group by week(closed_date) ) b  on 
     a.week_number = b.week_number

现在,您可以将类别week_number及其值作为week_value用于每周图表。

您可以在月度图表中使用类似的方法。

我希望,我能够解释这些概念。