使用 Eclipse BIRT 扩展点:聚合
2010-03-30 00:00:00 来源:WEB开发网本文介绍商业智能和报告工具(Business Intelligence and Reporting Tools,BIRT)扩展点模型,并在 BIRT V2.3.x 和 V2.5.x 中实际创建一个聚合扩展。在较早的 BIRT 版本中,创建聚合扩展的方式是扩展 org.eclipse.birt.data.aggregation 扩展点,这会在一个名为 Total 的全局对象中添加一个小函数,您可以在整个报告的任何表达式中使用该函数,其工作原理类似于脚本函数扩展点。
但是,从 BIRT V2.2 到 V2.3,聚合扩展已经发生了变化。新的方式更加复杂,但可以在 Aggregation Widgets 下拉列表中得到一个不错的聚合,还为参数和表达式提供了漂亮的文本框。当创建此扩展时,可以在您的表中以列绑定的形式访问结果。
从总体上看,新的聚合扩展点包含一个对象,该对象是 IAggregationFactory 接口的扩展。可以在此接口中重载方法来完成 3 项操作:
初始化您的工厂(在构造函数中)
提供由工厂提供的一组聚合(以列表形式提供,包含聚合对象的实际实例)
返回聚合对象的单一实例
聚合的每个实例都需要实现 IAggrFunction 接口。需要实现许多含义明显的方法,比如 getName、getDataType 和 getParmaeterDefn,还需要实现其他含义不太明显的方法。例如,getNumberOfPasses() 和 getType() 方法是相关的。getType() 方法制定此聚合器的执行方式和类型。有两种聚合类型:SUMMARY_AGGR 表示只为摘要计算该聚合(比如表的表头或表尾),RUNNING_AGGR 表示为表中的每一行或表尾计算聚合。getNumberOfPasses() 方法显示获得结果所需的 pass 数。所有基于评级的聚合器,比如 TopNpercent、PercentSum 和 Percentile,都会返回值 2,其余聚合器返回值 1。
IAggrFunction 接口的实际实现必须返回其 newAccumulator() 方法中的 Accumulator 类的一个扩展。Accumulator 负责执行实际的计算。有一些默认方法需要重载,最重要的是 onRow(),表中的每一行都需要调用该方法。使用此方法,您可以解析函数的参数并执行计算。对于 SUM,可以添加到某个已存储的数字;对于 ave,既可以保存到某个列表中进行存储,也可以添加到一个累计总计并跟踪调用次数。无论您如何执行计算,实际计算都需要在这里完成。getValue() 获取您的计算的最终值或当前值。所以,对于 SUM 操作,您将会返回总数/计数操作。在正在运行的聚合器中,将只返回正在计算的值。