📅  最后修改于: 2020-11-16 08:10:23             🧑  作者: Mango
交叉表(cross-tabulation)报告是包含表格的报表,这些表格以表格形式在行和列之间排列数据。交叉表对象用于在主报表中插入交叉表报表。交叉表可用于任何级别的数据(标称,有序,区间或比率),并且通常以动态表的形式显示报告变量中包含的汇总数据。变量用于显示汇总数据,例如总和,计数,平均值。
JRXML元素< crosstab >用于将交叉表插入到报表中。
以下是< crosstab >元素的属性列表-
isRepeatColumnHeaders-指示是否应在分页符后重新打印列标题。默认值为true 。
isRepeatRowHeaders-指示在交叉表列中断后是否应重新打印行标题。默认值为true 。
columnBreakOffset-发生分栏符时,表示在将后续交叉表放置在同一页面上的前一个交叉表之前的垂直空间量(以像素为单位)。预设值为10。
runDirection-指示交叉表数据应从左到右(LTR)还是从右到左(RTL)填充。默认值为LTR。
ignoreWidth-指示交叉表是否会超出初始交叉表宽度限制,并且不会生成分栏符。否则,它将停止呈现交叉表宽度限制内的列,并仅在所有行开始呈现后才继续其余列。默认值为false 。
名称-这定义了参数名称。
class-这表示参数类别。
isDataPreSorted-指示数据集中的数据是否已预先排序。默认值为false 。
name-这定义行组的名称。
width-这定义了行组的宽度。
headerPosition-定义标题内容的位置(顶部,中间,底部,拉伸)。
totalPosition-这定义了整个列的位置(开始,结束,无)。
该元素包含以下子元素-
<桶>
名称-这定义了列组名称。
height-定义列组标题的高度。
headerPosition-定义标题内容的位置( Right,Left,Center,Stretch )。
totalPosition-定义整个列的位置( Start,End,None )。
该元素包含以下子元素-
<桶>
名称-这定义了度量名称。
class-这表示度量等级。
计算-这表示要在交叉表单元格值之间执行的计算。它的值可以是以下任意值-Nothing,Count,DistinctCount,Sum,Average,Lowest,Highest,StandardDeviation,Variance和First 。默认值为Nothing 。
columnTotalGroup-这表示用于计算列总数的组。
height-这定义了单元格的高度。
rowTotalGroup-这表示用于计算行总数的组。
width-这定义了单元格的宽度。
交叉表计算引擎通过迭代关联的数据集记录来聚合数据。为了聚合数据,首先需要将它们分组。在交叉表中,行和列基于特定的组项目(称为buckets) 。值区定义应包含-
bucketExpression-为了获得数据组项目而要评估的表达式。
比较器表达式-在值的自然排序不是最佳选择的情况下需要。
orderByExpression-指示用于排序数据的值。
交叉表中的行和列组(如上定义)依赖于buckets 。
以下是度量的当前值列表,可以通过根据以下方案命名的变量访问与该单元格对应的不同级别的总计-
度量计算的当前值存储在与度量同名的变量中。
为了演示交叉表,让我们编写一个新的报告模板(jasper_report_template.jrxml)。在这里,我们将交叉表添加到摘要部分。将其保存到目录C:\ tools \ jasperreports-5.0.1 \ test 。该文件的内容如下所示-
$F{country}
$F{country}
$V{tailNumCount}
上述文件的详细信息如下-
交叉表由
用于报告填充的Java代码保持不变。文件C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ JasperReportFill.java的内容如下-
package com.tutorialspoint;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;
public class JasperReportFill {
@SuppressWarnings("unchecked")
public static void main(String[] args) {
String sourceFileName =
"C://tools/jasperreports-5.0.1/test/jasper_report_template.jasper";
DataBeanList DataBeanList = new DataBeanList();
ArrayList dataList = DataBeanList.getDataBeanList();
JRBeanCollectionDataSource beanColDataSource =
new JRBeanCollectionDataSource(dataList);
Map parameters = new HashMap();
/**
* Passing ReportTitle and Author as parameters
*/
parameters.put("ReportTitle", "List of Contacts");
parameters.put("Author", "Prepared By Manisha");
try {
JasperFillManager.fillReportToFile(
sourceFileName, parameters, beanColDataSource);
} catch (JRException e) {
e.printStackTrace();
}
}
}
POJO文件C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ DataBean.java的内容如下-
package com.tutorialspoint;
public class DataBean {
private String name;
private String country;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountry() {
return country;
}
public void setCountry(String country) {
this.country = country;
}
}
文件C:\ tools \ jasperreports-5.0.1 \ test \ src \ com \ tutorialspoint \ DataBeanList.java的内容如下-
package com.tutorialspoint;
import java.util.ArrayList;
public class DataBeanList {
public ArrayList getDataBeanList() {
ArrayList dataBeanList = new ArrayList();
dataBeanList.add(produce("Manisha", "India"));
dataBeanList.add(produce("Dennis Ritchie", "USA"));
dataBeanList.add(produce("V.Anand", "India"));
dataBeanList.add(produce("Shrinath", "California"));
return dataBeanList;
}
/**
* This method returns a DataBean object,
* with name and country set in it.
*/
private DataBean produce(String name, String country) {
DataBean dataBean = new DataBean();
dataBean.setName(name);
dataBean.setCountry(country);
return dataBean;
}
}
接下来,让我们使用常规的ANT构建过程来编译并执行上述文件。文件build.xml的内容(保存在目录C:\ tools \ jasperreports-5.0.1 \ test下)如下所示。
导入文件-baseBuild.xml是从“环境设置”一章中提取的,应与build.xml放在同一目录中。
接下来,让我们打开命令行窗口并转到build.xml所在的目录。最后,执行以下命令ant -Dmain-class = com.tutorialspoint.JasperReportFill (viewFullReport是默认目标)-
C:\tools\jasperreports-5.0.1\test>ant -Dmain-class=com.tutorialspoint.JasperReportFill
Buildfile: C:\tools\jasperreports-5.0.1\test\build.xml
clean-sample:
[delete] Deleting directory C:\tools\jasperreports-5.0.1\test\classes
[delete] Deleting: C:\tools\jasperreports-5.0.1\test\jasper_report_template.jasper
compile:
[mkdir] Created dir: C:\tools\jasperreports-5.0.1\test\classes
[javac] C:\tools\jasperreports-5.0.1\test\baseBuild.xml:28:
warning: 'includeantruntime' was not set, defaulting to
[javac] Compiling 3 source files to C:\tools\jasperreports-5.0.1\test\classes
compilereportdesing:
[jrc] Compiling 1 report design files.
[jrc] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).
[jrc] log4j:WARN Please initialize the log4j system properly.
[jrc] log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig
for more info.
[jrc] File : C:\tools\jasperreports-5.0.1\test\jasper_report_template.jrxml ... OK.
run:
[echo] Runnin class : com.tutorialspoint.JasperReportFill
[java] log4j:WARN No appenders could be found for logger
(net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
viewFillReport:
[java] log4j:WARN No appenders could be found for logger (
net.sf.jasperreports.extensions.ExtensionsEnvironment).
[java] log4j:WARN Please initialize the log4j system properly.
BUILD SUCCESSFUL
Total time: 20 minutes 53 seconds
经过上述编译,JasperViewer窗口打开,如下图所示:
在这里,我们看到每个国家和名称都被列表了。