使用通用列组的ireport交叉表?

时间:2016-03-28 04:42:10

标签: jasper-reports crosstab

我遇到了 JasperReports 交叉表报告的问题。

例如,我的数据目前采用以下格式:

| Date      | salesman      | area      | outlet    |
-----------------------------------------------------
| Date A    | Salesman A    | Area A    | Outlet A  |
| Date A    | Salesman A    | Area A    | Outlet B  |
| Date A    | Salesman A    | Area A    | Outlet C  |
| Date B    | Salesman B    | Area A    | Outlet A  |
| Date B    | Salesman B    | Area A    | Outlet D  |

我需要以这种格式输出数据:

Date    | Salesman      | Area      | Outlet 1 | Outlet 2 | Outlet 3 | etc
--------------------------------------------------------------------------
Date A  | Salesman A    | Area A    | Outlet A | Outlet B | Outlet C | ...
Date B  | Salesman B    | Area A    | Outlet A | Outlet D | .......  | ...

创建交叉表时,我会进行简单的查询SELECT * FROM table 然后在交叉表向导上,我将日期设置为行组。

我应该在列组中设置什么?

Crosstab column group

我需要将列组设置为出口计数器,而不是出口值?并且衡量价值是出口。

如何在iReport中执行此操作?

之前,我一直在考虑使用postgreSQL交叉表查询。

类似的东西:

SELECT * FROM crosstabN(
    'SELECT salesman::text, date::date AS visit_date, outlet::text
    FROM table'
)

上面的输出采用以下格式:

salesman      | category_1     | category_2     | category_3
------------------------------------------------------------
Salesman A    | Outlet A       | Outlet B       |
Salesman B    | Outlet A       | Outlet C       |

但是我坚持用 JasperReports 实现查询。

输出报告应该与postgreSQL交叉表查询相同。

1 个答案:

答案 0 :(得分:1)

创建交叉表

salesman      | category_1     | category_2     | category_3
------------------------------------------------------------
Salesman A    | Outlet A       | Outlet B       |
Salesman B    | Outlet A       | Outlet C       |

您的数据选择应

salesman   |  category    |   value
-------------------------------------
Salesman A |  category_1  | Outlet A
Salesman B |  category_1  | Outlet A
Salesman A |  category_2  | Outlet B
Salesman B |  category_2  | Outlet C

rowGroup将具有存储桶表达式

<bucket class="java.lang.String">
    <bucketExpression><![CDATA[$F{salesman}]]></bucketExpression>
</bucket>

并且columnGroup将有

<bucket class="java.lang.String">
    <bucketExpression><![CDATA[$F{category}]]></bucketExpression>
</bucket>

因此,您不应该尝试从数据库获取交叉表结构,而应该尝试使用交叉表列的结构为交叉表列的平面结构。