2013-12-13 46 views
1

我已经看遍了各处,如果可能的话,似乎找不到任何东西,所以我就到了这里。无论如何,这是我的问题。根据BIRT中的另一个表更改表值

我有一个计算,每月特殊群体的平均调查分数查询,输出是这样的:

GRP1 71.2 
GRP2 77.2 
GRP3 81.6 

现在我不得不与越来越像基于这些点值,一些标准的另一个表:

min_value max_value  point 
    95   100   80 
    85   94   60 
    75   84   40 
    65   74   20 

基本上意味着95-100应该得到80分,等等,这是动态的(在我的应用程序可以更改这些值或添加/删除行用户),所以我想了标签上编写脚本第一张桌子,查找第二张桌子,比较它的最小值和最大值。不过,我环顾四周,没有看到如何做到这一点。我想以某种方式将数据集转换为可以循环遍历的对象列表,以便我可以比较每行的值,但我不知道如何执行此操作。

编辑:我发现了一种方法,但它涉及我加入第二个表格的第一,然后设置,以便在成绩不是最小值和最大值之间的行不显示的可见性属性。不过,我对这种效率感到怀疑,所以我想知道是否有更好的方法。

回答

0

在“编辑数据集”做一个“计算列”

这里的JavaScript的〔实施例我使用了simular的问题,但我是一个数转换为字串。

if (row["Change Assessment"]==1){ 
"Very High" 
}else if (row["Change Assessment"]==2){ 
"High" 
}else if (row["Change Assessment"]==3){ 
"Low" 
}else if (row["Change Assessment"]==4){ 
"Very Low" 
}else { 
"Undefined"} 
0

最有效,最简单的方法是做这在你的数据库的存储过程:我们按月存储在临时表中的汇总调查,然后我们把它加入到最小 - 最大表。

对于BIRT的解决方案而已,我们可以创建一个数据集的加入:

  • 添加一个虚构的列,其值始终为“1”(或任何恒定值,你喜欢...),以每的2个现有数据集。
  • 创建这2个数据集之间的一个新的“加盟的数据集”,并使用我们的虚构栏链接他们,使我们得到了一个“笛卡尔积”
  • 在加入数据集的“过滤器”选项卡中,添加一个新的过滤器选择具有min-max之间的调查得分的行
  • 就是这样!
1

你不必显示来自第二表数据,对不对?该表只是定义了值边界。如果是这样,您可以通过在绑定到第二个数据库表的报表中添加一个不可见表格来预加载JavaScript对象中第二个表格的数据。该表格项目必须位于显示第一个表格的数据的报表项目之前。

您必须编写JavaScript中位:

  • 创建2个数据集:每个db表
  • 一个添加绑定到第二个数据集
  • 表使这个表不可见:属性编辑器 - >可见性选项卡。该表是那里只是从数据库使所述第二数据集加载数据
  • 创建beforeOpen()事件句柄第二数据集
  • 在beforeOpen定义一个新的全局变量()脚本:gValueMapping = [];此变量将保持二维数组:[第二表的大小] [2]
  • 创建onFetch()的事件处理程序的第二数据集
  • 添加当前行值,以全局变量gValueMapping:gValueMapping.push( [row [“min_value”],row [“point”]])。如果您按min_value排序第二个数据集,则不需要知道max_value。
  • 现在创建绑定到所述第一表中的表中的新数据绑定
  • 程序的结合如下:在以相反的顺序的gValueMapping迭代直到电流值小于在gValueMapping [I] [0的值],然后返回gValueMapping [i] [1]。它包含相应的“点”值。
相关问题