我的数据源有一列包含逗号分隔的数字列表。
我想创建一个数据集,将这些数字转换为分组以在条形图中使用。
要求
- 数字将介于 0-17 之间
- 分组:0-2,3-5,6-10,11-17
- x 轴标签必须是分组
- y 轴是包含该分组的行的百分比
- 请注意,因为每行可以贡献到多个列,所以百分比加起来可以大于 100%
你能提供的任何帮助都会很棒......我对 BIRT 很陌生,现在已经坚持了几天
我的数据源有一列包含逗号分隔的数字列表。
我想创建一个数据集,将这些数字转换为分组以在条形图中使用。
你能提供的任何帮助都会很棒......我对 BIRT 很陌生,现在已经坚持了几天
不确定我是否完全理解要求,但您的基本问题“将数据集列拆分为多行”可以使用脚本数据集或纯 SQL(取决于您的数据库)来解决。
无论哪种方式,您都需要第二个数据集(例如,您的数据模型是主从数据,在您的布局中,您将需要类似
表/列表“主绑定到主 DS”表/列表“详细”绑定到详细 DS
细节 DS 需要来自主 DS 的逗号分隔的结果列作为“字符串”类型的输入参数。
如果您了解 Javascript 并且您了解脚本数据集的工作原理,则使用脚本数据集执行此操作非常容易:创建一个默认值为 null 的对象类型的报表变量“myValues”和一个整数类型的第二个报表变量“myValuesIndex”默认值为 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"价值=“富”
使用 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所述
在 11g 中使用 regexp_substr 也可以使用纯 SQL(参见同一页)。
在脚本数据集中创建参数。在将脚本化数据集分配给 Table 之后,我们必须通过 DataSet 参数绑定将实际数据集值传递或链接到脚本化数据集参数。