如何将birt数据集列拆分为多行

时间:2014-04-03 20:38:08

标签: birt business-intelligence actuate

我的数据源有一个包含以逗号分隔的数字列表的列。

我想创建一个数据集来获取这些数字并将其转换为分组以在条形图中使用。

要求

  1. 数字将介于0-17之间
  2. 分组:0-2,3-5,6-10,11-17
  3. x轴标签必须是分组
  4. y轴是包含该分组的行的百分比
    • 请注意,因为每行可以贡献多个列,所以百分比可以累加到> 100%
  5. 你能提供的任何帮助都会很棒......我对BIRT很新,并且已经坚持了几天了

2 个答案:

答案 0 :(得分:1)

不确定我是否完全理解了这些要求,但您的基本问题是将数据集列拆分为多行"可以使用脚本数据集或纯SQL(取决于您的数据库)来解决。

无论哪种方式,您都需要第二个数据集(例如,您的数据模型是主要细节,在您的布局中,您将需要类似

的内容

表/列表"主人绑定到主DS     表/列表"详细信息"绑定到详细信息DS

详细信息DS需要来自主DS的逗号分隔结果列作为类型​​"字符串"的输入参数。

使用脚本数据集执行此操作非常简单IFF您了解Javascript并了解脚本数据集的工作原理:创建报表变量" myValues"类型对象的默认值为null和第二个报告变量" myValuesIndex"类型为整数,默认值为0.

(注意:这都是未经测试的!)

创建数据集" detail"作为脚本化的DS,带有一个输入参数" csv" String类型和一个输出参数"值" String类型。

在脚本化DS的开放事件中,代码:

  vars["myValues"] = this.getInputParameterValue("csv").split(",");
  vars["myValuesIndex"] = 0;

在fetch事件中,代码:

  var i = vars["myValuesIndex"];
  var len = vars["myValues"].length;
  if (i < len) {
    row["value"] = vars["myValues"][i];
    vars["myValuesIndex"] = i+1;
    return true;
  } else {
    return false;
  }

例如,对于带有csv =&#34; 1,2,3-4,foo&#34;的主DS结果行,详细信息DS将产生4行   值=&#34; 1&#34;   value =&#34; 2&#34;   值=&#34; 3-4&#34;   value =&#34; foo&#34;

使用Oracle DB,可以在没有Javascript的情况下完成。详细信息DS(具有与上面相同的输入参数)将如下所示:

  select t.value as value from table(split(?)) t

有关分割功能的定义,请参阅RedFilter的答案 Is there a function to split a string in PL/SQL?

如果你得到ORA-22813,你应该改变原来的定义

  create or replace type split_tbl as table of varchar2(32767);

  create or replace type split_tbl as table of varchar2(4000);

https://community.oracle.com/thread/2288603?tstart=0

所述

使用regexp_substr在11g中使用纯SQL也是可能的(参见同一页)。

答案 1 :(得分:0)

在脚本化数据集中创建参数。将脚本数据集分配给Table之后,我们必须通过DataSet参数绑定将实际数据集值传递或链接到脚本数据集参数。