简介:了解 BIRT 扩展点模型,使用新的 V2.3+ 扩展模型在 BIRT 中创建基 本聚合扩展。
本文介绍商业智能和报告工具(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 操作,您将会返回总数/计 数操作。在正在运行的聚合器中,将只返回正在计算的值。
下一节的示例将展示如何创建一个简单的 Word Count 聚合器。此聚合获取一 列中的所有句子并计算字数,返回一个包含该列的字数的整数值。对这种聚合的 需求很少,所以还不存在这样的聚合。对于本文中的练习,建议使用 Eclipse BIRT All-in-One 分发版。
创建新聚合插件
要创建新聚合插件:
单击 File > New > Other 创建一个新插件项目。展开 Plug-In Development 文件夹,然后单 击 Plug-in Project。
在 New Plug-in Project 窗口中(如图 1 所示) ,在 ID 字段中为项目提供一个惟一名称,使用合适的信息完成 Version、Name 和 Provider 字段。
图 1. 项目属性