我遇到了 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
然后在交叉表向导上,我将日期设置为行组。
我应该在列组中设置什么?
我需要将列组设置为出口计数器,而不是出口值?并且衡量价值是出口。
如何在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交叉表查询相同。
答案 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>
因此,您不应该尝试从数据库获取交叉表结构,而应该尝试使用交叉表列的结构为交叉表列的平面结构。