七、数据处理

1)回到报表设计界面,查看表格具体参数配置,当前所有字段默认聚合方式均为:分组;

聚合方式 用途
列表(select) 对数据不作处理完整展示
分组(group) 将数据相同的作为一组进行展示
自定义分组 对数据自定义条件并进行分组,比如reader_number大于1000
汇总(sum) 针对数值型字段数据,统计该字段值相加的和,比如transfer_task记录中reader_number的和
统计数量(count) 针对数值型字段数据,统计所有记录中记录的条数,比如139条transfer_task记录
最大值(max) 针对数值型字段数据,展示当前记录中该字段值最大的那条记录
最小值(min) 针对数值型字段数据,展示当前记录中该字段值最小的那条记录
平均值(avg)

针对数值型字段数据,展示当前记录中该字段的平均值

参数 用途
数据集 下拉列表,展示数据源处已添加的数据集
属性 在选择数据集之后,下拉列表展示该数据集下所有属性字段
聚合方式 聚合方式包括列表、分组、自定义、汇总、统计、最大值、最小值、平均值等,参考上面表格
排序方式 针对数据集数据,可进行正序和倒序排列
数据展开方式 向下、向右、不展示,可依据需要进行选择
行高 可自行依据数据真实高度进行设置
换行计算 开启,或关闭,默认关闭
格式化 可针对数值型数据及日期型数据进行格式化,比如#.00(保留两位小数),yyyy/mm/dd(年月日)等
补充空白行 打开,关闭,默认关闭,打开情况下将设置数据行倍数,当总行数不是数据行倍数时自动补充空白行
条件属性 可配置条件项,对当前值/指定属性/表达式进行条件配置,符合条件的数据行/单元格可进行属性配置

7.1 新增列并求和

1)新增一列并统计读写总数量,鼠标右键【插入列(后)】,新增列count,并在E2单元格输入表达式sum(B2,C2),统计每行数据读写之和,最终合并第三行(必须合并),编辑属性输入表达式,sum(E2),统计所有记录的读写和;

2)预览报表数据,当读数量超过28的数据均已添加背景色,并且数据已加粗表示,最后列表新增count列,数据为每行记录读写之和,最后一行是合计数据,累计读写之和,通过在数据库中查询SQL验证数据正确;

7.2 数据过滤

1)回到报表设计界面,进行部分数据过滤,以reader_number字段为例,过滤掉读数目小于28条的记录(也就是保留reader_number>28的数据都保留),选择B2单元格,编辑右侧属性,点击【过滤条件】,新增一条

2)预览报表数据,列表仅展示读数目大于28的记录;

7.3 数据映射

1)回到报表设计界面,对部分数据进行映射,此处以status字段为例,将status=1的映射为成功,status=2的映射为异常,status=3的映射为运行中,status=4的映射为已终止;

选择D2单元格,右侧点击【数据映射】,点击【+】,添加映射;

2)预报报表数据,C2列数据成功被映射,如下图所示:

7.4 时间格式化

1)新增一个报表,还是以transfer_task为例;添加字段id、reader_number、write_number、create_date,当某一字段值是时间属性,需要对其进行格式化时,可配置格式化参数(格式化之前可先预览数据看看时间数据是什么样的),

支持yyyy/MM/dd、yyyy/MM、yyyy-MM、yyyy、yyyy-MM-dd HH:mm:ss、yyyy年MM月dd日:HH:mm:ss、yyyy-MM-dd、yyyy年MM月dd日;

2)设置完成,预览报表,将会自动将时间格式化为规定的格式。

7.5 单元极引用

在报表当中,大多数的计算都是针对单元格或与单元格有关,因为报表中单元格多数都与数据绑定,而数据往往又是多条,所以计算后的报表一个单元格会产生多个,这样对于单元格的引用就变的比较复杂。在UReport2中,引用的目标单元格是相对当前单元格来进行计算的,引用方法就是直接在表达式里书写单元格名称,比如引用A1单元格,就直接写A1即可 。

目标格获取原则
UReport2中单元格表达式在取目标格值时,优先考虑的是目标格是否与其位于同一行或列
如果是则取与其位于同一行或列的目标单元格,如果不是,则取与当前单元格有共同父格的所有目标单元格,如果他们有共同的上父格或共同的左父格,那么就取共同上父格与共同左格交集部分的目标单元格;如果他们没有共同的父格,那么就取迭代后所有的目标单元格。
多个值的输出
在UReport2中,如果取到值超过一个,输出时多个值间以“,”分隔,类似于:“1,2,3,4”这种。

