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

问题描述 投票:1回答:2

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

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

要求

  1. 数字将介于0-17之间
  2. 分组:0-2,3-5,6-10,11-17
  3. x轴标签必须是分组
  4. y轴是包含该分组的行的百分比 请注意,因为每行可以贡献多个列,所以百分比可以加起来> 100%

你能提供的任何帮助都会很棒...我对BIRT很新,并且已经坚持了几天了

birt business-intelligence actuate
2个回答
1
投票

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

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

表/列表“主要绑定到主表DS表/列表”详细信息“绑定到详细信息DS

详细信息DS需要来自主DS的逗号分隔结果列作为“String”类型的输入参数。

使用脚本数据集执行此操作非常简单IFF您了解Javascript并了解脚本数据集的工作原理:创建类型为object的报表变量“myValues”,其默认值为null,第二个报表变量“myValuesIndex”类型为integer默认值为0。

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

将数据集“detail”创建为脚本化DS,其中一个输入参数为“csv”,类型为String,另一个输出参数为“value”,类型为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 =“1,2,3-4,foo”的主DS结果行,详细信息DS将产生4行,其中value =“1”value =“2”value =“3-4” value =“foo”

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

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

有关split函数的定义,请参阅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也是可能的(参见同一页面)。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.