
技巧特色
文章平均质量分 89
润乾软件
创新技术 推动应用进步
润乾报表二十年
展开
-
MongoDB 分组统计
【摘要】 MongoDB 在进行分组统计时如果面对一些比较复杂的计算情况,往往会遇到 shell 脚本过于复杂的问题。而集算器 SPL 语言,则因其有丰富的函数库及易用性恰好能弥补 Mongo 这方面的不足。若想了解更多,请前往乾学院:MongoDB 分组统计! MongoDB 作为 NoSql 文档型数据库,在全球范围得到广泛的支持与应用。在比较常用的数据库功能中,...原创 2019-02-11 16:35:24 · 16111 阅读 · 1 评论 -
百万级分组大报表开发与呈现
在《秒级展现的百万级大清单报表怎么做》中,我们介绍了无论 RDB 还是非 RDB,润乾报表都能够通过异步线程实现秒级海量大清单报表(以下简称:大报表)。实际业务中,除了查询明细,有时还要展现全量汇总数据,或者查询分组明细和计算分组汇总。本文就将介绍这些带有汇总和分组的大报表的开发方法。 带汇总的大报表 在大报表中计算汇总值与常规报表基于报表内数据进行的汇总不同,大报表由于采...原创 2018-10-29 15:06:15 · 219 阅读 · 0 评论 -
如何处理报表中的舍位平衡
在报表的数据统计中,常常会根据精度呈现或者单位换算等要求,需要对数据执行四舍五入的操作,这种操作称为舍位处理。简单直接的舍位处理有可能会带来隐患,原本平衡的数据关系可能会被打破。 为了保证报表中数据关系的正确,就需要调整舍位之后的数据,使得数据重新变得平衡,这样的调整就叫做舍位平衡。在这里我们就讨论一下如何利用集算器来处理舍位平衡问题。舍位处理往往会采取四舍五入计算,这时就会产生误差,...原创 2018-10-29 11:58:00 · 4432 阅读 · 1 评论 -
如何协助 MySQL 实现 Oracle 高级分析函数
Oracle 支持一些独特的语法和函数,在移植到 MySQL 上时或多或少给程序员造成了困扰,下面我们针对 Oracle 的一些特殊用法举例并讲解如何用集算器来完成同样功能。这些方法当然也不限于针对 MySQL,对于所有其它数据库也能支持。 1、 递归语句a) select employee_id,first_name,last_name,manager_id...原创 2018-10-29 11:49:12 · 199 阅读 · 0 评论 -
多层科目任意组合汇总报表的性能优化 (下)
2.4 有序计算方案在充分利用遍历一次的特点进行优化后,可能我们还会觉得计算性能有点慢,希望有进一步优化的空间。由于每次只需要取出总数据量的很小一部分 (100 个指标涉及的所有科目号大概几百个,即在几百万记录中取几百条),这时我们通常能想到的是:如果能利用数据有序直接进行有序查找(若源数据有序,可以快速定位到这几百条记录,不需要遍历几百万记录甚至更多的数据),将能够获得更好的查询效率。我...原创 2018-10-29 11:40:15 · 400 阅读 · 0 评论 -
多层科目任意组合汇总报表的性能优化 (上)
一 问题背景我们先来看一张资产负债表:这是一个典型的中国式复杂报表格式,其复杂并不在于布局,而在于其中“期末余额”的每个单元格都是一个需要独立计算的指标,互相之间几乎没有关系,事实上就是一个各种指标的汇总清单,而这些指标往往会有上百个之多。在源数据表结构中,有一个字段称为科目,其长度总是固定的 10 位,如:1234567890,如下图:科目字段的值实际上是一个分层的代码,...原创 2018-10-29 11:26:00 · 6357 阅读 · 0 评论 -
浅解比SQL更好用的SPL
从 SQL 到集算器的基本查询语法迁移(一)单表操作数据库和数据分析领域,有一个强大的存在,大名 SQL,全名结构化查询语言 (Structured Query Language)。从字面上看,这个语言的目标就是把数据“查询”出来,而查询这个词给人的感觉并不是很难。但实际上,为了支持貌似简单的查询,需要进行大量的计算动作,甚至整个过程就是一个多步骤的计算,前后步骤之间还有很强的依赖关系,前...原创 2018-09-30 15:45:33 · 3739 阅读 · 0 评论 -
简单几行程序轻松分析Excel
随着互联网的快速发展,大数据时代的到来,数据资源的处理成了各行各业都面临的热点问题。除了通过特别专业、特别特别昂贵、特别特别特别复杂的分析平台来处理特别 x4 海量的数据外,我们还常常会遇到 Excel(xls,xlsx)文件这样手边能够即时获得的数据文件。使用 Excel 记录、处理和交换数据,是因为这个软件的简单方便,而如果又需要通过一堆外部调用来进行后续的分析处理,那就会显得十分笨拙。现在我...原创 2018-09-30 15:27:19 · 736 阅读 · 0 评论 -
多行日志合并处理的内外存方法
上一讲中,我们介绍了如何用SPL将一行日志结构化为一条记录,今天则要说一下多行日志对应一条记录的情况,我们称之为不定行日志。 事实上,集算器自己的输出日志就是这种不定行日志,我们来看一下集算器节点机下的一个日志文件rqlog. log,同样摘录两段日志:[2018-05-14 09:20:20]DEBUG: 临时文件过期时间为:12小时。 [2018-05-14 09:20...原创 2018-10-15 15:28:36 · 739 阅读 · 0 评论 -
优化Join运算的系列方法(3)
5 综合案例实际业务中,多表关联运算十分常见,外键表、同维表、主子表这几种关联类型可能会混合出现。下面我们来看一个综合案例。5.1 表结构和查询目标某电商平台中和订单编号这个字段相关的有6个表,主要表结构如下: 订单表 订单明细表 订单优惠表 订单发货表 订单支付表 ...原创 2018-10-15 15:24:00 · 194 阅读 · 0 评论 -
优化 Join 运算的系列方法(2)
3 半内存时的外键表外键指针化的前提是事实表和维表都可以装入内存,但实际业务中涉及的数据量可能很大,那就不能采用这种方法了。3.1 维表内存化如果只是事实表很大,而维表仍然可以全部装入内存,那么仍然可以采用上面的外键指针化方法处理,只要修改一下对事实表的访问,使用游标的方式取从集文件里分批取数进行处理即可。不过因为这种指针是在游标取数时才临时建立的,所以就不象全内存时那样可以复用已经建...原创 2018-10-15 15:16:54 · 185 阅读 · 0 评论 -
优化 Join 运算的系列方法(1)
JOIN是关系数据库中常用运算,用于把多个表进行关联,关联条件一般是判断某个关联字段的值是否相等。随着关联表的增多或者关联条件越来越复杂,无论理解查询含义、实现查询语句,还是在查询的性能方面,可以说JOIN都是最具挑战的SQL运算,没有之一。 特别是JOIN的性能,一直是个老大难问题。下面我们将基于数据计算中间件(DCM)——集算器,来提供一些提升运算性能的方法。当然,我们不是介绍如何...原创 2018-10-15 15:14:29 · 227 阅读 · 0 评论 -
10 行代码,集算器实现写诗机器人
集算器不仅有大数据计算,还有诗和远方。最近看到不少写诗机器人的新闻,于是尝试用集算器简单地实现一个。这个实现真的很简单,简单到只有10几行代码,请看实现步骤: 1.下载字典和诗词从网上找一个用于分词的字典文件,里面记录着每个中文词汇的词性。我从GitHub上找了一个,稍微处理之后保存到集文件dict.btx。下载宋词三百首的txt文件,去掉空格和换行,以及其它文字以外的字符,得到一...原创 2018-10-15 15:12:44 · 900 阅读 · 1 评论 -
跨库数据表的运算
1. 简单合并(FROM) 所谓跨库数据表,是指逻辑上同一张数据表被分别存储在不同数据库中。其原因有可能是因为数据量太大,放在一个数据库难以处理,也可能在业务上就需要将生产库和历史库分开。而不同的数据库,可能只是部署在不同的机器上的同种数据库,也可能是连类型都不同的数据库系统。 在面对跨库数据表,特别是数据库类型都不相同的情况时,数据库自带的工具往往就力所不及...原创 2018-10-29 15:11:41 · 562 阅读 · 0 评论 -
让Birt报表脚本数据源变得既简单又强大
概述:运行在 JVM 上的 SQL 函数和存储过程总所周知,有些数据库没有强大的分析函数(eg. Mysql), 有些数据库没有存储过程(eg. Vertica),当遇到复杂的数据计算,往往只能通过 Python,R 等外部脚本来实现,但这些脚本语言和主流工程语言(Java)集成性不好,如果直接用工程语言实现类似 SQL 函数和存储过程的功能,经常只是针对某个计算需求编写冗长的代码,代码几乎不...原创 2018-10-29 15:37:00 · 659 阅读 · 0 评论 -
学会这些“套路”,excel 合并汇总都不是事
1. 问题背景 在日常工作中我们经常遇到具有相同表头的 Excel 文件,需要将它们合并到同一个工作表中再进行分析。当文件比较多时,手工合并表格通常是件很麻烦的事情,而如果数据量很大,用 Excel 自带的 VBA 来处理也会经常卡死。今天我就来分享一个专业的外部数据工具——集算器,掌握了集算器处理 Excel 多表合并的方法,就不用再编写复杂且低效的 VBA 代码了,简单的几行 SPL...原创 2018-11-09 17:52:12 · 898 阅读 · 0 评论 -
Java 搞定 SQL 集合运算的最简方法
问题介绍 作为 java 程序员,用代码直接实现类似 SQL 中的交并补差的集合运算,总是要编写大量的代码,如果能有一个专门的外部数据工具,通过写简单类似 SQL 的脚本来实现,在 java 中直接调用并可以返回结果集,就再好不过了。Java 版集算器正是解决这一难题的神器,通过 SPL 脚本可以直观自然得写出运算,再使用 java 调用 SPL 脚本,使用起来简单,快捷,高效。另外,虽然 ...原创 2019-02-11 16:14:48 · 749 阅读 · 0 评论 -
复杂 Excel 表格导入导出的最简方法
把 Excel 文件导入关系数据库是数据分析业务中经常要做的事情,但许多 Excel 文件的格式并不规整,需要事先将其中的数据结构化后再用 SQL 语句写入数据库。JAVA程序猿经常选择使用POI或者HSSFWorkbook等第三方类库来实现,通常都要硬编码,如果碰到格式复杂的表格,解析工作量还会成倍增加,Java没有表格对象,总要利用集合加实体类去实现,导致代码冗长、不通用。集算器的 SPL 是...原创 2019-02-11 15:56:11 · 14586 阅读 · 2 评论 -
10 行代码提取复杂 Excel 数据
【摘要】 把 Excel 文件导入关系数据库是数据分析业务中经常要做的事情,但许多 Excel 文件的格式并不规整,需要事先将其中的数据结构化后再用 SQL 语句写入数据库。而一般情况下,结构化的工作量会比较大,而且很难通用,每次都要针对文件格式进行分析后再进行开发。 集算器的 SPL 语言是一款高效、灵活的工具,它能够轻松读取 excel 数据,然后结构化成“序表”后导入数据库。使用 S...原创 2018-11-30 19:25:02 · 2013 阅读 · 0 评论 -
用简单程序协助MySQL实现窗口函数
窗口函数是 SQL2003 标准才开始有的一系列 SQL 函数,用于应付一些复杂运算是比较方便。但是普遍使用的 MySQL 数据库对窗口函数支持得却很不好,直到最近的版本才开始有部分支持,这当然就让 MySQL 程序员很郁闷了。实际操作中,我们可以在 MySQL 里用 SQL 拼出窗口函数功能,但是需要使用用户变量以及多个 SELECT 表达式从左到右依次计算的隐含规则。下面我们来看两个例子(...原创 2018-11-20 16:23:43 · 487 阅读 · 0 评论 -
如何用外部程序优化SQL语句中的IN和EXISTS
数据结构IN 和 EXISTS 是 SQL 中常见的复杂条件,在将 SQL(存储过程)转换成库外计算获取高性能时也会面对这些问题。本文将以 TPC-H 定义的模型为基础,介绍如何用集算器的语法实现 IN、EXISTS 并做优化。TPC-H 是 TPC 事务处理性能委员会制定的用于 OLAP 数据库管理系统的测试标准,模拟真实商业应用环境,以评估商业分析中决策支持系统的性能。TPC-H 模型...原创 2018-11-20 16:05:25 · 414 阅读 · 0 评论 -
自动导出 Excel 的利器
有时我们需要用程序来自动生成 Excel 文件,但 Excel 本身带的 VBA 并不好用,而集算器作为数据处理工具实现这个需求就会方便很多。本文将介绍如何用集算器生成 Excel 文件,而集算器本身强大的数据计算能力不是本文重点,因此文中只是简单地用文本作为数据源举例,实际应用中可能会从各种各样的数据源中取数,再经过一系列运算得到需要导出的数据。 本文中用到的函数请参看集算器文档《函数参考》...原创 2018-11-20 15:55:16 · 791 阅读 · 1 评论 -
给一句 SQL 就能做多维分析
【摘要】《把 Excel 透视表搬到 WEB 上》我们以 Excel 文件数据集为例,介绍了如何把 Excel 的数据透视表嵌入到俺的应用程序中。爱学习的同学会问了,Excel 数据透视表可以使用 Excel 里取到的任何数据,比如数据库取数,你们能直接从数据库取数做分析吗?Yes,I Can!俺的程序支持对任何数据库做 SQL 数据集多维分析,只需先把数据源配置好,然后程序猿啪啪几下敲下需要...原创 2018-11-20 15:45:59 · 186 阅读 · 0 评论 -
实现报表的可控缓存
【摘要】使用缓存可以提升报表性能是不争的事实,一般高端报表工具都会提供报表缓存功能,可将整个报表计算结果缓存在文件系统中,以便用户下次访问相同参数的报表时可以快速读取缓存结果进行展现。但有些情况下报表开发人员还希望对缓存的内容进行更准确和灵活的控制,比如缓存的不是整个报表结果而是其中一部分、缓存内容可被其它报表或程序复用,以及对不同的缓存结果设置不同的超时时间,从而应对数据量和实时性方面的不同...原创 2018-11-20 15:33:21 · 251 阅读 · 0 评论 -
轻量级可嵌入多维分析后台
问题的提出多维分析(BI)系统后台数据源通常有三种选择。一、普通数据库;二、专业数据仓库;三、BI 系统自带的数据源。但是,这三种选择都有各自的问题。普通数据库一般都是行式存储,很难获得多维分析希望的高性能,只适用较小数据量。专业数据仓库有不少是列式存储的,性能问题不大,但是价格都比较昂贵,建设、扩展和维护成本也都非常高。BI 系统自带的数据源都比较封闭,只能为自家的 BI 前端提供支持,...原创 2018-11-12 12:14:51 · 199 阅读 · 0 评论 -
用计算路由的方法优化BI后台性能
问题的提出BI 系统的常见结构是:前端是 BI 应用,负责多维分析的用户操作和结果呈现;后台是数据库 / 数据仓库,负责数据计算和存储。前端和后台之间用 SQL 作为接口。实际应用中,常常出现后台数据仓库压力过重的问题。问题表现为前端响应时间过长,数据仓库反应速度变慢。常见的解决方案是在数据仓库和应用之间再增加一个前置数据库。但是前置数据库和后台数据仓库之间很难实现数据的路由和混合计算...原创 2018-11-12 11:57:28 · 334 阅读 · 0 评论 -
如何优化多数据集关联报表
多数据集关联报表是很常见的报表形式,它允许开发者分别从不同的来源(表或数据库)分别准备数据形成不同的数据集,在报表端(模板)通过表达式描述数据集间的关系完成关联。这样可以避免在数据准备时写过于复杂的 SQL/ 存储过程,降低维护难度。尤其当报表数据来源于多个数据库时,多数据集的优势更加明显。凡事都有两面性,多数据集为开发带来方便的同时却对性能造成了极大的影响。在报表端进行多数据集关联时要计算关...原创 2018-11-12 11:42:52 · 2629 阅读 · 0 评论 -
基于文件系统实现可追加的数据集市
一 问题背景 绝大多数的应用系统中,一开始数据的存储和计算基本都是由数据库来完成的,同时服务于业务交易和报表查询;不过在经过几年信息化建设和数据积累后,常常都会遇到数据库压力变大,从而导致性能瓶颈的问题。究其原因,往往发现针对历史数据查询的报表在其中占了很大比重。进一步分析会发现,这类报表通常都有如下特征:1、数据变化小:供查询的历史数据几乎不再发生变化;2、数据量大:数据量随...原创 2018-11-09 18:05:23 · 235 阅读 · 0 评论 -
超大数据下大批量随机键值的查询优化方案
一、问题描述 键值查询是很常见的查询场景,在数据表上建有索引后,即使表中数据记录数巨大(几亿甚至几十亿行),用键值查询出单条记录也会很快,因为建立索引后的复杂度只有 logN(以 2 为底)次, 10 亿行数据也只要比较 30 次(10 亿约等于 2^30),在现代计算机上也只需要数十毫秒而已。不过,如果需要查询的键值很多,比如多达几千甚至几万的时候,如果每次都独立查找,那读取和比较也...原创 2018-10-15 15:05:23 · 732 阅读 · 0 评论 -
文本导出的方方面面
TXT文本文件是我们常用的在应用之间传递数据的途径之一,因为它具有通用、灵活、易维护等诸多优点。不过并不是所有应用都提供了生成txt文件的功能,往往需要额外的程序设计和开发工作才能获得。这时如果能够有一个通用的工具软件,灵活地根据需要生成目标格式的文本,将能够极大地助力我们的业务工作。本文介绍的集算器就正是这样一款高效、灵活的通用工具软件,能够从不同数据源读取、计算并导出txt文件。 本文...原创 2018-09-27 10:48:31 · 345 阅读 · 0 评论 -
秒级展现的百万级大清单报表怎么做
数据查询业务中,有时会碰到数据量很大的清单报表。由于用户输入的查询条件可能很宽泛,因此会从数据库中查出几百上千万甚至过亿行的记录,常见的包括银行流水记录,物流明细等。呈现时如果等着把这些记录全部检索出来再生成报表,那会需要很长时间,用户体验自然会非常恶劣。而且,报表一般采用内存运算机制,大多数情况下内存里也装不下这么多数据。所以,我们一般都会使用分页呈现的方式,尽量快速地呈现出第一页,然后用户可以...原创 2018-09-27 10:13:56 · 645 阅读 · 0 评论 -
报表实时显示时间
报表,除了相对静态地展现汇总统计数据以及分布、趋势等数据内容外,也可以用于显示和时间相关的即时信息,包括实时显示时间。例如,下面这个设备监控应用统系中,首页除了显示实时监控数据外,还需要在右上角显示实时时间:这种形式的“动态报表”其实在我们生活中也随处可见,最常见的就是火车站大屏幕上的列车时刻表,上面显示的当前时间,让旅客能够一目了然地知道自己的列车还有多长时间开,等待的列车什么时候到。其实,要在...原创 2018-07-13 11:10:29 · 2031 阅读 · 0 评论 -
【报表制作技巧】报告式报表的制作
在银行、财务、销售等系统中,我们常常需要制作报告文件来进行工作汇报,例如季度销售报告、年度总结报告等。在没有报表工具之前,这类报告大部分是用Word做的,费时费力还不易维护,每次都独自加班到很晚(一首凉凉送给自己)。今天,我要带一带新的节奏,展现下神操作来制作这类报告式报表。这次我们拿银行季度报告来进行具体操作演示,下图为银行系统中某季度的工作报告,包括总体概述、财务情况分析、风险分析等几个部分,...原创 2018-07-06 10:20:54 · 1852 阅读 · 0 评论 -
动态交叉表头报表的制作
在数据信息系统中,常常会看到这样一类报表需求,它们的样式为交叉报表的变形(既纵向分组扩展又横向分组扩展,在交叉区域对统计项进行汇总),同时在纵向分组时,要求每个组跟随一个与分组相对应的横向表头。对比效果如下图所示:从上图可看到,报表纵向按照年进行分组扩展,同时每年又能生成一个横向分组表头,该表头按照地区横向扩展,并且根据年份的不同而不同。如上图所示:2014年有6个地区,而2015年由于数据不同只...原创 2018-07-06 10:06:08 · 2420 阅读 · 0 评论 -
列名作为分类值时如何画出统计图
一般来说,在报表中设计的统计图要用到两个变量值,一个是分类值,一般是统计中的横轴,还有一个就是系列值,相应的就是统计图中的纵轴。绝大多数情况下,分类值与系列值都是来源于表中的数据,也就是说,统计图是基于数据库表中的记录来设计器的,例如下面这个统计图:一般会来自于这样的数据:但是,有时会遇到下面这样的数据:显然,如果还需要做出前面的统计图,那么分类值和系列值就需要使用数据库中的列名也就是字段名了。说...原创 2018-07-09 09:49:03 · 203 阅读 · 0 评论 -
【报表制作技巧】玩转报表排名
排名分析是常见的分析方法,主要是通过排名让使用者了解当前业务维度下数据记录的次序,多用于业绩考核和对比分析。虽然排名的需求看着很简单,但实际操作时会发现有常常并不容易实现,这是因为排名的花样实在不少。今天我就来带大家玩转排名,开外挂分分钟搞定需求下班去浪!一般来讲,常见的排名方式有以下几类:单级排名、去重排名、横向排名、多级排名等。下面就详细说明各种排名是如何被外挂软件——润乾报表——轻松搞定的。...原创 2018-06-11 15:34:36 · 785 阅读 · 0 评论 -
动态列报表的制作
在数据信息系统中,常常会看到这样一类报表需求,它们往往格式简单,一般为列表式明细报表,但是要显示的列很多。而不同终端用户在不同时刻关心的数据又不同,这样就要求报表能够让他们随心所欲的选择要显示的列,以便直观地查看数据。最终效果如下图所示:那怎么实现这种需求呢?多做几个典型报表,根据用户不同进行不同的加载?这样报表开发工作量就增加了,连吃鸡的时间都没有了;写个存储过程动态计算要显示的表字段?还需要调...原创 2018-06-04 16:14:38 · 582 阅读 · 0 评论 -
人人可成为润乾报表工具销售者,享高达50%的业绩提成
2018来临之际 润乾为广大开发者、程序员小伙伴 带来了最~最~最实在的新年大礼! 报务猿火爆招募中,人人可成为润乾报表工具销售者,享高达50%的业绩提成,以下是活动相关介绍: 如何成为报务猿?成为报务猿的好处!加入越早,收益越多!关注润乾官方微信,参与活动!转载 2018-01-03 16:43:56 · 448 阅读 · 0 评论 -
在报表工具中使用esProc作为数据源
esProc将计算能力封装成标准的JDBC接口,可作为报表工具的数据源。 普通数据库的JDBC驱动仅是一个接口,实际运算在作为服务器运行的数据库进行;与之不同的是,esProc JDBC已经嵌入了全部运算引擎,不再需要独立的服务器,这样就需要将esProc JD原创 2011-09-01 14:33:18 · 1942 阅读 · 0 评论 -
在BIRT中使用esProc作为数据源
esProc将计算能力封装成标准的JDBC接口,可作为各种报表工具的数据源。 普通数据库的JDBC驱动仅是一个接口,实际运算在作为服务器运行的数据库进行;与之不同的是,esProc JDBC已经嵌入了全部运算引擎,不再需要独立的服务器,这样就需要将esProc原创 2011-09-01 14:15:42 · 695 阅读 · 0 评论