关于《报表》的实际运用案例

问题:看下图,我需要在咸阳前加 【西安】 在西城和商洛之间加【合计】,并且把西城和西县的值累计到西安一栏;然后把除了西安这一栏之外的值都累加到合计一栏?想想怎么做?

说明:这些数据都是可以从后台读取过来的,在这里暂时不讨论如何实现这样的数据结构。

经过一番功夫就是写代码啦,我们会看到如下的效果:

代码稍后会有提点!!

            List<Group> dishiNames = new ArrayList<Group>();
          //Group是一个实体类,字段主要有name,id等		          dishiNames = loginMonthReport.findCityName(groupId); // dishiNames={"咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"};
		if(groupId == "2") {
			Group tempxian = new Group();
			tempxian.setId("0828");
			tempxian.setName("西安");
			dishiNames.add(0, tempxian);   // 将西安添加到List的第一个位置变成了dishiNames={"西安","咸阳","宝鸡","渭南市","铜川市","延安","榆林","汉中市","安康市","商洛","西城","西县"};
		}          //添加合计名称
		Group tempgroup = new Group();
		tempgroup.setId("1994");
		tempgroup.setName("合计");
		if(dishiNames.size() < 2) {
			dishiNames.add(tempgroup); //当dishiNames大小小于2时,直接在后面添加就行
		} else {
			dishiNames.add(dishiNames.size() - 2, tempgroup); //当dishiNames大于2,将合计添加到倒数第3个位置.
		}

光添加名称还不行,没有添加数据,使出来这样的效果的:

请看这点代码:

说说思路:不关联数据库的话,我们只用来测试,那么我们就让所有的数据都为0,把每一行都看作一个list集合,然后整体是一个大的List集合,在用el进行遍历即可。这里我只说说合计和西安两栏数据的实现:

    List<List<Integer>> lsts = new ArrayList<List<Integer>>();   //最大的 List    lsts=[{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},{0,0,0......},];     //{0,0,0......}表示每一行数据    

        //此处将合计值放入lsts的倒数第二个位置
		List<Integer> heji = new ArrayList<Integer>();
		/*for(int i = 0; i < 32; i++) {
			heji.add(0);
		}*/          //竖着相加
		for(int k = 0; k < 32; k++) {
			int sum = 0;
			for(int i = 0; i < lsts.size(); i++) {
				for(int j = k; j < lsts.get(i).size(); j++) {
					sum = sum + lsts.get(i).get(j);//实现了每一行list中的数据一一对应的相加,和放在sum中,                                                                  //比如说:{0,0,0......}                                                                         {1,0,0......},竖着相加 0+1=1
					break;//然后跳出,继续下一列的数据相加
				}
			}
			heji.add(sum);//把一列的数据和放在heji中
		}
		if(lsts.size() < 3) {
			lsts.add(lsts.size(), heji);  //lsts中没有超过3个的,将合计数据直接加在后面即可。
		} else {
			lsts.add(lsts.size() - 2, heji); //lsts中有超过3个的,将合计数据放在倒数第三个位置。
		}

然后再看看西安一栏数据如何添加:

        //将西城和西县的数据和累计放在西安下
		List<Integer> xianheji = new ArrayList<Integer>();

		for(int m = 0; m < 32; m++) {
			int sum = 0;
			for(int n = lsts.size() - 1; n >= lsts.size() - 2; --n) { //此处要找到最后两行数据,然后实现累加,跟上面的实现类似。
				for(int x = m; x < lsts.get(n).size(); x++) {
					sum = sum + lsts.get(n).get(x);//103
					break;
				}
			}
			xianheji.add(sum);
		}
		lsts.add(0, xianheji);

总计一栏我就不说了,横着加,很简单。最终效果类似下图:

这个是我在真实项目中做的报表。代码不敢全贴,只能作为参考。感兴趣的试一试,有问题不董或者想交流的,请留言,看到会回复的。

时间: 2024-09-29 16:47:06

关于《报表》的实际运用案例的相关文章

Report_矩阵报表的实现(案例)

2014-05-31 BaoXinjian In Capgemini 一.摘要 1. 矩阵报表的建立条件 必须建立4个组Group 其中一个为交叉组Cross Group 其中两个子组包含在交叉组内,一个组显示行头,一个组显示猎头 其中一个为显示具体值的组 2. 矩阵报表的类型 单查询矩阵报表:只有一个Query构成 多查询矩阵报表:有多个Query构成,例如一个Query构成行,一个Query构成列,一个Query构成显示列,由两个Datalink进行连接 矩阵间断式报表:有5个组Group构

Speed-BI数据分析案例:2016年8月汽车销量排行榜

