精华内容
下载资源
问答
  • 2022-04-28 21:59:12

    一、背景

            我们公司很多部门都有人会用Tableau等可视化开发工具开发各类报表,并发布到报表平台进行共享查看。我所在的团队负责公司BI平台的运维管理,面对数量日益增加的各种报表,为了方便统一规范和监控管理,有一项管理需求就是期望可以及时获知所有报表连接的数据源中所涉及的数据连接信息、数据库表清单等,人工维护显然会存在滞后性和遗漏的可能,所以考虑是否可以用程序进行自动提取。

    二、实现思路

    搞定Tableau报表所用数据库表的自动批量解析问题,一共需要两步:

    第一步:搞定一个报表的自动解析,获取其数据源信息

    第二步:把上述解析一个报表的方法封装起来,想办法搞定批量自动操作。

    (1)、如何获取一个Tableau报表中的数据源信息?

    1、从Tableau Server 的自带存储库获取数据

    Tableau Server管理员一般都知道,在Tableau Server服务器上,存在一个PostgreSQL数据库,是Tableau Server安装的同时自动安装的,用于存储和记录Tableau服务器上的配置、用户操作、工作薄、数据源、报表访问记录、数据提取作业等信息,不过默认情况下,该数据库不能通过Tableau Server以外的机器进行远程访问,但是可以进行设置开启,详细操作参见官方文档:启用对 Tableau PostgreSQL 数据库的外部访问

    事实上,如果是服务器管理员或者站点管理员用户,在Tableau Server的管理页面(TSM)上,你可以看到一些服务器监控看板页面,这些监控页面的数据来源就是上述提到的PostgreSQL数据库。如果你觉得Tableau Server上默认提供的监控看板不能满足你当前面临的复杂的服务器管理需求,你完全可以基于这个数据库中的数据记录,去构建和定制自己需要的监控运维看板,前提是理清了这个数据库中各表之间的关联关系,这里有一份Tableau官方的PostgreSQL数据库中的表和字段信息字典,拿走不谢:Tableau Server上的PostgreSQL存储库数据字典

    以下几个表存储了Tableau工作薄中所用的数据源连接信息:

    ​其中:connection_tables这个表中,记录了Tableau工作薄数据源所连接的表和自定义SQL。我们把这个表的字段单拎出来看:

    对于Tableau数据源为直接连接数据库表的,表里会记录一行数据,[type]字段值为'TABLE',[table_value]字段存储的值即为所连的数据库表名,而对于数据源为自定义SQL的,[type]字段值为'CUSTOM_SQL',这段数据库查询的SQL语句则会存储在[custom_sql]字段中 。看到这里,似乎我开头所提到的需求已经基本得到解决了,只要拿到这个表的信息不就全都搞定了!剩下的问题就是对自定义SQL语句进行解析,提取出SQL语句中所涉及的数据库表(关于SQL中提取涉及的数据库表这个问题,论坛中有很多相关话题和技术的讨论,大家可以从中找到解决思路,本文就不多做探讨。)。但实际情况并非这么简单,原因是我后来发现,在这个数据库中,并未存储Tableau发布数据源的中所用的数据库表和自定义SQL信息,而我们目前在用的很多报表,都是连接到发布在Tableau Server上的发布数据源的,这就不能完全解决我的问题。(如果你们并不使用发布数据源,那么看到这里就能解决你的问题了,如果你也和我一样也涉及发布数据源,请继续往下看。)

    2、解析Tableau报表文件(.twb)及tableau数据源文件(.tds)获取数据

    Tableau报表的所有信息都会存储在报表文件本身之中,所以我们可否尝试解析报表文件,来提取其中的信息呢?答案是 可以 。

    众所周知,XML 格式是一种极为通用且使用广泛的信息系统数据传输、存储格式,大量的软件开发商都在自己的产品中采用了这一标准,Tableau也不例外,大家可以尝试下把 .twb 格式的Tableau报表文件后缀改为 .xml,或者甚至直接用文本编辑器打开.twb文件,就会发现,原来Tableau文件的本质也就是XML文件,Tableau软件按照自己设定的规则解析这个XML文件,读取其中存储的信息,最终在软件的界面中渲染成我们所看到的报表样式。

    以下是一个示例报表以XML形式打开后的树形结构,其中的datasources节点就存储的是此工作薄中的数据源信息,对该节点展开后经过一番分析,就能找到其中的数据连接信息、数据库表、查询语句等数据的提取规则。如果大家有XML解析经验,或者写过爬虫,有HTML的解析经验,这里的信息提取也就轻车熟路了。

    ​类似的,对于.tds文件,以XML形式打开后,大家会发现,它的XML结构就是 .twb 文件中的 datasources 节点中的内容,解析方式基本一致。

    此外,需要特别补充的一点是:对于Tableau工作薄,除了.twb格式文件外,还有一种叫"打包工作薄",文件后缀为'.twbx',这种则是包含了外部文件的工作薄,他的实质是个'.zip'格式的压缩包文件,我们只需要粗暴地把文件后缀'.twbx'改为'.zip',然后直接进行解压就可以得到其中的.twb格式报表文件和工作薄中包含的其他文件,再对.twb格式报表文件进行解析即可。类似地,数据源文件也有'.tdsx'后缀文件,处理方式相同。

    至此,我们基本清楚了单个报表文件的解析思路,按照这个思路去做代码实现即可,剩下的问题就是如何批量获得所有的报表文件和发布数据源,并自动进行解析了。

    (2)、批量获取Tableau Server上的所有报表文件和发布数据源。

    Tableau的官网上提供了非常全面和详细的官方文档,包括Tableau Desktop、Tableau Server的各种操作、运维文档,还有Tableau的开发文档,其中就包含Tableau REST API文档和基于Tableau REST API做好了封装的Tableau Server Client文档,Tableau Server Client是Tableau官方提供的Python SDK工具包,封装了很多非常有用的开发操作,例如登录鉴权、工作薄、数据源操作、用户管理、服务器管理、任务调度等等,利用它可以进行二次开发实现很多Tableau Server的运维自动化。

    Tableau REST APITableau Server Client(Python

    我就是使用 Tableau Server Client(Python)批量获取的所有工作薄和发布数据源。不过有个前提,就是你至少得是Tableau Server的站点管理员用户,或者是服务器管理员用户,我们需要在程序中使用这种权限角色的账号密码登录 Tableau Server 。

    贴一些关键步骤的示例代码:

    安装 Tableau Server Client(Python):

    pip install tableauserverclient

    在你的Python程序中登录 Tableau Server ,有两种方式:

    用令牌登录:

    import tableauserverclient as TSC 
    
    tableau_auth = TSC.PersonalAccessTokenAuth('TOKEN_NAME', 'TOKEN_VALUE', 'SITENAME') 
    server = TSC.Server('https://SERVER_URL', use_server_version=True) server.auth.sign_in(tableau_auth) 
    
    # Do awesome things here! 
    
    server.auth.sign_out()

    在使用以上代码之前,你需要先登录 Tableau Server 获取 TOKEN_NAME 和 TOKEN_VALUE 和 SITENAME

    其中SITENAME 为你要服务器站点名称,在页面左上角LOGO下面,TOKEN信息的获取页面为服务器上的“我的账户设置”页面下如下图所示位置,点击创建新令牌即可获得。

    用账号密码登录:

    import tableauserverclient as TSC 
    tableau_auth = TSC.TableauAuth('USERNAME', 'PASSWORD', 'SITENAME') 
    server = TSC.Server('https://SERVER_URL', use_server_version=True) server.auth.sign_in(tableau_auth) 
    
    # Do awesome things here! 
    
    server.auth.sign_out()

    获取指定站点上的所有工作薄清单:

    import tableauserverclient as TSC 
    
    tableau_auth = TSC.TableauAuth('username', 'password', site_id='site') 
    server = TSC.Server('https://servername') 
    with server.auth.sign_in(tableau_auth): 
        all_workbooks_items, pagination_item = server.workbooks.get() 
        print([workbook.id for workbook in all_workbooks_items])
    

    以上方法获取到了所有工作薄的ID,我们可以再根据ID逐个下载工作薄:

    workbooks.download(workbook_id, filepath='指定的文件路径', no_extract=False)

    no_extract=False 参数默认为False,表示下载时不包含数据提取文件,我们这里不需要,所以使用默认设置。

    类似的,你也能从中找到下载数据源文件的方法

    datasources.download(datasource_id, filepath='指定的文件路径', include_extract=False, no_extract=None)

    至此,批量获取到工作薄或数据源文件的思路也理清了,要想解决我开头提到的自动批量解析Tableau报表中数据源所用的数据库表的需求,已经没有技术困难了,剩下的工作就都是写代码的体力活了,详细的代码实现大家可以参照我文中给的文档链接,去官方文档中查找详细的实现代码和说明。

    更多相关内容
  • Visual C++代码 177 如何设置水晶报表记录选定公式Visual C++代码 177 如何设置水晶报表记录选定公式Visual C++代码 177 如何设置水晶报表记录选定公式Visual C++代码 177 如何设置水晶报表记录选定公式...
  • Visual C++代码 164 如何在水晶报表中分组汇总记录Visual C++代码 164 如何在水晶报表中分组汇总记录Visual C++代码 164 如何在水晶报表中分组汇总记录Visual C++代码 164 如何在水晶报表中分组汇总记录...
  • Visual C++代码 163 如何在水晶报表中分组排序记录Visual C++代码 163 如何在水晶报表中分组排序记录Visual C++代码 163 如何在水晶报表中分组排序记录Visual C++代码 163 如何在水晶报表中分组排序记录...
  • Visual C++代码 162 如何在水晶报表中筛选数据记录Visual C++代码 162 如何在水晶报表中筛选数据记录Visual C++代码 162 如何在水晶报表中筛选数据记录Visual C++代码 162 如何在水晶报表中筛选数据记录...
  • 如何设置水晶报表记录选定公式程序实例,C#.net代码编写,VisualStudio.net
  • 如何在水晶报表中筛选数据记录源程序实例,C#.net源代码编写,VisualStudio.net
  • C#自定义页数打印,可设置每页只打印20条记录,有些时候,我们需要对打印条数进行设置,以满足我们的打印需要。这个C#源码演示了如何对打印记录进行自定义,只打印前20条记录。 运行环境:Visual Studio2010
  • 如何在水晶报表中分组排序记录源程序实例,C#.net源代码编写,VisualStudio.net
  • 如何在水晶报表中分组汇总记录源程序实例,C#.net源代码编写,VisualStudio.net
  • 积木报表官方提供了mysql的数据库表结构,根据官方的表结构创建了oracle对应的结构,记录一下,方便之后查找使用
  • 积木报表,一款免费的可视化Web报表工具,像搭建积木一样在线拖拽设计!功能涵盖,数据报表、打印设计、图表报表、大屏设计等! 秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、节省...
    项目介绍

    积木报表,一款免费的可视化Web报表工具,像搭建积木一样在线拖拽设计!功能涵盖,数据报表、打印设计、图表报表、大屏设计等!
    秉承“简单、易用、专业”的产品理念,极大的降低报表开发难度、缩短开发周期、节省成本、解决各类报表难题,完全免费的!

    当前版本:v1.4.2 | 2021-12-06

    集成依赖
    <dependency>
      <groupId>org.jeecgframework.jimureport</groupId>
      <artifactId>jimureport-spring-boot-starter</artifactId>
      <version>1.4.2</version>
    </dependency>
    
    #升级日志
    重点新功能
    • 重构表达式,解决金额数字计算不准确问题
    • 数据源设置分页,导出excel数据为空。
    • 设置英文或六位颜色值时,遇到设置小数位数据,颜色不显示
    • 设置三位颜色值导出excel 无显示颜色
    • 地图控件采用SQL数据源无法定时更新
    • 斜线表头颜色为空会报空指针
    • 平均数不计算空单元格
    • 下拉选项效果改变但是查询条件值未改变
    • 导出excel设置的分页数大于数量第一个数据源导不出来
    • 同一单元格内无法同时解析多个参数
    • 【导入报表】报错 list页面查询不传json_str,避免查询不到数据
    • 被除数不能为0
    • 导出excel和参数替换加上日志,线上不管用
    • 预览界面时,点击查询后,滚动条会消失
    • 内存问题 导出pdf处理完清空map、json
    • 导出excel、pdf改造 使用response获取流
    • 如果key不存在应该清空,否则在saas模式下sql可以解析
    • 数据源key存在下拉框提示显示数据源id
    • 导出excel、pdf日期格式重构,支持基本日期格式
    • mongo驱动换成mongodb-driver-sync, 与spring-boot-starter-data-mongodb保持一致
    • 默认选中分页
    • 搜索下拉框默认只显示10条数据,可以设置下拉显示条数
    • 新建积木报表处理extJson参数配置常量类及命名修改
    • 升级minidao版本,解决含limit的sql分页问题
    • 钻取跳转携带token
    • 数值计算交给bigdecimal处理
    • 数值格式化 默认不设置小数位数
    Issues处理
    • 预览界面时,点击查询后,滚动条会消失 issues/#599
    • 分组后数据显示错误issues/I4DSDM
    • 合计行问题=SUM(E4:L4)issues/I4FUJT
    • 积木报表添加js增强代码预览分页无效issues/#610
    • average()数据集表达式对列求平均没有排除空数据issues/#I4EUZV
    • 使用横向纵向组合动态列分组,后台的模板报错issues/#I4EB9G
    • 存储过程SQL解析按字段名排序issues/#640
    • 支持saas配置issues/#I4HWAM
    • 下拉树控件在多选的时候,如果选错了,察掉后不会及时生效,必须要重置才行issues/#I4FKR0
    • 同一单元格内无法同时解析多个参数issues/#I4EQ2K
    • 组合动态列分组bug issues/#607
    • 如果验证数据库名和用户名不一致,连不上mongo issues/#601
    • 数据源设置分页,导出excel数据为空issues/#I4EAUY
    • 下钻功能问题issues/#I4IZ64
    • 分组汇总问题优化issues/#673
    • 报表导出excel或PDF时间数据缺失issues/#663
    • 人大金仓数据库 表名项渲染为空,看渲染页要求为首字母大写,可以配置issues/#I4IU2U
    • 1.4.0与mongodb依赖冲突,启动报错issues/#I4ITG0
    • javabean数据源优化,解析出来字段名以传过来为依据issues/#I4HK1I
    • excel包含自定义格式,上传失败issues/#I4HVDU
    • 积木报表配置报表钻取单元格传值与表格传值问题issues/#658
    • 增加超链接的【参数设置】的其中一种是获取不到的参数的。issues/#I4HX60
    • 数据查询工具条的时候显示总数据条数issues/#672
    • 使用人大金仓数据源的时候后端返回的name 为小写导致不能生成表issues/#I4JBLE
    • 搜索下拉框最多只显示10条数据,根据配置显示条数issues/#675
    • SQL中加入自带的limit条件会报错issues/#I4JFKQ
    • 图表与javaBean数据源绑定报错,报错问题以附上解决方案issues/#I4I2X8
    • 使用非管理员的账号时,报表钻取问题issues/#680
    • 把单元格设置成【数字】类型后,导出Excel报错。issues/#I4JWH3
    • 钻取跳转携带tokenissues/#I4JM0I
    • 图形报表新建的SQL数据源,无法在报表中展现issues/#I4FNJC
    #代码下载
    #技术文档

    为什么选择 JimuReport?

    永久免费,支持各种复杂报表,并且傻瓜式在线设计,非常的智能,低代码时代,这个是你的首选!

    • 采用SpringBoot的脚手架项目,都可以快速集成
    • Web 版设计器,类似于excel操作风格,通过拖拽完成报表设计
    • 通过SQL、API等方式,将数据源与模板绑定。同时支持表达式,自动计算合计等功能,使计算工作量大大降低
    • 开发效率很高,傻瓜式在线报表设计,一分钟设计一个报表,又简单又强大
    • 支持 ECharts,目前支持28种图表,在线拖拽设计,支持SQL和API两种数据源
    • 支持分组、交叉,合计、表达式等复杂报表
    • 支持打印设计(支持套打、背景打印等)可设置打印边距、方向、页眉页脚等参数 一键快速打印 同时可实现发票套打,不动产证等精准、无缝打印
    • 大屏设计器支持几十种图表样式,可自由拼接、组合,设计炫酷大屏
    • 可设计各种类型的单据、大屏,如出入库单、销售单、财务报表、合同、监控大屏、旅游数据大屏等
    #系统截图
    • 报表设计器(专业一流 数据可视化,解决各类报表难题)
    • 报表设计器(完全在线设计,简单易用)

    • 打印设计(支持套打、背景打印)

    • 数据报表(支持分组、交叉,合计等复杂报表)

    • 图形报表(目前支持28种图表)
    • 数据报表斑马线

    #功能清单
    ├─报表设计器
    │  ├─数据源
    │  │  ├─支持多种数据源,如Oracle,MySQL,SQLServer,PostgreSQL等主流的数据库
    │  │  ├─支持SQL编写页面智能化,可以看到数据源下面的表清单和字段清单
    │  │  ├─支持参数
    │  │  ├─支持单数据源和多数数据源设置
    │  │  ├─支持Nosql数据源Redis,MongoDB
    │  │  ├─支持存储过程
    │  ├─单元格格式
    │  │  ├─边框
    │  │  ├─字体大小
    │  │  ├─字体颜色
    │  │  ├─背景色
    │  │  ├─字体加粗
    │  │  ├─支持水平和垂直的分散对齐
    │  │  ├─支持文字自动换行设置
    │  │  ├─图片设置为图片背景
    │  │  ├─支持无线行和无限列
    │  │  ├─支持设计器内冻结窗口
    │  │  ├─支持对单元格内容或格式的复制、粘贴和删除等功能
    │  │  ├─等等
    │  ├─报表元素
    │  │  ├─文本类型:直接写文本;支持数值类型的文本设置小数位数
    │  │  ├─图片类型:支持上传一张图表;支持图片动态生成
    │  │  ├─图表类型
    │  │  ├─函数类型
    │  │  └─支持求和
    │  │  └─平均值
    │  │  └─最大值
    │  │  └─最小值
    │  ├─背景
    │  │  ├─背景颜色设置
    │  │  ├─背景图片设置
    │  │  ├─背景透明度设置
    │  │  ├─背景大小设置
    │  ├─数据字典
    │  ├─报表打印
    │  │  ├─自定义打印
    │  │  └─医药笺、逮捕令、介绍信等自定义样式设计打印
    │  │  ├─简单数据打印
    │  │  └─出入库单、销售表打印
    │  │  └─带参数打印
    │  │  └─分页打印
    │  │  ├─套打
    │  │  └─不动产证书打印
    │  │  └─发票打印
    │  ├─数据报表
    │  │  ├─分组数据报表
    │  │  └─横向数据分组
    │  │  └─纵向数据分组
    │  │  └─多级循环表头分组
    │  │  └─横向分组小计
    │  │  └─纵向分组小计
    │  │  └─分版
    │  │  └─分栏
    │  │  └─动态合并格
    │  │  └─自定义分页条数
    │  │  └─合计
    │  │  ├─交叉报表
    │  │  ├─明细表
    │  │  ├─带条件查询报表
    │  │  ├─表达式报表
    │  │  ├─带二维码/条形码报表
    │  │  ├─多表头复杂报表
    │  │  ├─主子报表
    │  │  ├─预警报表
    │  │  ├─数据钻取报表
    │  ├─图形报表
    │  │  ├─柱形图
    │  │  ├─堆叠柱形图
    │  │  ├─折线图
    │  │  ├─饼图
    │  │  ├─动态轮播图
    │  │  ├─折柱图
    │  │  ├─散点图
    │  │  ├─漏斗图
    │  │  ├─雷达图
    │  │  ├─象形图
    │  │  ├─地图
    │  │  ├─仪盘表
    │  │  ├─关系图
    │  │  ├─图表背景
    │  │  ├─图表动态刷新
    │  │  ├─图表数据字典
    │  ├─参数
    │  │  ├─参数配置
    │  │  ├─参数管理
    │  ├─导入导出
    │  │  ├─支持导入Excel
    │  │  ├─支持导出Excel、pdf;支持导出excel、pdf带参数
    │  ├─打印设置
    │  │  ├─打印区域设置
    │  │  ├─打印机设置
    │  │  ├─预览
    │  │  ├─打印页码设置
    ├─大屏设计器
    │  ├─系统功能
    │  │  ├─静态数据源和动态数据源设置
    │  │  ├─基础功能
    │  │  └─支持拖拽设计
    │  │  └─支持增、删、改、查大屏
    │  │  └─支持复制大屏数据和样式
    │  │  └─支持大屏预览、分享
    │  │  └─支持系统自动保存数据,同时支持手动恢复数据
    │  │  └─支持设置大屏密码
    │  │  └─支持对组件图层的删除、组合、上移、下移、置顶、置底等
    │  │  ├─背景设置
    │  │  └─大屏的宽度和高度设置
    │  │  └─大屏简介设置
    │  │  └─背景颜色、背景图片设置
    │  │  └─封面图设置
    │  │  └─缩放比例设置
    │  │  └─环境地址设置
    │  │  └─水印设置
    │  │  ├─地图设置
    │  │  └─添加地图
    │  │  └─地图数据隔离
    │  ├─图表
    │  │  ├─柱形图
    │  │  ├─折线图
    │  │  ├─折柱图
    │  │  ├─饼图
    │  │  ├─象形图
    │  │  ├─雷达图
    │  │  ├─散点图
    │  │  ├─漏斗图
    │  │  ├─文本框
    │  │  ├─跑马灯
    │  │  ├─超链接
    │  │  ├─实时时间
    │  │  ├─地图
    │  │  ├─全国物流地图
    │  │  ├─地理坐标地图
    │  │  ├─城市派件地图
    │  │  ├─图片
    │  │  ├─图片框
    │  │  ├─轮播图
    │  │  ├─滑动组件
    │  │  ├─iframe
    │  │  ├─video
    │  │  ├─翻牌器
    │  │  ├─环形图
    │  │  ├─进度条
    │  │  ├─仪盘表
    │  │  ├─字浮云
    │  │  ├─表格
    │  │  ├─选项卡
    │  │  ├─万能组件
    └─其他模块
       └─更多功能开发中。。
    
    
    展开全文
  • VC报表打印程序

    2021-03-15 18:51:45
    内容索引:VC/C++源码,报表打印,... 功能介绍:这个报表打印程序可以支持很多功能:包括存储dbf库、排序、预览、打英字体及纸张的设置等,最主要得是它解决了一个大量记录集查询 。内存涨大的问题。试试就知道了。  
  • TIA博途wincc如何将变量归档记录导出为.CSV文件进行查看?
  • 准备个json 文件PurchaseInfo.json放到jaspersoft studio的报表项目里,我们要做一个表头是购买人的基本信息,明细时购买记录的这样一个报表。 { "loginId": "lisi", "address": "长安大街1号", ...

    九、jasperreport 制作json数据源报表(父子报表一)

    本文来源视频 https://edu.csdn.net/course/detail/30953

    上一讲的json数据源比较单一,有些报表分为表头和明细,比较复杂,我们来看看这种怎么做

    我们先来看看做好的报表样式

    1. 准备个json 文件PurchaseInfo.json放到jaspersoft studio的报表项目里,我们要做一个表头是购买人的基本信息,明细时购买记录的这样一个报表。

    {

    "loginId": "lisi",

    "address": "长安大街1号",

    "phone": "13344444444",

    "loginName": "李四",

    "location": "北京",

    "orderList": [{

        "orderId": "20200101",

        "price": 22.2,

        "count": 2,

        "purchaseTime": 1595336379791,

        "productName": "笔记本"

    }, {

        "orderId": "20200102",

        "price": 222.02,

        "count": 1,

        "purchaseTime": 1595336379791,

        "productName": "硬盘"

    }]

    }

     

    2.在studio 里切换到 Repository 视图里,创建一个JSON数据源。引用PurchaseInfo.json文件

     

     

    3.创建报表模板 SampleMain.jrxml,

    主报表数据源选择json中的用户信息的字段。

     

    4.将抬头字段拖到到报表模板里的TITLE位置,并拖动子报表元素到detail里。

     

    5.创建子报表SampleSub.jrxml,创建过程和普通报表一样。子报表保留detail区域,其余删掉。

     

     

    6.选择子报表数据源 ,选择orderList双击到了右边的框里,点Read Fields,下方列出购买记录的所有字段。

     

    7.设置子报表,选择子报表模板,拖动字段到子报表模板里。也可以给子报表设置写表格,背景色等。

     

    8.回到主报表模板,进行设置。在Outline窗口创建一个自定义的Parameter-subPath,代表子报表的路径。并进行Expression,Data source Express 的配置。

    $P{subPath}+"Sample2sub1.jasper"((net.sf.jasperreports.engine.data.JsonDataSource)$P{REPORT_DATA_SOURCE}).subDataSource("orderList")

     

    9.先编译子报表,在编译主报表,点击预览,输入subPath的路径。

     

    10.java代码的编写

    @GetMapping(value = "/reportjson3")

        public void reportjson3(HttpServletRequest request, HttpServletResponse response) throws IOException {

              try

                   String reportName ="sample2.jasper";

                    response.setContentType("application/pdf; charset=utf-8"); 

                   response.setDateHeader("Expires", 0); 

                    OutputStream os = response.getOutputStream();

               JasperReport jasperReport = (JasperReport)JRLoader.loadObject(resourceLoader.getResource("classpath:/jasper1/"+reportName).getInputStream());

               String subPath = resourceLoader.getResource("classpath:/jasper1/").getURL().toString();

               

               HashMap<String, Object> hashMap = new HashMap<>();

               hashMap.put("subPath", subPath);

               String json = buildJson();

               System.out.println(json);

               InputStream inputStream = new ByteArrayInputStream(json.getBytes("UTF-8"));

                   hashMap.put("JSON_INPUT_STREAM", inputStream); //填充报表数据源数据流

               JasperPrint jasperPrint = JasperFillManager.fillReport(jasperReport, hashMap);

                  

                   JasperExportManager.exportReportToPdfStream(jasperPrint,os); 

        } catch (Exception e) {

             e.printStackTrace();

        }

        }

     

    展开全文
  • 有必要先阅读我先前发布的《SpringMVC与iReport(JasperReports) 5.6整合开发实例》这篇博文,只有熟悉了SpringMVC与iReport的整合基础之后,才能更容易上手本示例教程,因为本示例的重点在于iReport报表模板的设计。
  • C#源码,报表打印,Interop.Word.dll,Interop.Office.dll C#借助Word打印员工报表的源码,输出Word,程序将建立Word对象,将数据生成Word表格文件,设置列宽,输出列标题数据,输出控件中的记录,最后打印员工报表,...
  • ●select函数说明函数说明:从数据集的当前行集中选取符合条件的记录语法:datasetName.select( &lt;select_exp&gt;{, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} )datasetName.select( &lt;...

    ●select数说明

    函数说明:

    从数据集的当前行集中选取符合条件的记录

    语法:

    datasetName.select( <select_exp>{, desc_exp{, filter_exp{, sort_exp{,rootGroupExp}}}} )

    datasetName.select( <select_exp>, , <filter_exp> )//适用于不需排序或数据集中已排好序

    参数说明:

    select_exp 要选择的字段列名/列号,,也可以是表达式。

    列号用#n表示,例如#0代表第0列,#1代表第1列,依此类推

    desc_exp:    指定数据排序的顺序,true表示降序排列,false表示升序排列。

    filter_exp: 数据过滤表达式,如果全部选出,则此参数省略,仅用,”占位。

    sort_exp:    数据排序表达式。当此项为空时先检查desc_exp是否为空,如果为

    空,则不排序,否则使用select_exp排序。

    rootGroupExp 是否root数据集表达式

     

    返回值:

    一组数据的集合,数据类型由select_exp的运算结果决定

    函数示例:

    1ds1.select( name )  

    从数据源ds1中选取name字段列的所有值, 不排序

    2ds1.select( #2, true )  

    从数据源ds1中选取第二个字段列的所有值并降序排列

    3ds1.select( name,false,sex=='1')

    从数据源ds1中选取性别为男性的name字段列的值并升序排列

    4ds1.select( name, true, sex=='1', id )

    从数据源ds1中选取性别为男性的name字段列的值并按id字段降序排列



    步骤一:进入配置——数据源,如下图所示:

    步骤二:选择新建,配置数据源:

    注:这里连接的是oracle数据库,不知道什么原因连接mysql数据库总是失败


    步骤三:连接上了之后,新建报表,在菜单栏中选择“文件”--“新建”,在弹出的窗口中选择“报表”,点“确定”


    新建报表的注意事项:新建报表的窗口中存在 普通报表  填报或参数表单 两个选项,如果是汇总类型的报表,一般选择 普通报表,如果需要填写的或者作为参数模板使用的,选择 填报或参数表单

    ● 数据集是一个二维的视图,是报表的数据来源。数据集可以通过数据库的sql查询获得,也可以来自其他异构的数据文件。报表运算引擎不关心数据集的数据来自哪里,始终基于数据集的数据来运算报表。

    ● 因此,制作报表的第一步:定义数据集


    填写好数据源之后,数据集类型选择SQL检索”,点“下一步”进入SQL编辑器窗口。

    步骤四:定义语法及需要的数据字段,这里我只需要WEIGHT2,WEIGHT3,WEIGHT4三个字段


    步骤五:点击确定回到向导窗口,点击生成网格报表,我们看到,一张网格式报表就做好了,单元格中自动产生了表达式:

    WEIGHT2的表达式为:=ds1.Select(WEIGHT2)

    WEIGHT3的表达式为:=ds1.WEIGHT3

    WEIGHT4的表达式为:=ds1.WEIGHT4

    现在我们点击预览,就能看到如下所示的表格:


    然后我们将头部改为中文名,并将所有数据居中:

    设置标题位置:可以通过工具栏上的,,图标将标题设为居左,居中和居右。



    ● 报表设计好后,点工具栏按钮,保存报表

    ● 快逸报表模板保存时,和excel一样,一个模板就是一个文件,由用户自己管理。

    ● 保存的报表模板不含数据,只有表达式和属性定义。

    ● 使用时,打开模板,连接数据源,点击 预览 按钮或工具栏 即可浏览运算后的结果报表

    ● 预览后的结果报表也可以保存,此时保存的是报表格式和数据,不含表达式


    展开全文
  • 本人菜鸟,这篇文章纯属个人记录,主要功能是通过 java 和 Ireport 生成报表,并生成 pdf,word,excel 格式IReport 使用记录教程–原创一、创建主报表1. 主报表属性设置报表下面有多个子报表组成 (A4:: 842*595)...
  • 此番学finereport帆软可视化,一方面来源于...本篇博客,聊以记录,也为分享。共勉。—— 起于2020.11.4早晨 参考视频:B站 帆软基础入门教学视频https://www.bilibili.com/video/BV1NJ411u7A3?from=search&sei.
  • WinCC智能报表,以 NewPdl0.Pdl 为准,想记录整点【一天24小时,每小时触发】,修改VB全局脚本的时钟触发器,改为每日的 00:00:00 触发!代码清晰易懂,带有注释,易于学者增减标签。
  • Jasper Report使用JSON数据创建报表

    千次阅读 2020-10-02 16:55:37
    最近在做一个项目小功能,表单结案要生成PDF报表。 起初,想用HTML模板(art-template模板引擎)编写,利用浏览器的打印功能保存成pdf文件下载。但是HTML编写好的模板,页码、页眉、页脚设置有坑,表单内容中的表格...
  • Crystal 水晶报表的数据

    千次阅读 2014-04-01 18:25:53
    背景知识: 1. 水晶报表主要用于设计和产生报表, 很多企业级系统都可以拿来集成,使得系统数据展示给客户 ...本文记录一下水晶报表的数据配置(1,2,3) ReportClientDocument clientDoc = new ReportClientDocumen
  • 摘要:C#源码,数据库应用,IrisSkin2.dll 大学项目设计C#仓库管理系统+完整项目代码,软件具备换肤功能,支持每日一帖,系统功能完备,同一操作员不能在不同的机器上登录,因为系统要记录下一些操作的操作员,单据...
  • 报表数据之Hadoop

    千次阅读 2015-04-28 10:09:43
    集算报表支持的数据类型除传统的关系型数据库外,还支持:TXT文本、Excel、JSON、HTTP、Hadoop、mongodb等。  对于Hadoop,集算报表既可以直接访问Hive,也可以读取HDFS中的数据,完成数据计算和报表开发。Hive的...
  • 7.2 报表的创建

    千次阅读 2021-12-23 14:40:08
    Access创建报表的许多方法和创建窗体基本相同,可以使用“报表”。 “报表设计”、“空报表”、 “报表向导”和“标签”等方法来创建报表。在“创建”选项卡中“报表”组提供了这些创建报表的按钮。 1.使用“报表...
  • 华报智能报表工具

    2015-11-26 10:30:43
    数据SDK代码:这些代码用于帮助开发人员生成加载报表数据用的XML数据文本,它们可以由开发人员根据项目的需要自由修改。目前提供语言版本包括:Delphi,VS.Net C#,Java。 帮助文档:微软标准CHM帮助文件,...
  • access习题--报表和页

    千次阅读 2020-12-20 06:45:50
    第八章 报表和页一、选择题1、以下叙述正确的是()。A.报表只能输入数据B.报表只能输出数据C.报表可以输入和输出数据D.报表不能输入和输出数据2、在设计表格式报表过程中,如果控件版面布局按纵向布置显示,则会设计...
  • 帆软报表控件很强大,组内刚刚购买,正在熟悉和学习过程中。
  • 开发报表是数据分析师必备技能之一,目前市场上,绝大部分的数据分析师的工作时间都是用来做报表报表是维持公司正常生产运营重要的一部分,企业的业务发展状况、财务状况等等都需要通过报表来监测。 然而很多企业...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,712
精华内容 16,284
关键字:

如何设置报表的记录源