针对无共同左父格和共同上父格的单元格,我们可以修改左父格及上父格以确保可以进行计算。

更改父格实现单元格取值
在之前的视频教程中,在介绍报表计算模型时,我们多次利用更改当前单元格的上父格或左父格使得当前单元格与目标格处于某个特定的父格下,其原理就来自于此。

w3cschool教程上有很多具体的例子,可以参见:单元格引入

7.6单元格坐标

为了实现更为复杂的单元格引用,UReport2引用了单元格坐标的概念。单元格坐标,也是相对于当前单元格来进行计算的,同样遵循上面的介绍的优先取同行、同列或共同父格的原则,一个标准的单元格坐标格式如下:

单元格坐标格式
单元格名称[Li:li,Li-1:li-1,…;Ti:ti,Ti-1:ti-1…]{条件...}

L表示左父格,l表示左父格展示后的序号,序号为负值,表示向上位移;T表示上父格,t表示上父格展开后的序号,序号为负值,表示相对于当前单元格向上位移,正值则表示向下位移,如果只有左父格,那么直接写L部分即可;如果只是上父格,那么前面需要加上“;”号,然后写T部分,后面的大括号中是条件部分,多个条件之间用and/or连接,表示对通过坐标取到的单元格进行条件过滤(如果取到多个单元格的话),条件部分是可选的,相关示例如下:

单元格坐标示例 说明
C1[A1:2,B1:1] 在找C1时先找单元格A1展开后的第2格;再找第二个A1下的B1单元格展开后的第一个单元格,然后再找这个B1单元格对应的C1单元格
C2[A1:2,B1:2;C1:3] 在找C2时,先找A1单元格展开后的第二格,再找第二个A1单元格下B2单元格展开后的第二格,再根据第二个展开的B2单元格找其下名为C2单元格的左子格;然后再找到C1单元格展开后的第三格,再看其下的C2单元格,取C2单元格的交集
C2[A1:2,B2:2]{C2>1000} 表示取A2单元格展开后的第二格,再取其下B2单元格展开后第二格,再取B2下所有的C2单元格,最后再对取到的C2单元格进行条件过滤,只取出C2单元格值大于1000的所有C2单元格。
C2[A1:2,B2:2]{C2>1000 and C2<10000} 表示取A2单元格展开后的第二格,再取其下B2单元格展开后第二格,再取B2下所有的C2单元格,最后再对取到的C2单元格进行条件过滤,只取出C2单元格值大于1000且小于10000的所有C2单元格的值。
引用所有单元格
如果我们需要引用所有单元格时,那么只需要在单元格名称后跟”[]“即可,如A1[],表达引用所有A1单元格,而不管当前引用格所在位置,同时在引用所有单元格时,还可以后跟条件,以对引用格做进一步条件限制,如A1[]{@>1000 and @<10000},表示要引用所有的A1单元格,但要求引用的A1单元格值要大于1000同时小于10000,这里的@符号是2.2.3及以后版本新增加的一个表达式符号,专门用于取条件循环中当前循环对象。
关于$B2
在UReport2当中,在单元格名称前加$符号,表示取相对于目标单元格的单元格的值,多用在条件比较当中,比如上面的C2[A2:-1]{B2==$B2},这里的$B2就是指取到的C2单元格对应的B2单元格的值。
关于&标记的使用
在使用“&单元格名称”来标记目标单元格展开后的序号时,除上需要注意上面描述的内容外,还需要注意,取序号将以他们共同的父格为基准,如果他们有共同的父格,那么将以这个父格里目标单元格的数量来进行序号编排,这在之前视频教程介绍报表计算模型中,实现明细型主从报表,对从表数据进行编号时就有体现

具体使用可参见:单元极坐标。

7.7 count函数

count函数是对给定的表达式在计算后对象数量进行统计。

示例 说明
count(B2,C2) 统计相对当前所在单元格,目标B2单元格以及C2单元格加在一起的数量
count(B2) 统计相对当前所在单元格,目标B2单元格数量
count(B2{reader_number>20},C2{write_number>28}) 统计相对当前所在单元格,目标B2单元格绑定对象的reader_number属性大于20的B2单元格以及C2单元格绑定对象的write_number属性大于28的单元格数量
count(C2{write_number>20}) 统计相对当前所在单元格,目标C2单元格绑定对象的write_number属性大于20的C2单元格数量

