SQL 如何实现动态的行列转置
Oracle 和新版 Mysql 里有 pivot 实现行列转置,但实际处理数据时,会碰到一些更复杂的转置情况,pivot 也搞不定,比如:想转置成:这个难点在于事先不知道有多少种收入来源,而且每个人的收入来源种类各不相同。先得计算出种类个数,根据个数动态生成表结构,然后按照顺序填充每个人的多个收入数据。SQL 的计算过程不提倡分步,对集合操作支持的也不彻底,很难应付这种多步骤复杂计算。如果用集算
如何去除 EXCEL 文件中的重复行
在EXCEL数据文件中,如果按某几个列值比较,值都相等的几行称为重复行,那么怎么删除多余的重复行,只留下一行?如果数据少,只有几十行数据,那么手工删除也是可以的。而如果数据量很大,手工处理就会是很麻烦的事了,用 Excel 自带的 VBA 来处理也会经常卡死。自己编写程序来实现?也是可行的,不过首先要读取EXCEL文件内容读成数据集对象,再用两重循环逐行比较是否是重复行,删除重复行后再输出为新的E
BIRT 如何处理横向分栏
比如要处理这么个场景:将数据记录横向排布为三列显示。效果图如下: BIRT可以对数据纵向分栏,很难实现记录横向摆放并分栏的布局,有网友提出:把数据集绑定到List元素上,在网格中排列一个或多个数据字段,采用嵌入子网格等手段来实现,但都属于理论性阶段,并没有给出完整的示例,可想而知,即便能实现,也是需要写复杂的脚本和杂乱的网格拼接。工作量巨大。源数据格式如下: &nb
多个 EXCEL 文件如何合并成一个文件
同一文件夹里有多个格式相同的EXCEL文件,需要把它们合并到一个EXCEL文件中,应该怎么做呢?自己编写程序来实现?尽管好些程序语言都提供了读取EXCEL文件的API,但还是需要写程序去打开每一个文件,循环读取所需的每个单元格数据,在内存中把各文件数据保存到同一个数据集对象,最后再写出一个新的EXCEL文件,编写代码的工作量往往比较大。而且因为每批EXCEL文件的格式不相同,编写的程序并不能通用,
如何将 EXCEL 数据写入数据库
如何把格式复杂的EXCEL文件中的数据转变成结构化的数据集,然后存入数据库?要在程序语言中编程解决这个问题,工作量是非常大的。尽管有些API可以用来读取EXCEL文件的Sheet和单元格信息,但还是需要写程序去循环读取到所需的每个单元格的信息,再存入到数据集对象中,最后编写 SQL 运行后存入数据库。而且因为许多EXCEL文件的格式都不规整,编写的程序并不能通用,每次都要重新编写程序。如果使用集算
多个异构数据库如何关联查询
DBlink 只适合同种数据库关联,难以关联异构库。其他方式不是改变部署架构,就是增加开发工作量,实施起来困难很多。开发难度小的方式貌似是 ETL,把异构库变成同构库,就可以用熟悉的方式写关联 SQL。但这种方式需要改变原来的部署架构,硬加一个 ETL 层和一个数据集市层,一般还得加个管理员去维护定时调度,或者额外写代码判断“数据是否 ETL 完毕”。更大的问题是,这种方式需要把实时计算变成延迟计
BIRT 中根据参数实现动态日期分组
BIRT一般擅长处理规则一致的数据,若条件不一致的动态运算在报表中是很难实现的。常规办法是创建scripted data sources, 在该脚本源上自行处理业务逻辑把数据准备好,然后直接传给BIRT展现。但SQL或scripted data sources的方式,代码写起来非常麻烦,而且工作量很大。比如要处理这么个场景:按照开始日期、结束日期统计一段时间内订单,但要根据起止日期的跨度长短实现按
有没有在 WEB 端可以对文件做多维分析的 BI 软件
现在的数据类型多种多样,除了常见的关系型数据库外,各种 nosql 数据库,webservices 数据源或者一些特定的业务系统,他们导出的数据多半是文件格式,比如 txt、csv 等,那么如果要对这些文件做常规的数据分析的话就要采用一些工具来做了。数据文件以常用的 excel 为例,Excel 中有数据透视表的功能可以对 excel 做简单的多维分析功能,但用户现在更多的希望在 web 端做相应
BI 怎么制作中国式复杂报表
现在市面上常见的国外的和国内的一些 BI 工具是很难处理中国式复杂报表需求的,主要是中国式报表格式太复杂,这些 BI 工具通常是用来做数据分析,所以展示格式都相对简单,稍微复杂点的格式是无法制作的,中国式复杂报表复杂在哪可以看下:复杂报表复杂在哪?原来比较常用的方式是 BI+ 专业报表工具来实现,由 BI 工具专门做页面端的数据分析,然后复杂报表由专业的报表工具制作,这样能够弥补 BI 中无法处理
MongoDB 如何实现嵌套子文档分组
MongoDB 嵌套结构的数据非常常见, 它通过嵌套子文档,达到一对多的关联关系。但嵌套结构中按分类分组求子文档的数据计算,不能直接通过 $group 聚集运算来实现,需要将嵌套结构解开,由多层嵌套结构变成多条单层结构来计算,由于中间过程的处理,且还要借且其它函数辅助实现输出。下面以集合 order 为例说明,按 category 分组获取 term 的数量并按由大到小的顺序输出。[ {
一句话查询出指定节点的叶子记录
数据库中经常用外键到本表的结构存储树状数据。比如多级的行政区划表中,【ParentID】外键到本表的【ID】,要找到纽约州下所有的最基层行政区划,早期的 SQL 没有提供递归能力,这类查询很难写,尤其叶子记录还可能处于不同的深度。 这种情况如果用集算器 SPL 语言就比较容易,从数据库得到原始数据:>T=connect(”mysqlDB”).query(“select * from
报表怎么动态选择数据源
假定一业务量较大的企业,把每年的数据都分库存放在独立服务器。当一张报表按年度查询数据的时候,就要动态的去连对应库(即动态数据源)了。报表工具有开源和商业两大类,实际上都能实现动态数据源的功能。但不论哪款,操作起来都很麻烦。如常用的开源报表 Birt,需要在数据源配置的“beforeopen”中硬编码的方式实现,过程很复杂,在birt 如何配合动态数据源中有示例说明。商业报表工具做的也不好,几乎都是
Web 页面怎么加货币符号和大写转换
Web 页面数据显示常会涉及到各种各样的数据格式化处理,其中,将金额加货币符号和大写转换就很常见。1. 代码开发版实现方法定义数据转换函数,页面进行调用。1). 添加货币符号函数:a. 获取待处理的值,判断是否为有效数值;b. 将数值转换为字符串类型,定位在第一个数字前添加货币符号。核心代码:function currency (money){ let&nbs
web 页面如何实现 echarts 统计图的打印导出?
实现 echarts 的打印导出功能是需要前端和后端一起来完成的,也就是需要 echarts 在页面呈现之后,由浏览器截图并把图片传递给后端,后端最后实现打印导出。例如单页 echarts 导出打印的实现可以用 getDataURL() 方法获得图片后进行后续处理。而当数据是分页展现的时候,页面中是没有将所有的 echarts 统计图进行展现的(比如第 2 页也有 echarts,但是没翻页之前第
一句话得到中间值的多条记录
这个计算步骤比较多,首先需要用 distinct 去重得到值的集合,还要根据它的个数算出中间位置在哪,得到中间位置的值,再查询所有等于中间值的记录。SQL 里比较难保持这些中间状态的变量,得用多层嵌套的子查询实现,写出来有难度,之后了再读懂也不容易。 这种情况如果用集算器 SPL 语言就比较容易,从数据库得到原始数据:>T=connect(”mysqlDB”).query(“sel
web 端展现报表时查询表单如何实现参数联动
web 端查询表单中多个参数级联查询是查询控件之间一种常见的互动方式,前面主参数发生改变时,联动参数也随之改变。比如:查询表单中的城市根据地区联动,如地区选择华北,后面的城市只能选择华北地区下的城市。1:如果有报表工具,一般都支持参数级联查询功能,那么可以直接对联动参数设置关联过滤表达式,简单快捷,例如:如何实现参数级联查询2:如果没有采用报表工具,可将数据报表采用 iframe 嵌入发布页面,通
MongoDB 中有什么简单办法做多字段 join?
JOIN 在 SQL 是中很基本的运算,但 MongoDB 却没有直接提供,要用 $lookup 对付,但对多个字段关联时就很麻烦。比如这一段: db.getCollection(‘c1’).aggregate([{ $lookup: { &nbs
JAVA 如何实现大文本去除重复行
去重复行,用SQL写很简单,就一句SELECT DISTINCT … FROM。但是文件上没法直接用SQL了,想用SQL还得找个数据库先建表,也很麻烦。如果是小文件,那用java对付一下也不太费劲,大概这样: String file ="d:/urls.txt"; &nbs
多维分析前端页面卡顿不流畅怎么办
界面操作尽管属前端,但卡顿大部分并不是前端的问题,找前端开发商也是没有用的。后台负责计算任务,当出现压力过重的时候,前端表现响应时间长,实际就是后台响应速度变慢了。这个是造成界面操作卡顿的原因,解决方案则需要后台采用高性能数据库。目前多维分析产品的后台数据源通常是常规数据库、专业数据仓库及 BI 产品自带的数据源,整个系统性能基本都是靠它们自身的计算能力。但实际都有各自的缺点,普通库一般是行存,数
页面上怎么从不同数据库取数并关联计算?
可以通过 java 代码实现从不同数据库取数,做好关联计算后返回给前台页面展现,具体思路是:1)分别从各个数据库中读取表数据,存入 CachedRowSet 对象中2)关联计算可以使用 JoinRowSet 完成两个表的内连接3)涉及数据过滤时,可以使用 FilteredRowSet 完成条件过滤4)把结果集返回给前台展现在数据量比较小的时候,这种方式是完全可以的,但是随着数据量的增加,性能会变的