368 Star 3.5K Fork 1.5K

JEECG / JimuReport

 / 详情

交叉报表动态属性数据错乱

已完成
创建于  
2022-07-13 17:53

版本号:
1.4.2

问题描述:
交叉报表,使用动态属性进行配置展示,发现如果数据中存在类似的字符串,当前行的数据就会错乱,跟横向分组的数据不匹配

错误日志&截图:
例子以“牛力骨”、“松板牛力骨”为例子,两个字符串存在包含关系
1、只有一条牛力骨数据的时候,是正常的
输入图片说明
2、如果数据中存在多条类似记录,即有一条牛力骨、一条松板牛力骨,结果牛力骨的数据就是错乱的,横向分组的时间跟具体数据对不上
输入图片说明

输入图片说明

重现步骤:
交叉数据报表,存在动态属性数据,且存在两条及以上的纵向分组字符串存在包含关系,如:“松板牛力骨”包含了“牛力骨”,那么两条数据同时存在的时候,“牛力骨”的数据就出现错乱了。

评论 (15)

jeff_zhang 创建了任务
jeff_zhang 修改了描述
展开全部操作日志

输入图片说明简单的交叉报表,动态属性,导出来excel比对了下数据,错乱的不少,还不一定是包含关系的字符串,如下图,excel比对结果输入图片说明

升级版本试一下

<dependency>
    <groupId>org.jeecgframework.jimureport</groupId>
    <artifactId>jimureport-spring-boot-starter</artifactId>
    <version>1.5.2</version>
</dependency>

1.5.2版本一样有问题,上面评论的截图就是换了最新版本的

表格中,只有一条数据,基本都是正常的,存在多条数据的情况下,不管是否带条件查询,都会存在同一行记录,不同横向分组的数据错乱

导出报表配置和数据,我们复现一下修复

1.5.2版本,进一步测试发现,带条件查询情况下,数据量少(目前都是三条及以内)数据是准的,但是没带条件(查询所有)记录数几十条,就存在错乱了

补充:带条件查询,结果集20条数据就会出现错乱

4~20之间是否正常,目前没有测试

导出报表配置和表结构及数据,我们复现

/Users/jeff_zhang/Downloads/testreport.sql
/Users/jeff_zhang/Downloads/report-export-mysql.sql

/*
Navicat Premium Data Transfer

Source Server : VM-mysql
Source Server Type : MySQL
Source Server Version : 50733
Source Host : 172.21.34.1:3306
Source Schema : ljzdt

Target Server Type : MySQL
Target Server Version : 50733
File Encoding : 65001

Date: 14/07/2022 11:41:38
*/

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;


-- Table structure for testreport


