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>

因此,您不应尝试从数据库中获取交叉表结构,而应尝试获取平面结构,其中交叉表列的名称是结果的一列。