计算数据集中列的总和

时间:2014-07-29 12:55:16

标签: jasper-reports

我对数据集有以下查询:

select item, sum(salesAmount) as TotalSales from sales
group by item
order by TotalSales desc;

我已将REPORT_COUNT< = 5设置为仅将数据限制为5条记录。

现在,我希望通过列表组件显示前5项,将销售额按百分比显示为前5项的TotalSales数量。

我试图在数据集中创建一个变量

sales_sum
class: BigDecimal
Calculation : Sum
Reset Type : Report
Increment Type : None
Variable Expression : $F{TotalSales}

但是sales_sum随着列表中的每一行递增。因此给出了不准确的价值 为百分比。我该怎么办?

1 个答案:

答案 0 :(得分:0)

这是因为sales_sum变量的评估时间,因为据我所知这个变量正在计算行和,即第一行总和将与TotalSales值相同然后第二行总和将是TotalSales的第一个值和第二个值等等,所以你将获得1st%总是100。

要更改此评估时间属性,请选择您使用sales_sum变量的字段,例如销售百分比,然后转到该字段的属性并将评估时间属性更改为: -

             Evaluation Time    Auto

第二种解决方案: -

 SELECT a.item,a.TotalSales, (a.TotalSales/a.Total) * 100 as Total_Perc
 FROM
 (select item,
        sum(salesAmount) as TotalSales,
         (select sum(salesAmount) as TotalSales from sales
          order by TotalSales desc
          limit 5) Total
 from sales
 group by item
 order by TotalSales desc
 limit 5) a;