据中国汽车工业协会统计分析,2016年8月,乘用车市场表现较好,当月销量环比和同比均呈较快增长.1-8月,乘用车销量总体呈稳定增长,增幅比1-7月继续小幅提升.      8月,乘用车共销售179.55万辆,环比增长11.90%,同比增长26.34%.在乘用车主要品种中,与上月相比,交叉型乘用车销量略有下降,其他三大类乘用车品种均呈增长:与上年同期相比,交叉型乘用车销量降幅依然明显,其他品种保持较快增长.8月,基本型乘用车(轿车)销售91.62万辆,环比增长11.07%,同比增长20.12%:运

13款经典BI项目报表&界面风格设计方案

说明 1.方案取自报表开发工具FineReport案例的配色方案 2.所有设计方案图中已标注了字体.颜色与间隔距离等,可直接调用. 报表&界面风格设计方案展示 灰蓝界面 绿色与金色 蓝绿清新风格 蓝绿渐进图表配色 经典红蓝商务风格 薄荷主题图表 黄绿主题图表 蓝灰图表 蓝绿主题图表 蓝色主题图表 绿色缤纷主题 绿色主题图表A 绿色主题图表B 13款经典BI项目报表&界面风格设计方案

教你禁用右键,也教你如何破解

很多人会遇到这种情况,在浏览页面时,发现鼠标右键不启用了.咦?刷新刷新再刷新,并无卵用,然后怒敲鼠标(没错,我就是这么暴力),更换浏览器,无用,最后弃之.其实,这是因为设计人员对页面启用了"禁用右键"功能,目的是为了防止内容被抄. 曾经也是受害者的我,如今作为一名小小的IT开发人员,就来告诉你如何"禁用右键"! 这里列举一个我在利用FineReport开发报表时遇到的案例. 启用"禁止右键" 报表大家都懂吧,启用"禁用右键"功

建立一个全数据管理的分析平台,该如何落实?

数据管理平台可以通过报表或者BI模块来搭建.在知乎专栏<帆软数据应用研究院>里有很多关于企业数据管理和BI报表平台建设的案例. 站在项目实施的角度,可以从技术和业务两个层面来考虑. 前期进行需求调研.罗列了一张建设思路图. 技术上需要考虑两大主体,一是公司的数据量,而是具体的需求情况. 数据情况 1.数据来源:考虑数据主要来源的业务系统有哪些?是否需要建立数据仓库?以及前期准备工作,比如相关数据字典准备,甚至是取数接口等问题. 举个例子,比如财务数据来自EAS,管理数据来自OA,销售数据来自S

6款经典BI项目报表表单风格配色方案

说明 1.方案取自报表开发工具FineReport案例的配色方案 2.所有配色方案图中已标注了字体.颜色与间隔距离等,可直接调用. 配色方案展示 蓝色基本风格 灰色基本风格 蓝色虚线风格 绿色风格 商务蓝灰 钻取图表

使用jqplot创建报表(一) 初学后写的第一个案例源码

一.初学后写的第一个案例源码 效果图: 代码如下: <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ include file="common.jsp"%> <html> <head> <script type="text/javascript" src=&q

关于Web报表FineReport打印的开发应用案例

报表打印是报表使用和开发过程中经常碰到的问题,这里汇总了关于Web报表开发打印功能的一些典型应用案例,以应用最广泛的FineReport为例. 案例一:java直接调用报表打印 当java后台定义定时打印的功能,同时又需要直接调用报表的打印的时候,由于打印机型号和纸张不同,需要指定打印机,从而打印是否成功并设置返回值.那么怎么样可以实现这一过程呢? 实现过程 1.定义报表运行环境 // 定义报表运行环境,才能执行报表            String envPath = "D:\\FineRe

Report_报表以PLSQL实现HTML标记实现(案例)

2014-05-31 BaoXinjian 一. 摘要 Oracle Report Builder开发的字符模式的报表,成为系统报表 优点 采用图形化的开发方式,比较直观 有功能强大的向导 对比较复杂格式的报表也不要通过太多代码来实现 最终结果以一个独立的文件的形式展示,比较容易传递 缺点 很难转成execel格式文件 虽然有布局编辑器,但是实际编写过程中,其宽度和位置的拖动比较繁琐 通过在数据库中直接产生HTML格式的文件,成为HMTL报表 优点 输出的文件,可以直接另存为execel或者wo

【案例分享】电力设备生产数据的多层分组统计报表实现

多层分组统计报表即按照不同的数据字段,形成多级分组,并分层级进行合计. 传统报表的实现方式大多基于 Table 控件,虽然可实现多个分组功能,但在报表显示方面有限制,只能呈现上下级的分组,而现代的复杂报表的需求,通常是左右级嵌套,有时甚至要求相同内容的单元格合并,使用 Table 控件,有太多的局限,有了矩表控件,通过简单的拖拽就能轻松实现多层分组报表,不管有多少个分组和分组小计都能简单解决. 下面会通过一个具体的案例,使用葡萄城报表中的矩表控件来讲解实现多层分组统计报表. (一)原始数据 (二