我的数据源有一列包含逗号分隔的数字列表。
我想要创建一个数据集,该数据集将这些数字转换为分组,以便在条形图中使用。
需求
你能提供的任何帮助都会很棒.我对BIRT很陌生,已经坚持了几天了
发布于 2014-04-04 07:13:16
不确定我是否确切地理解了这些需求,但您的基本问题“将数据集列拆分为多个行”可以使用脚本数据集解决,也可以使用纯SQL解决(取决于您的DB)。
无论哪种方式,您都需要第二个数据集(例如,您的数据模型是主细节,而在布局中您将需要类似的内容)。
表/列表“主表绑定到主表/列表”绑定到详细数据
detail需要将主DS中逗号分隔的结果列作为"String“类型的输入参数。
使用脚本数据集进行此操作非常容易,您了解Javascript,并且了解了脚本数据集的工作方式:创建一个类型为myValues的报告变量"myValuesIndex“,其默认值为null,第二个报表变量为整数类型的”myValuesIndex“,默认值为0。
(注:这都是未经测试的!)
将dataset "detail“创建为一个脚本化的DS,其中一个类型为String的输入参数"csv”和一个类型字符串的输出参数"value“。
在脚本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行,其值= "1”值= "2“值= "3-4”值= "foo“。
使用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也是可能的(参见相同的页面)。
发布于 2019-02-21 10:43:06
在已编写脚本的数据集中创建参数。在将脚本数据集赋值给Table之后,我们必须通过dataset参数绑定传递或链接实际的数据集到脚本数据集参数。
https://stackoverflow.com/questions/22848497
复制相似问题