预览报表:

7.8 sum函数

sum函数是对给定的表达式在计算后值进行累加,sum函数要求各个表达式计算后的值必须是数字,否则将产生错误。

示例 说明
sum(B2) 相对当前单元格,取到所有B2单元格值进行累加
sum(C2{write_number>28}) 相对当前单元格,取到所有绑定对象属性write_number大于28的C2单元格值进行累加
sum(B2,C2) 相对当前单元格,取到所有B2和C2单元格的值进行累加
sum(B2{reader_number>28},C2{write_number>28}) 相对当前单元格,取到所有绑定对象属性reader_number大于28的B2单元格值以及绑定对象属性write_number大于28的C2单元格的值进行累加

预览报表数据:

7.9 avg函数

avg函数是对给定的表达式在计算后值求平均值,avg函数要求各个表达式计算后的值必须是数字,否则将产生错误,求平均数比较简单,此处不进行过多介绍,可参见函数。

示例 说明
avg(B2) 相对当前单元格,求B2单元格的平均值
avg(C2{write_number>28}) 相对当前单元格,取到绑定对象属性write_number大于28的C2单元格值的平均值
avg(B2,C2) 相对当前单元格,求B2和C2单元格的平均值
avg(B2{reader_number>28},C2{write_number>28}) 相对当前单元格,取到所有绑定对象属性reader_number大于28的B2单元格值以及绑定对象属性write_number大于28的C2单元格的值进行求平均值

7.10 max函数

max函数是对给定的表达式在计算后值求其中的最大值,max函数要求各个表达式计算后的值必须是数字,否则将产生错误。

示例 说明
max(B2) 相对当前单元格,求B2单元格的最大值
max(C2{age>28}) 相对当前单元格,取到绑定对象属性age大于28的C2单元格值的最大值
max(B2,C2) 相对当前单元格,求B2和C2单元格的最大值
max(B2{reader_number>28},C2{write_number>28}) 相对当前单元格,取到所有绑定对象属性reader_number大于28的B2单元格值以及绑定对象属性write_number大于28的C2单元格的值进行求最大值

7.11min函数

min函数是对给定的表达式在计算后值求其中的最小值,min函数要求各个表达式计算后的值必须是数字,否则将产生错误。

示例 说明
min(B2) 相对当前单元格,求B2单元格的最小值
min(C2{age>28}) 相对当前单元格,取到绑定对象属性age大于28的B2单元格值的最小值
min(B2,C2) 相对当前单元格,求B2和C2单元格的最小值
min(B2{reader_number>28},C2{write_number>28}) 相对当前单元格,取到所有绑定对象属性reader_number大于28的B2单元格值以及绑定对象属性write_number大于28的C2单元格的值进行求最小值

7.12 row函数(取行号)

取当前单元格所在行的行号,这个函数比较简单,它没有参数。

示例 说明
row() 取当前单元格所在行的行号

7.13 column函数(取列号)

取当前单元格所在列的列号,这个函数比较简单,它没有参数。

示例 说明
column() 取当前单元格所在列的列号

7.14 order函数(排序)

order函数需要两个参数,第一个为要进行排序的对象表达式,第二个是一个布尔值,用来设置排序方式,true正序,false为倒序。

示例 说明
order(C2,false) 相对当前单元格,取到所有C2单元格值,对这些值进行倒序排序,返回排序好的结果集合
order(C2{write_number>28},true) 相对当前单元格,取到与C2单元格绑定的对象属性write_number值大于28的所有C2单元格值,对这些值进行正序排序,返回排序好的结果集合

7.15 list函数(罗列数据)

取到表达式中定义所有数据,并以集合形式返回。

示例 说明
list(C2) 相对当前单元格,取到所有C2单元格值以集合形式返回
list(B2,C2{write_number>28}) 相对当前单元格,取到所有B2单元格值及C2单元格中write_number属性大于28的所有C2单元格值以集合形式返回

如图:

预览报表数据:

7.16 param函数

可参考【添加数据集】章节的表达式模式SQL。

param函数用来获取外部传入的参数,它需要一个参数,用于指定要获取的参数名称。