DROP TABLE IF EXISTS testreport;
CREATE TABLE testreport (
order_month varchar(32) NOT NULL COMMENT '账期',
goods_name varchar(32) NOT NULL,
order_number varchar(32) NOT NULL,
order_unit varchar(32) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试报表 ';


-- Records of testreport


BEGIN;
INSERT INTO testreport VALUES ('2022-03', '松板 大片', '3', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 大片', '5', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 爽花', '105', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 爽花', '42', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 牛', '375', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 牛', '32', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 牛丝', '63', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 粒粒', '10', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 粒粒', '30', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 肝片', '153', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 肝片', '16', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 金钱', '162', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 雪花', '834', '件');
INSERT INTO testreport VALUES ('2022-03', '松板 雪花', '23', '包');
INSERT INTO testreport VALUES ('2022-03', '松板 黑椒', '90', '件');
INSERT INTO testreport VALUES ('2022-03', '松板五彩', '5', '盒');
INSERT INTO testreport VALUES ('2022-03', '松板咖喱', '5', '盒');
INSERT INTO testreport VALUES ('2022-03', '松板川香', '52', '件');
INSERT INTO testreport VALUES ('2022-03', '松板广式', '45', '件');
INSERT INTO testreport VALUES ('2022-03', '松板广式', '5', '盒');
INSERT INTO testreport VALUES ('2022-03', '松板扇子', '41', '件');
INSERT INTO testreport VALUES ('2022-03', '松板港式', '5', '盒');
INSERT INTO testreport VALUES ('2022-03', '松板白水', '158', '件');
INSERT INTO testreport VALUES ('2022-03', '松板白水', '11', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 劲', '22', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 劲', '13', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 大刀', '131', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 爽口', '624', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 爽口', '20', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 牛力', '49', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 牛', '51', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 牛', '6', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 牛丝', '70', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 牛丝', '8', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 粒粒', '70', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 粒粒', '3', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 肝片', '320', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 肝片', '12', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 金钱', '201', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 雪花', '189', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 雪花', '18', '包');
INSERT INTO testreport VALUES ('2022-04', '松板 黑椒', '75', '件');
INSERT INTO testreport VALUES ('2022-04', '松板 黑椒', '10', '包');
INSERT INTO testreport VALUES ('2022-04', '松板扇子', '41', '件');
INSERT INTO testreport VALUES ('2022-04', '松板扇子', '10', '包');
INSERT INTO testreport VALUES ('2022-04', '松板白水', '293', '件');
INSERT INTO testreport VALUES ('2022-04', '松板白水', '7', '包');
INSERT INTO testreport VALUES ('2022-05', '松板 爽口', '58', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 牛', '49', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 牛丝', '20', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 粒粒', '220', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 肝片', '115', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 金钱', '185', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 雪花', '334', '件');
INSERT INTO testreport VALUES ('2022-05', '松板 黑椒', '66', '件');
INSERT INTO testreport VALUES ('2022-05', '松板扇子', '80', '件');
INSERT INTO testreport VALUES ('2022-05', '松板白水', '37', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 爽口', '824', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 牛力', '246', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 牛', '50', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 牛丝', '573', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 粒粒', '10', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 肝片', '83', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 金钱', '180', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 雪花', '135', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 黑椒', '305', '件');
INSERT INTO testreport VALUES ('2022-06', '松板 黑椒猪', '30', '件');
INSERT INTO testreport VALUES ('2022-06', '松板吊烧', '3', '件');
INSERT INTO testreport VALUES ('2022-06', '松板扇子', '16', '件');
INSERT INTO testreport VALUES ('2022-06', '松板白水', '907', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 劲排', '10', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 大刀', '10', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 爽口', '27', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 牛', '64', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 牛丝', '210', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 粒粒', '25', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 肝片', '39', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 金钱', '55', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 雪花', '103', '件');
INSERT INTO testreport VALUES ('2022-07', '松板 黑椒', '120', '件');
INSERT INTO testreport VALUES ('2022-07', '松板五彩', '50', '件');
INSERT INTO testreport VALUES ('2022-07', '松板吊烧', '1', '件');
INSERT INTO testreport VALUES ('2022-07', '松板川香', '50', '件');
INSERT INTO testreport VALUES ('2022-07', '松板广式炒饭', '50', '件');
INSERT INTO testreport VALUES ('2022-07', '松板扇子', '36', '件');
INSERT INTO testreport VALUES ('2022-07', '松板白水', '717', '件');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

insert into jimu_report(api_code,create_time,name,template,del_flag,id,view_count,note,status,tenant_id,thumb,update_time,create_by,api_url,type,css_str,update_by,js_str,code,json_str,api_method) values (null,'2022-07-11 15:36:21','品类月度销售走势',0,0,'706376429856923648','73',null,null,null,null,'2022-07-14 11:36:33','admin',null,'datainfo','.jm-query-form .ivu-btn-primary{
background-color: #007C36;
border-color: #007C36;
}
.jm-query-form .ivu-btn-default,
.jm-query-form .ivu-btn:hover,
.jm-query-form .ivu-input-default{
border-color: #007C36;
}
.ivu-form .ivu-form-item-label{
color: #007C36;
}','admin',null,'20220711153620','{"loopBlockList":[],"area":{"sri":3,"sci":2,"eri":3,"eci":2,"width":273,"height":25},"excel_config_id":"706376429856923648","printConfig":{"paper":"A4","width":210,"height":297,"definition":1,"isBackend":false,"marginX":10,"marginY":10,"layout":"portrait"},"zonedEditionList":[],"rows":{"0":{"cells":{},"height":17},"1":{"cells":{"1":{"merge":[1,0],"height":63,"text":"品名|单位|年月","lineStart":"lefttop","style":19},"2":{"aggregate":"group","direction":"right","style":20,"text":"#{goods_moth.groupRight(order_month)}"}}},"2":{"cells":{"2":{"style":20,"aggregate":"group","direction":"right","text":"#{goods_moth.groupRight(order_unit)}"}},"height":38},"3":{"cells":{"1":{"aggregate":"group","style":16,"text":"#{goods_moth.group(goods_name)}"},"2":{"aggregate":"dynamic","style":25,"funcname":"-1","subtotal":"-1","text":"#{goods_moth.dynamic(order_number)}"}}},"len":101},"dbexps":[],"dicts":[],"rpbar":{"show":true,"pageSize":"","btnList":[]},"groupField":"goods_moth.goods_name","freeze":"A1","dataRectWidth":537,"displayConfig":{},"background":false,"name":"sheet1","autofilter":{},"styles":[{"bgcolor":"SELECT DATE_FORMAT((order_time),''%Y-%m'') AS order_month,gd.goods_def_name goodsName,sum(og.order_number) as order_number \t\tFROM order_goods og,goods_def gd,order_main om \t\tWHERE og.goods_def_id = gd.id AND og.order_id=om.id and og.order_number>0 \t\tAND om.id IN \t\t(SELECT id FROM order_main where CASE 1 \tWHEN MONTH(SYSDATE()) <3 THEN \t\torder_time >= str_to_date(CONCAT(YEAR(NOW())-1,"-03-01 00:00:00"),''%Y-%m-%d %H:%i:%s'') \tELSE \t\torder_time >= str_to_date(CONCAT(YEAR(NOW()),"-03-01 00:00:00"),''%Y-%m-%d %H:%i:%s'') END) \t\tGROUP BY order_month,goodsName \t\torder by order_number desc limit 50"},{"bgcolor":""},{"bgcolor":"#007C36"},{"font":{"bold":true}},{"bgcolor":"#007C36","font":{"bold":true}},{"bgcolor":"#007C36","font":{"bold":true,"size":14}},{"bgcolor":"#007C36","font":{"bold":true,"size":10}},{"bgcolor":"#007C36","font":{"bold":true,"size":12}},{"bgcolor":"#007C36","font":{"bold":true,"size":12},"color":"#ffffff"},{"bgcolor":"#ddefe8"},{"bgcolor":"#f1f9f6"},{"bgcolor":"#007C36","font":{"size":12}},{"bgcolor":"#007C36","font":{"size":12},"color":"#ffffff"},{"bgcolor":"#007C36","font":{"bold":true,"size":12},"color":"#ffffff","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]}},{"bgcolor":"#ddefe8","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]}},{"bgcolor":"#f1f9f6","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]}},{"bgcolor":"#ddefe8","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center"},{"bgcolor":"#007C36","font":{"bold":true,"size":12},"color":"#ffffff","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center"},{"bgcolor":"#f1f9f6","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center"},{"bgcolor":"#007C36","font":{"bold":false,"size":12},"color":"#ffffff","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]}},{"bgcolor":"#007C36","font":{"bold":false,"size":12},"color":"#ffffff","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center"},{"bgcolor":"#007C36","font":{"bold":false,"size":12},"color":"#ffffff"},{"bgcolor":"#007C36","color":"#ffffff"},{"bgcolor":"#007C36","color":"#ffffff","align":"center"},{"bgcolor":"#f1f9f6","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center","format":"number"},{"bgcolor":"#f1f9f6","border":{"bottom":["thin","#93d051"],"top":["thin","#93d051"],"left":["thin","#93d051"],"right":["thin","#93d051"]},"align":"center","format":"normal"}],"validations":[],"isGroup":true,"cols":{"0":{"width":22},"1":{"width":242},"2":{"width":273},"len":50},"merges":["B2:B3"]}',null);
insert into jimu_report_db(db_code,db_ch_name,is_list,create_time,db_type,db_key,db_source,id,jimu_report_id,db_dyn_sql,is_page,update_time,tb_db_table_name,create_by,api_url,json_data,db_table_name,update_by,tb_db_key,java_type,java_value,api_method,api_convert,db_source_type) values ('goods_moth','品类月度走势','1','2022-07-14 11:36:31','0',null,'','706376590490378240','706376429856923648','SELECT *
FROM testreport
WHERE 1=1
<#if isNotEmpty(goodsName)>
and goods_name like ''%${goodsName}%''
</#if>
','0','2022-07-14 11:36:31',null,'admin',null,'',null,'admin',null,null,null,null,'','mysql');
insert into jimu_report_db_field(create_time,widget_type,order_num,search_mode,field_text,dict_code,id,search_flag,update_time,create_by,jimu_report_db_id,widget_width,search_value,update_by,field_name,search_format,ext_json) values ('2022-07-14 11:36:31','String',0,null,'order_month',null,'706376590515544064',null,null,'admin','706376590490378240',null,null,null,'order_month',null,'');
insert into jimu_report_db_field(create_time,widget_type,order_num,search_mode,field_text,dict_code,id,search_flag,update_time,create_by,jimu_report_db_id,widget_width,search_value,update_by,field_name,search_format,ext_json) values ('2022-07-14 11:36:31','String',1,null,'order_number',null,'706376590544904192',null,null,'admin','706376590490378240',null,null,null,'order_number',null,'');
insert into jimu_report_db_field(create_time,widget_type,order_num,search_mode,field_text,dict_code,id,search_flag,update_time,create_by,jimu_report_db_id,widget_width,search_value,update_by,field_name,search_format,ext_json) values ('2022-07-14 11:36:31','String',2,null,'order_unit',null,'706378393177071616',null,null,'admin','706376590490378240',null,null,null,'order_unit',null,'');
insert into jimu_report_db_field(create_time,widget_type,order_num,search_mode,field_text,dict_code,id,search_flag,update_time,create_by,jimu_report_db_id,widget_width,search_value,update_by,field_name,search_format,ext_json) values ('2022-07-14 11:36:31','String',3,null,'goods_name',null,'707403337707319296',null,null,'admin','706376590490378240',null,null,null,'goods_name',null,'');
insert into jimu_report_db_param(create_time,jimu_report_head_id,param_name,order_num,widget_type,search_mode,param_value,dict_code,id,search_flag,update_time,create_by,param_txt,update_by,search_format,ext_json) values ('2022-07-14 11:36:31','706376590490378240','goodsName',1,null,null,'',null,'706382928981303296',1,null,'admin','品名',null,null,'');

输入图片说明
看一下,数据错乱的时候,第一条数据是不是不全
参考文档:http://report.jeecg.com/2119057

感觉动态横向扩展的第一条数据完整性工具自动填充补足空缺更好点,如果让用户来每套交叉报表都自行补效率太低。

已修复,自动补全第一条数据,等待下个版本

JEECG 任务状态待办的 修改为已完成

登录 后才可以发表评论

状态
负责人
里程碑
Pull Requests
关联的 Pull Requests 被合并后可能会关闭此 issue
分支
开始日期   -   截止日期
-
置顶选项
优先级
参与者(4)
469422 tygo 1607052856
Java
1
https://gitee.com/jeecg/JimuReport.git
git@gitee.com:jeecg/JimuReport.git
jeecg
JimuReport
JimuReport

搜索帮助