如何将 birt 数据集列拆分为多行
Posted
技术标签:
【中文标题】如何将 birt 数据集列拆分为多行【英文标题】:How do I split birt dataset column into multiple rows 【发布时间】:2014-04-03 20:38:07 【问题描述】:我的数据源有一列包含逗号分隔的数字列表。
我想创建一个数据集,将这些数字转化为分组以在条形图中使用。
要求
-
数字将介于 0-17 之间
分组:0-2,3-5,6-10,11-17
x 轴标签必须是分组
y 轴是包含该分组的行的百分比
请注意,由于每行可以贡献多列,因此百分比加起来可以达到 > 100%
你能提供的任何帮助都会很棒......我对 BIRT 很陌生,现在已经坚持了几天
【问题讨论】:
【参考方案1】:不确定我是否完全理解要求,但您的基本问题“将数据集列拆分为多行”可以使用脚本数据集或纯 SQL(取决于您的数据库)来解决。
无论哪种方式,您都需要第二个数据集(例如,您的数据模型是主从数据,在您的布局中,您需要类似
Table/List "主控绑定到主控 DS 表/列表“详细信息”绑定到详细信息 DS
明细 DS 需要来自主 DS 的逗号分隔结果列作为“String”类型的输入参数。
如果您了解 javascript 并且您了解脚本数据集的工作原理,使用脚本数据集执行此操作非常容易:创建一个默认值为 null 的对象类型的报表变量“myValues”和第二个类型的报表变量“myValuesIndex”整数,默认值为 0。
(注意:这都是未经测试的!)
将数据集“detail”创建为脚本 DS,其中一个输入参数“csv”为 String 类型,一个输出参数“value”为 String 类型。
在脚本DS的open事件中,代码:
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” 值 = “富”
使用 Oracle 数据库,这可以在没有 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 中的纯 SQL 也可以使用 regexp_substr(参见同一页)。
【讨论】:
我实际上已经有了与您的 javascript 解决方案非常相似的东西。我遇到的问题是它如何将我的实际数据集与脚本数据集连接起来?我在哪里将信息传递给该输入变量 抱歉再次通读。我知道连接是由带有子列表的列表完成的。我如何在条形图中使用它?【参考方案2】:在脚本数据集中创建参数。在将脚本数据集分配给 Table 之后,我们必须通过 DataSet 参数绑定将实际数据集值传递或链接到脚本数据集参数。
【讨论】:
以上是关于如何将 birt 数据集列拆分为多行的主要内容,如果未能解决你的问题,请参考以下文章