我有一个查询,每行返回40行有number_of_bugs_closed和closed_date。 closed_date值暴怒 从五月和六月开始。
现在我必须在JasperReports中创建3个报告图表
我们可以使用单个查询结果数据创建这3个图表,还是创建了3个不同的查询?
是否可以通过使用某种脚本或其他方式在jasper中进行?
答案 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用于每周图表。
您可以在月度图表中使用类似的方法。
我希望,我能够解释这些概念。