示例 说明
param("job_type") 获取外部传入的名为job_type的参数值
param(C2)

相对于当前单元格,取到C2单元格的值,如果有多个C2单元格则么第一个,然后以这个C2单元格值作为参数名称,获取外部对应的参数值。

${if(param("job_type")=='' || param("job_type")== null){return   "select * from transfer_task"}else{return   "select * from transfer_task where job_type=:job_type"}
}

7.17 formatdate函数(格式化日期)

参考【数据处理】》【时间格式化】章节。

对给定的日期参数进行格式化,它至少需要一个参数,第一个参数是要格式化的日期类型的对象,第二个参数是可选的,用于定义格式化采用的模式,如不指定则用默认的:yyyy-MM-dd HH:mm:ss来进行格式化。

示例 说明
formatdate(D2) 取到D2单元格值,这个值必须是日期类型,然后按yyyy-MM-dd HH:mm:ss来进行格式化成字符串输出
formatdate(D2,"yyyyMMdd") 取到D2单元格值,这个值必须是日期类型,然后按yyyyMMdd来进行格式化成字符串输出

7.18 formatnumber函数(格式化数字)

 对给定的参数进行格式化,它至少需要一个参数,第一个参数是要格式化的数字对象,要保证这个参数值取到后可以转换成日期,否则将发生错误;第二个参数是可选的,用于定义数字格式化采用的模式,如不定义,则采用默认的#来进行格式化。
示例 说明
formatnumber(B2) 取到B2单元格值,这个值必须可以转换成数字,然后按#来进行格式化成字符串输出
formatnumber(B2,"#,###.00") 取到B2单元格值,这个值必须可以转换成数字,然后按#,###.00来进行格式化成字符串输出

支持格式化格式包括:#.##、#.00 、 ##.##% 、 ##,##.##、 ##0.0E0、 ¥##,###.##、 $##,###.##

7.19 非常用函数

分页函数:

所谓分页相关函数,是指这些函数是在分页的时候进行计算,比如计算当前页有多少条记录、当前页某个单元格值累加后是多少、平均值是多少、最大值是多少等等。

分页相关函数使用
一般来说,分页相关函数多用在行类型为“重复表头”或“重复表尾”的行中的单元格里。
同时,需要注意的是,分页相关函数只会在分页预览时显示,这点需要注意。

pcount函数、psum函数、pmax函数、pmin函数、page函数、pages函数等

pages函数的使用范围
pages函数目前仅能在页眉页脚中使用

数学函数:

abs函数(求绝对值)、ceil函数(最小值)、floor函数(最大值)、chn函数(数字转中文)、rmb函数(数字转换为大写的人民币金额)、cos函数(余弦)、sin函数(正弦)、tan函数(正切)、exp函数(方法用于返回自然数底数e的参数次方)、log10函数(返回以10为底的对数值)、log函数(自然对数)、median函数(中位数)、mode函数(众数)、vara函数(方差)、stdevp函数(标准差)、pow函数(返回第一个参数的第二个参数次方)、random函数(随机数)、round函数(四舍五入)、sqrt函数(平方根)

chn函数使用注意事项
chn函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,chn函数会先进行四舍五入,然后再进行转换。
rmb函数使用注意事项
rmb函数转换数字即可是整数,也可是小数,如果是小数支持后面最多两位小数,如果实际小数过多,rmb函数会先进行四舍五入,然后再进行转换。

日期函数:

date函数(日期)、day函数(天)、month函数(月)、week函数(星期)、year函数(年)

字符串函数:

indexOf函数(位置)、length函数(长度)、lower函数(转小写)、upper函数(转大写)、replace函数(替换字符串)、substring函数(子字符串)、trim函数(去空格)、json函数(解析JSON字符串)

对JSON字符串的要求
json函数在解析JSON字符串时,要求必须是标准的JSON字符串,比如下面这样的:
{"name":"superman","age":32,"company":{"name":"bstek","address":"SHANGHAI CHINA"}}
也就是key属性也需要用“”包裹的,如果是下面这种类型的JSON字符串就解析时就会产生错误:
{name:"superman",age:32,company:{name:"bstek",address:"SHANGHAI CHINA"}}

