页面怎么做点击表头排序
这是很常见的功能,一般的处理方式是通过 js 来实现,大致步骤是:通过点击事件确定将那列数据存入数组;判断原始排序,常用 if…else.. 代码块处理;返回新排列的数组顺序,并将各列赋新值这种处理方式小范围应用或许还可以,但当需要处理的页面表格较多时,每次这样写会很麻烦。一般报表工具都能支持这种功能,只需简单配置动态参数 + 超链接即可。详情可参考 点击表头切换升降序排序方式 ](http://
怎样实现填报表定时提交
前端调用后台依赖 js,所以归根结底是通过 js 函数调后台,填报表的提交实际就是走的 js。所以,只要采用定时调填报的 js 函数就可以了。核心的代码不多,定时器定时调提交函数如下:<script> setTimeOut(_inputSubmit(report_sgId),10000); //页面打开十秒后,调用填报表js函数,自动提交 </scrip
报表检测出 sql 植入风险怎么解决
Select … from T where ${w}正常使用下 w 可以 “status=1”、“1=1”等灵活的条件,但同时存在很大的安全隐患。比如 w 为“1=0 UNION select … from user”时,user 表数据就完全泄露了。解决这个问题大概两种方式:1、 写成很牛 X 的 sql,考虑到最坏情况下,攻击者依然无法攻击。2、 对参数值过滤,判断有风险的处理掉,甚至直接不让
三行代码嵌入 java 实现复杂 Excel 数据入库
一般常规办法:先使用POI或者HSSFWorkbook等第三方类库对其表格数据结构化,再用SQL语句写入数据库。由于Java并没有表格对象,总要利用集合加实体类去实现(硬编码),如果碰到格式复杂的表格,解析难度大,工作量会成倍增加,代码不仅冗长、且很难通用。比如要处理这么个场景:数据库表Logistics有3个字段:Shippers、Region、Quantity。解析如下Excel表格,并入库:
报表连 hive,数据量比较大,怎么分页查询?
Hive 提供了类似 Oracle 的 rownum 机制,类似这样(效率比较差):select * from (select row_number() over (order by create_time desc) as rownum,u.* from user u) mm where mm.rownum between 10 and 15;还有一种办法,如果表里有唯一标识字段也可以借助这个字
一句话实现MySQL库中的按连续等值分组
这种分组的依据是比较上一行字段值,发生变化时产生新组。SQL 仅支持等值分组,要想实现这种有序分组就得经过几次数据变换,变换成等值分组。以支持窗口函数的新版 MySQL 为例,大概经过这么三步:1、得出变化标志字段 flag。通过窗口函数 lag 得到上一行的字段值,发生变化 flag=1,否则为 0;2、累加 flag 字段得到 acc 字段。从第一行累加到当前行,还是得用窗口函数实现:sum(
BIRT 如何配置动态数据源
BIRT本身不直接支持动态数据源,常见解决办法是在数据源的beforeopen事件中添加类似如下代码:...importPackage( Packages.java.io );importPackage( Packages.java.util );fin = new java.io.FileInputStream(new String("d:/config.txt"));pro
怎么控制报表的数据权限
控制报表数据访问权限,是让不同的人访问同一张报表的时候所看到的数据是不同的或者说只能看到权限范围内的数据。报表工具通用的做法是控制数据集(报表所呈现的数据基本都是来自数据集)。以 sql 数据集为例,只要 sql 的条件不一样,返回的数据也就不同了。比如 sql 写成:Select … from T where ${w}当 w 定义为 if(role==’admin’,”1=1”,” status
web 展现数据时如何实现行列互换
1. 行列互换需求最常见的是在 BI 分析中,在 BI 中这个功能也叫旋转,可以直接通过拖拽字段方式实现行列互换效果,例如:http://c.raqsoft.com.cn/article/1535678317741#toc_h3_62. 如果没有 BI 工具,只有报表工具的话,那么用报表也可以实现行列互换。例如超链接实现方式:http://c.raqsoft.com.cn/article/1575
web 中怎么实现斜线表头效果?
1. 直接做一个带有斜线和文字的图片,在 html 中引用。缺点:要求图片大小能和格子大小相同。页面做了自适应的功能的话,图片上的线可能会失真,效果不够理想。2. 用 css3 的标签 canvas,将其作为画布画一条斜线。缺点:会存在浏览器兼容性问题,如果只需要在 chrom 中使用可以考虑。其实现在大部分项目中做表都会用报表工具,工具中就基本都有这个功能了,设置方式也很简单,润乾报表中只要直接
报表有 100 多万条数据,展现太慢了怎么办?
报表要展现 100 多万数据得用分页方式查询了,如果是自己写代码开发的报表就再实现一下分页查询就可以,不同的数据库实现机制不一样,具体网上资料很多。如果是用报表工具开发的报表,要看工具本身是否支持异步的分页查询,很多报表工具提供的还是常规分页(假分页),即一次性把数据加载到内存,然后前端再分页展示。好一点的方式是用数据库分页机制来做,利用行号来过滤,但这种方式也有很多弊端,比如你会发现翻到后面会越
页面表格怎么实现隔行异色、隔行变色
举例:采用 css+js 的方法,实现表格的隔行异色,需要如下几步:定义 css 表格样式,如边框、宽度、颜色在 js 中,创建 func()函数,并通过 onload 设置页面加载完成时,调用 func() 函数通过 getElementById、getElementsByTagName 方法获得表格所有的行对象,通过 for 循环遍历表格每一行,根据奇偶行调用不同的样式类。如果需要处理的表格较
一句话得到 SQL 难实现的去年同期比
按年、月分组,汇总得到每个月的合计值,没什么难的,就是个常规 group 操作。下一步是找到去年该月,数据整齐有序的话,向上第 12 条记录,肯定就是去年该月。但 SQL 无法单独的表述记录对象,也没有集合中相对位置的计算能力,得变通成自关联,把两条要计算的记录 join 成一条记录,再做记录内的多字段计算:with t as (select year(f1) y, month(f1) m, su
报表里有 4 个 SQL 数据集,SQL 在数据库里跑一共不到 10 秒,但报表查完很慢
你要确认一下执行完 SQL 结果是否都加载了,像 PL/SQL Developer 查完就只加载部分。不过报表运行时间肯定是要比数据库查 SQL 慢的,如果慢很多可能是因为在报表里关联多个数据集导致的。可以检查一下在报表单元格里是否有类似:ds2.select(name,id==ds1.cusid) 这样的表达式,表示数据集 2 和数据集 1 通过某个字段实现关联。几乎所有报表工具在完成多数据集关
Java 中如何使用 SQL 查询 TXT
Java不能直接使用SQL查询文本,一般常规做法:在数据库创建临时表,Java解析文本入库,再使用SQL对其查询、过滤、分组等。但实现过程太麻烦了。主要不方便体现在:1、Java代码写起来很长,开发环境配置也复杂,一般对人员要求较高。2、为了获得SQL的便利性,安装数据库、创建临时表,虽然不难,却很繁琐。3、一些临时性、突发性需求,搞起来周期长,甚至某些场景下不允许安装数据库,就很尴尬,全部用Ja
我们有个带 3 个数据集的报表跑了 2 分多钟,太慢了,有啥办法优化吗?
影响报表性能的因素有很多,数据量太大传输慢、SQL 复杂计算慢、数据集太多关联慢等等。按照你的描述应该问题应该出在 3 个数据集在报表里关联导致的报表太慢。可以检查一下在报表单元格里是否有类似:ds2.select(name,id==ds1.cusid) 这样的表达式,表示数据集 2 和数据集 1 通过某个字段实现关联。几乎所有报表工具在完成多数据集关联时都采用顺序遍历的方式实现,先拿一个数据集的
大数据分组怎样才会更快
分组是数据库的常见运算,无论数据如何准备,通常都需要将所有数据遍历。建立索引这时是不起作用的,存储格式才是决定遍历效率的主要因素。数据库中数据的存放虽然是二进制格式的,但普遍IO性能差,库内遍历快,外部取数都很慢。下面用Oracle来举个例子,数据如下:ORDERID CLIENT SELLERID &n
MongoDB 怎么计算子查询
MongoDB在某些方面确实比关系型数据库更强 (比如对追加型日志数据的吞吐能力),但结构化计算能力方面较弱。比如:MongoDB不支持子查询,碰到这些复杂的运算就只能先将数据读出后再计算,而用Java等语言编写这类计算也不是很简单。比如要处理这么个场景:查出订单信息,要求订单中的SELLERID必须是employee集合中STATE= California的员工id。如果写成sql就是:Sele
大数据批量键值查询怎样才会更快
一般选择数据库来存放数据,并借助数据表的索引来加快检索速度。利用索引查找数据,即使数据总量达到有10亿,对于单条记录的查找效率大约在数十毫秒(复杂度为LogN)。但是,如果需要查询的键值很多,比如多达几千甚至几万的时候,如果每次都独立查找,那读取和比较也会累积到几万甚至几十万次,时间延迟由此也会涨到几十分钟甚至小时级别,这时候再简单地使用数据库索引对于用户体验必然是难以容忍的了。比如下面这样的查询
未来系统扩展,报表怎么办?
系统扩展会有几种情况,不同的做法报表的应对策略也不同。1、集群把单体应用部署到集群环境,即每个节点都有一个完整的单体应用。通过负载均衡技术将用户请求路由到不同节点上从而分担并发压力。这种系统扩展方式很常见,目的是解决高并发下的请求响应效率问题,但无法改善大数据量时单个任务的响应效率。这种情况下,报表开发无需特殊注意,按照单体应用的方式开发,应用集群部署时随应用部署即可。2、水平拆分为了解决大数据量