Jasper reports ireport与通用列组的交叉表?
我对JasperReports交叉表报告有问题 例如,我的数据当前采用以下格式:Jasper reports ireport与通用列组的交叉表?,jasper-reports,crosstab,Jasper Reports,Crosstab,我对JasperReports交叉表报告有问题 例如,我的数据当前采用以下格式: | Date | salesman | area | outlet | ----------------------------------------------------- | Date A | Salesman A | Area A | Outlet A | | Date A | Salesman A | Area A | Outle
| 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 | ....... | ...
salesman | category_1 | category_2 | category_3
------------------------------------------------------------
Salesman A | Outlet A | Outlet B |
Salesman B | Outlet A | Outlet C |
我需要以以下格式输出数据:
| 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 | ....... | ...
salesman | category_1 | category_2 | category_3
------------------------------------------------------------
Salesman A | Outlet A | Outlet B |
Salesman B | Outlet A | Outlet C |
创建交叉表时,我执行一个简单的查询SELECT*fromtable
然后在交叉表向导中,我将日期设置为行组
我应该在列组中设置什么
我需要将列组设置为出口计数器,而不是出口值?测量值为出口
如何在iReport中执行此操作
之前,我考虑过使用postgreSQL交叉表查询
比如:
SELECT * FROM crosstabN(
'SELECT salesman::text, date::date AS visit_date, outlet::text
FROM table'
)
以上的输出格式如下:
| 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 | ....... | ...
salesman | category_1 | category_2 | category_3
------------------------------------------------------------
Salesman A | Outlet A | Outlet B |
Salesman B | Outlet A | Outlet C |
但我一直在用JasperReports实现查询
输出报告应与postgreSQL交叉表查询相同。创建交叉表
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
行组将具有bucket表达式
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{salesman}]]></bucketExpression>
</bucket>
因此,您不应该尝试从数据库中获取交叉表结构,而应该是平面结构,其中交叉表列的名称是结果的一列。是的,我知道我必须生成这样的数据,但我不知道如何获取其分区内的类别计数(category\N、category\N等)我刚刚发现了postgreSQL,我使用row\u number
函数获取分区内当前行的编号。谢谢你的回答。