【问题标题】:Jasper report: two detail sections?Jasper 报告:两个细节部分?
【发布时间】:2009-06-23 22:34:17
【问题描述】:

我有一份碧玉报告要做,数据如下:

Item  | Quantity  | Color
------+-----------+--------
A001  | 1         | Red
A001  | 1         | Green
B002  | 3         | Red
B002  | 3         | Purple

报告按项目/数量分组,例如

Item: A001,  Qty: 1,  Colors: Red,Green
Item: B002,  Qty: 3,  Colors: Red,Purple

现在我得到了这个 Jasper 报告,它已经按此类分组 - 即显示带有项目和数量的标题,下面有一个颜色列表。

现在的问题是,在这个组下面我需要显示一些水平线(供某人写东西),等于项目的数量。例如在 A001 组下我需要显示一行,在 B002 组下我需要显示三行,如下所示:

Item A001, Qty 1, Colors Red, Green
          _________________________

Item B002, Qty 3, Colors Red, Purple
          _________________________
          _________________________
          _________________________

我试过查看 jasper 脚本,但似乎它们只能操纵报告参数/变量。

有人知道我该怎么做吗?

【问题讨论】:

    标签: reporting jasper-reports report-designer


    【解决方案1】:

    嗯,有趣。

    你可以这样做:

    使用这个源数据(MySQL):

    create table items ( 
    item varchar(4), 
    quantity number,   
    color varchar(10),
    );
    

    (插入数据...)

    create table numbers (i integer)
    

    (插入数据 0, 1, 2 .... MySQL 5.1 具有可以执行此操作的存储过程,早期版本需要外部脚本来填充它。从 0 到您拥有的最大数量)。

    然后,诀窍是制作正确的查询类型。我想出了这个:

    select i.*, n.i from
    (
    select concat(i.item, ' ', i.quantity) as grouping, i.item, i.quantity,group_concat(distinct color) as colors
    from items i 
    GROUP BY item, quantity
    ) i
    cross join numbers n 
    where quantity > n.i;
    

    例如如果我填充我的 numbers 表,并使用您的示例数据填充 items 表,然后运行我得到的查询:

    +----------+------+----------+------------+------+
    | grouping | item | quantity | colors     | i    |
    +----------+------+----------+------------+------+
    | A001 1   | A001 |        1 | Red,Greem  |    0 |
    | B002 3   | B002 |        3 | Red,Purple |    0 |
    | A001 1   | A001 |        1 | Red,Greem  |    1 |
    | B002 3   | B002 |        3 | Red,Purple |    1 |
    | A001 1   | A001 |        1 | Red,Greem  |    2 |
    | B002 3   | B002 |        3 | Red,Purple |    2 |
    | A001 1   | A001 |        1 | Red,Greem  |    3 |
    | B002 3   | B002 |        3 | Red,Purple |    3 |
    +----------+------+----------+------------+------+
    

    然后在您的 Jasper 报告中,诀窍是创建一个与“分组”列无关的组/乐队,并将您的标题放在其中:

    Item A001, Qty 1, Colors Red, Green
    

    然后,在详细信息部分中,只有一行作为详细信息中的唯一内容。

    这样做会为我生成您想要的报告。

    请注意,numbers 表有点傻,但它是一种标准的数据仓库技术,尽管我怀疑某些数据库(例如 Oracle)会有聪明的递归过程或其他功能,不需要它。

    【讨论】:

      【解决方案2】:

      好的,最后,这是使用子数据集和详细页脚部分中的交叉表完成的。效果很好 - 感谢所有贡献的人:)

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-11-30
        • 2017-10-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多