关于 jasper 报表:在子报表中创建和使用 CSV 数据

Create and use CSV data in a subreport

背景

Jaspersoft 社区论坛充斥着关于如何将 CSV 数据源与报告一起使用的问题。

问题

在使用 Jaspersoft Studio 时,使用本地文件作为数据源很方便。完成此任务的说明充其量是零碎的,最坏的情况是不完整的。

问题

在主报告中使用 CSV 文件(数据源)并让子报告使用该数据需要哪些步骤?


注意:此解决方案会从子报告的列表中删除第一个结果,这需要解决方法来解决,此答案中未描述。

概述

主要步骤包括:

  • 创建 CSV 文件
  • 创建数据适配器
  • 创建主报表和子报表
  • 连接数据集
  • 创建报告字段
  • 连接子报表
  • 创建 CSV 文件

    按如下方式创建 CSV 文件:

  • 打开文本编辑器。
  • 粘贴以下内容:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    city,age,name,address,status
    "Dallas",47,"Janet Fuller","445 Upland Pl.","Trial"
    "Lyon",38,"Andrew Heiniger","347 College Av.","Active"
    "Dallas",43,"Susanne Smith","2 Upland Pl.","Active"
    "Berne",22,"Bill Ott","250 - 20th Ave.","Active"
    "Boston",32,"Michael Ott","339 College Av.","Trial"
    "Dallas",4,"Sylvia Ringer","365 College Av.","Active"
    "Boston",23,"Julia Heiniger","358 College Av.","Active"
    "Chicago",39,"Mary Karsen","202 College Av.","Active"
    "Dallas",40,"Susanne Miller","440 - 20th Ave.","Trial"
    "Berne",9,"James Schneider","277 Seventh Av.","Active"
    "Dallas",36,"John Steel","276 Upland Pl.","Suspended"
    "Chicago",35,"George Karsen","412 College Av.","Suspended"
    "Dallas",37,"Michael Clancy","19 Seventh Av.","Deleted"
    "Lyon",2,"Anne Miller","20 Upland Pl.","Active"
    "Dallas",0,"Laura Steel","429 Seventh Av.","Active"
    "Lyon",28,"Susanne White","74 - 20th Ave.","Deleted"
    "Paris",5,"Laura Miller","294 Seventh Av.","Active"
    "Lyon",17,"Laura Ott","443 Seventh Av.","Active"
    "New York",46,"Andrew May","172 Seventh Av.","Active"
    "New York",44,"Sylvia Ott","361 College Av.","Active"
    "Dallas",19,"Susanne Heiniger","86 - 20th Ave.","Active"
    "Chicago",11,"Julia White","412 Upland Pl.","Active"
    "Dallas",10,"Anne Fuller","135 Upland Pl.","Active"
    "New York",41,"Bill King","546 College Av.","Deleted"
    "Oslo",45,"Janet May","396 Seventh Av.","Active"
    "Paris",18,"Sylvia Fuller","158 - 20th Ave.","Trial"
    "San Francisco",48,"Robert White","549 Seventh Av.","Active"
    "Paris",25,"Sylvia Steel","269 College Av.","Suspended"
    "San Francisco",7,"James Peterson","231 Upland Pl.","Active"
    "Oslo",42,"Robert Ott","503 Sixth Av.","Trial"
  • 将文件另存为 data.csv 到已知位置。
  • CSV 文件已创建。

    创建数据适配器

    如下创建数据适配器:

  • 启动 Jaspersoft Studio。
  • 打开项目资源管理器。
  • 右键单击该项目。
  • 单击新建 → 数据适配器。
  • 将文件名设置为:csv.xml
  • 点击下一步。
  • 单击 CSV 文件。
  • 点击下一步。
  • 将名称设置为:CSV
  • 单击文件。
  • 浏览并选择在上一节中创建的 data.csv
  • 单击从文件的第一行获取列名。
  • 单击完成。
  • 数据适配器已创建。

    创建主报表和子报表

    本节介绍如何创建报告。

    创建主报告

    如下创建主报表:

  • 单击文件 → 新建 → Jasper 报告。
  • 选择空白 A4。
  • 点击下一步。
  • 将文件名设置为:main.jrxml
  • 点击下一步。
  • 将数据适配器设置为:csv.xml
  • 单击完成。
  • 主报表已创建。

    请注意,数据源尚未连接到主报表。这就是人们遇到麻烦的地方。分配 CSV 数据源并不意味着报表可以"查询"数据。需要一个额外的步骤,本答案稍后将对此进行描述。

    创建子报表

    如下创建子报表:

  • 单击文件 → 新建 → Jasper 报告。
  • 选择空白 A4。
  • 点击下一步。
  • 将文件名设置为:subreport.jrxml
  • 单击完成。
  • 子报表已创建。

    创建数据集

    从 CSV 文件创建数据集,如下所示:

  • 切换到 Jaspersoft Studio 中的主报告选项卡 (main.jrxml)。
  • 单击设计选项卡。
  • 在大纲选项卡中,右键单击 main。
  • 单击创建数据集。
  • 将数据集名称设置为:CSV
  • 点击下一步。
  • 将数据适配器设置为:csv.xml
  • 点击下一步。
  • 单击 >> 将字段向右移动。
  • 单击完成。
  • CSV 数据集已创建。

    连接数据集

  • 在大纲中,展开 main。
  • 右键单击 .csv。
  • 单击连接到主数据集。
  • 将数据适配器语言设置为:CSV
  • 单击完成。
  • 数据集已连接。

    创建报告字段

    在主报表中创建字段如下:

  • 在大纲中,右键单击 main。
  • 单击数据集和查询。
  • 将语言设置为:CSV
  • 单击读取字段。
  • 单击
  • 报告字段已创建。

    连接子报表

    将子报表连接到主报表,如下所示:

  • 将一个子报表基本元素拖到主报表的标题栏上。
  • 单击选择报告文件。
  • 选择工作区资源。
  • 点击浏览
  • 选择 subreport.jrxml。
  • 单击
  • 再次单击
  • 单击完成。
  • 右键单击子报表元素。
  • 单击容器大小→适合两者。
  • 在属性选项卡中,单击子报表。
  • 切换到 main.jrxml 报告。
  • 在大纲选项卡中,展开主 → 字段
  • 选择字段(不要使用 CSV 字段)
  • 右键单击选定的字段。
  • 单击复制。
  • 切换到 subreport.jrxml 报告。
  • 右键单击字段。
  • 单击粘贴。
  • 选择字段。
  • 将字段拖放到详细信息带上。
  • 返回到 main.jrxml 报告。
  • 将子报表上的数据源表达式设置为:$P{REPORT_DATA_SOURCE}
  • 单击全部保存。
  • 单击构建。
  • 运行主报告。
  • 输出类似于:

    Main