ireport 与通用列组的交叉表?
ireport crosstab with generic column group?
我对 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 交叉表查询相同。
创建交叉表
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 表达式
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{salesman}]]></bucketExpression>
</bucket>
并且 columnGroup
将有
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{category}]]></bucketExpression>
</bucket>
因此,您不应尝试从数据库中获取交叉表结构,而应尝试获取平面结构,其中交叉表列的名称是结果的一列。
我对 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 交叉表查询相同。
创建交叉表
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 表达式
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{salesman}]]></bucketExpression>
</bucket>
并且 columnGroup
将有
<bucket class="java.lang.String">
<bucketExpression><![CDATA[$F{category}]]></bucketExpression>
</bucket>
因此,您不应尝试从数据库中获取交叉表结构,而应尝试获取平面结构,其中交叉表列的名称是结果的一列。