在不同的表格/数据集上重复使用报告的最佳方法是什么?
我在BIRT中构建了许多报告,这些报告从一个平坦的(未规范化的)MySQL表中获取数据,而这些数据又从excel表中导入。
在BIRT中,我构建了这样的查询,以便我可以更改字段名称并重新使用报告:
SELECT * FROM
(SELECT index as "Index", name as "Name", param1 as "First Parameter" FROM mytable) t
然而,当我切换到新客户端的数据时,我需要将查询更改为新的数据源,这似乎不可持续或在任何接近良好实践的地方。
所以...... 什么是好的做法?
令人讨厌的是excel表不断变化 - 添加了新列,不同的客户端以不同的方式命名数据。即使我可以将其标准化,我也会将不同的客户数据存储在不同的表中......那么我是否需要为每个客户创建不同的报告,或者将表名传递给报告?
答案 0 :(得分:2)
有两种方式,您选择的路径实际上取决于您在架构上的灵活性。
首先,通过将所选列重命名为通用名称,您处于正确的轨道,因为该名称是用于将数据绑定到报表上的控件的名称。您是否考虑过存储过程来访问数据?这将从报表中删除查询,并允许您在任何数据库上设置存储过程以返回必要的列。如果无法卸载到存储过程,则始终可以依赖于在运行时更改查询文本。由于BIRT报告未编译(它们是XML),您可以根据参数更改查询,并在每次运行设计时执行。查看数据集的onCreate
事件,您可以访问this.queryText
并通过JavaScript执行所需的任何动态字符串替换。隐藏参数是帮助更改/调整查询的好方法。如果正确构建数据集,则更改基础数据可能就像更改数据源,然后将数据集重新关联到新数据源(在编辑数据集窗口中)一样简单。我做了很多次,效果很好。如果您沿着这条路线前进,我会将数据源,数据集以及它们提供数据的任何控件添加到报告库中。使用库,您可以在许多报告中使用控件并将它们保存在一个位置。如果更新库,则使用库的所有报告也会更新。
或者,如果您想真正提交一个完全可重用的策略,允许您构建可重用组件库,您可以在BIRT Exchange(Reusable Component Library)查看免费的可重用组件库。在我看来,这个策略会让你重复使用,但却以可维护性为代价。它是抽象的混淆点。它需要完全通用的列和控件名称,这使得调试变得非常困难。虽然它不是我的第一选择(上面的选项),但其他人已成功使用它,所以我想我会把它包括在这里,因为它直接说明你的问题。