ireport交叉表与通用列组? [英] ireport crosstab with generic column group?

查看:129
本文介绍了ireport交叉表与通用列组?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

I have a problem with JasperReports crosstab report.

例如,我有当前格式为以下数据的数据:

For example, I have data that currently is in this format:

| 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  |

我需要以以下格式输出数据:

I need to output the data in this format:

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表
,然后在交叉表向导中,我将日期设置为行组。

When creating a crosstab, i do a simple query SELECT * FROM table and then on crosstab wizard, i have set date as row group.

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

What should i set in column group?

我需要将列组设置为出口柜台,不是出口价值?

I need to set the column group as outlet counter, not the outlet value? and measure value is outlet.

如何在iReport中执行此操作?

How to do this in iReport?

以前,我一直在考虑

类似的东西:

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

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

The output for above is in this format:

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

但我仍然坚持使用 JasperReports 来实现查询。

but i'm stuck on implement the query with JasperReports.

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

The output report should be the same like postgreSQL crosstab query.

推荐答案

创建交叉表

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>

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

Hence you should not try to get crosstab structure from database but flat structure where the name of the crosstab column is one column of your result.

这篇关于ireport交叉表与通用列组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