简体版
繁体版
英文版

在报表中实现自定义统计计算

统计框与统计函数可以自动实现数据的统计分析,如求和,求平均,最大值、最小值与记数等。但某些特殊的统计要求并不能由统计框与统计函数的功能直接实现,如对某个字段中的不分满足条件的求和,按特定的运算规则计算统计数据等。这些特殊的要求使用Grid++Report都是可以实现的,下面就对实现这样的要求进行简单说明。

方式一: 采用计算字段方式

定义一个计算字段,给计算字段设上合理的值,然后对计算字段进行统计。

在报表的记录集中定义一个新的字段,这个字段与报表数据源的字段并不存在对应关系,其字段值在报表的 BeforePostRecord? 事件中根据条件求出,在这里称这样的字段为计算字段。假设计算字段的名称为“CalcField”,下面写出大致的 BeforePostRecord 事件程序代码:

void ReportBeforePostRecord()
{
if (#满足条件#)
Report.FieldByName("CalcField").AsFloat = #求出值#;
else
Report.FieldByName("CalcField").AsFloat = 0;
}

将满足统计条件记录的计算字段的值设上相应的数据,而将不满足统计条件记录的计算字段的值设0。应用统计框与统计函数对这个计算字段进行统计,就可以实现对满足条件的部分数据实现统计。

方式二: 在报表事件中自定义统计,最后替换统计框的统计值

这种方式采用在报表事件代码中计算出统计值,最后用计算出统计值替换统计框自动计算出来的值。一般是在报表的 GroupBegin 事件中设定统计初值,在 ProcessRecord 事件中根据条件与统计规则累计统计数据,最后在 GroupEnd 事件中给统计框设上自定义求出的统计值,下面写出大致的程序代码:

void ReportGroupBegin()
{
//变量
MyTotal记录统计值,这里首先设初值
MyTotal = 0;
}

void ReportProcessRecord()
{
//
这里累计统计,可以按自定义规则运算,可以取各个记录字段的当前值参与运算
MyTotal = MyTotal + ...;
}

void ReportGroupEnd()
{
//将变量
MyTotal赋给统计框
MySummaryBox.Value = MyTotal;
}

说明:

  1. 如果不存在分组,而是对所有记录数据进行一遍统计,应该在 ProcessBegin 事件中设统计初值,在 ProcessEnd 事件中给统计框设上自定义求出的统计值。
  2. 也可以用参数代替统计框,将自定义统计值赋给参数,参数的值可以用静态框或综合文本框进行展现。
  3. 例子 Advance\CustomSummary 中是用一个初值加上合计值求余额,所以不用进行自定义统计计算。
 
 

粤ICP备05037369号 Copyright © 2005-2015 rubylong.cn(版权所有:广州锐浪软件技术有限公司)
地址:广州市天河区五山路135号519-04室 电话: 020-82520837
EMAIL:sales@rubylong.cn(销售) support@rubylong.cn(技术支持) 销售QQ:1067004956 641243789