ureport2报表详细使用(四)-数据处理相关推荐

  1. ureport2报表详细使用(五)-查询表单设计

    八.查询表单设计 查询表单设计主要是针对于使用表达式类型的SQL而言的,具体使用如下: 1)保存当前报表,点击左上角保存按钮: 2)浏览器地址输入: http://localhost:18090/ur ...

  2. ureport2报表详细使用(三)-添加数据集

    六.添加数据集 6.1 配置数据源 1)设计报表界面,选择右侧数据源,点击 图标,输入相关数据源相关连接信息,: 说明:此处数据作为示例,具体以用户当前存在的数据库为准. 数据源名称:test 连接用 ...

  3. SQL Server R2 地图报表制作(四)

    SQL Server R2 地图报表制作(四) 接下来需要指定一个地图类型,它显示随分析数据而改变的标记.这里我们选择"分析标记图".如下图所示: Server R2 地图报表制作 ...

  4. UReport2 报表设计器 在线表格

    UReport2官网 一.UReport2报表设计器         UReport2是一个开源的可视化报表设计器,功能强大,操作简单,可以实现复杂的报表统计,有各种各样的导出和打印功能,支持导入Ex ...

  5. matlab 实验四 数据处理与多项式计算

    实验四 数据处理与多项式计算 实验要求: 为达到理想的实验效果,同学们务必做到: 1.实验前认真准备,要根据实验目的和实验内容,复习好实验中可能要用到的命令,想好编程的思路,做到胸有成竹,提高上机效率 ...

  6. ureport 显示html,Ureport2报表使用问题及注意事项汇总

    近期处理了一些Ureport2报表问题,对源码略有了解.现将所遇到的问题总结如下: ------------------------------------------ 问题:html显示的表格实际宽 ...

  7. 在SpringBoot项目中使用Ureport2报表工具

    SpringBoot项目中使用Ureport2报表工具 1.在spring boot项目中使用Ureport2报表工具,首先需要在maven的pom.xml中添加Ureport2的依赖. <!- ...

  8. UReport2报表图片显示

    UReport2报表图片显示 看UReport2图片加载的源码 package com.bstek.ureport.provider.image;import java.io.FileInputStr ...

  9. Landsat Collection 2 T1一级数据详细介绍(数据处理过程和几何精度)

    几项数据处理.几何和辐射改进,以及新的数据分发过程,定义了 Collection 2 Level-1 数据.此页面提供了有关用户可以在 Landsat Collection 2 Level-1 数据中 ...

最新文章

  1. PostgreSQL和Excel的数据合并
  2. wxWidgets:窗口删除
  3. DCMTK:表示基于文件系统的基本工作列表管理服务类提供程序的控制台引擎的类
  4. dos命令行设置网络优先级_计算机网络故障及其维修方法
  5. FFMPEG音视频解码
  6. clamav程序的研究总结
  7. spring mvc学习(26):处理数据模型--从表单到controller传输数据
  8. win7系统如何共享硬盘分区
  9. 简历javaweb项目描述怎么写_硬件工程师简历-项目经验怎么写【范文】
  10. java制作网站的原理_代码生成器原理
  11. QT -- UdpSocket通信实例,使用Qt的UDP通信协议,实现局域网组播通信软件功能
  12. 编译原理(王生源第三版)第一章学习笔记(含第一章习题)
  13. 深度学习语音降噪方法对比_一种融合骨振动传感器和麦克风信号的深度学习语音提取和降噪方法与流程...
  14. vue 实现导出excel或文件两种方法
  15. wifi无线认证,802.1x认证上网方式详解
  16. 杰理AC695X系列---us定时器(12)
  17. 多项目版本管理:monorepo 策略
  18. 中国开源众生相-也谈“中国人的开源”
  19. nginx可视化管理工具
  20. 09科学艺术微观摄影大赛:婴儿乌贼夺冠(图)

热门文章

  1. 00008 - layui 表单验证,需要验证,但非必输
  2. 机器学习PAI实现精细化营销
  3. 【源码】基于灰狼优化技术的MPPT设计
  4. 信号完整性基础04:串扰(1)
  5. 2018 年最受欢迎的美国公司 Top 50,亚马逊卫冕!
  6. 透彻理解位图与矢量图的本质区别(小包子觉得讲的很清晰)
  7. 字节跳动一面通过率_字节跳动面试(一面)总结
  8. 连续时间系统的时域分析
  9. android studio gradle 下载失败万能解决方案
  10. 为什么使用YOLO算法?