`
datamachine
  • 浏览: 156712 次
社区版块
存档分类
最新评论

集算器协助报表工具实现跨行运算

    博客分类:
  • DB
阅读更多

  有些报表工具不直接支持跨行计算,需要用表脚本实现,非常麻烦,遇到多层分组的情况会更复杂。集算器支持有序计算,可以弥补这一不足。报表工具可将集算器脚本文件当做数据库存储过程执行,详情参考集算器辅助报表开发的集成方法

  下面举例说明报表开发中常见的跨行计算,以及集算器对应的解法。
  

比上期和同期比

  库表sOrder存储着每个销售员每天的订单,报表需要统计指定时间段内各月份销售额的比上期和同期比。源数据如下:

  比上期代码如下:

  先用SQL进行分组汇总,计算出每年每月的销售额,再用公式“当月销售额/上月销售额”计算比上期。结果如下:

  同期比代码如下:
 

  用SQL对分组后的数据按月份、年份排序,再用公式“当月销售额/上一年同月份销售额”进行计算,结果如下:

每月累计销售额

  计算每个销售员每个月的累计销售额,跨年时清零。

  集算器代码:
 

  先用SQL进行分组汇总,计算出每个销售员每年每月的销售额,再进行跨行计算,用公式“当月累计=本月销售额+上月累计”。结果如下:
 

单账户各期余额

  data.csv存储着某账户各期资金存取情况,初始余额为45,需要根据该文件计算出各期余额,部分源数据如下:
 

  集算器代码:
 

  以逗号为分隔符读入文件,按照公式“上期余额-本期存款-本期取款”为公式计算本期余额,结果如下:

多产品每日库存

  库表inout记录着每种商品每天的出入库情况,日期无间断,初始库存为0。现在需要在报表中展现这些数据,并额外增加一列:每日库存。
 

  集算器代码:
 

  对每种产品分别计算(分组),当日库存的算法是“当日入库-当日出库+昨日库存”。集算器可用[-1]表示上一条记录,因此可以直观写出表达式。计算结果如下:
 

  假设时间是间断的,则需要将数据先按不间断的时间序列对齐,再计算库存,代码如下:
 

贷款分期

  库表loan存储着贷款信息,包括贷款总额、按月分期数、年利率。要求实现一张分组表,在每条贷款信息下列出各期明细,包括:当期还款额、当期利息、当期本金、剩余本金。源数据如下:
 

  集算器代码:

  先根据公式计算每笔贷款的月利率和每期还款额,再根据每笔贷款信息新建明细二维表,计算出当期利息、当期本金、剩余本金,最后合并明细表。其中第1笔贷款的明细如下:
 

不规则跨行占比

  数据库表majorSum存储着某医院重点科室以及全院的患者统计,报表需要按字母顺序呈现各科室的患者占比,并在最后保留全院患者数量。源数据如下:
 

  期望的报表如下:

  集算器代码如下:
 

  首先用函数maxp找到全院患者对应的记录(patient最大),再用“\”进行差集运算,获得各科室患者对应的记录,之后计算各科室患者的占比,最后用“|”纵向拼接记录。结果如下:
 

  • 大小: 39.4 KB
  • 大小: 27.4 KB
  • 大小: 27.6 KB
  • 大小: 30.3 KB
  • 大小: 44.4 KB
  • 大小: 29.3 KB
  • 大小: 64.5 KB
  • 大小: 22.9 KB
  • 大小: 12.9 KB
  • 大小: 33.7 KB
  • 大小: 27.5 KB
  • 大小: 18.4 KB
  • 大小: 54.8 KB
  • 大小: 35.8 KB
  • 大小: 11.6 KB
  • 大小: 48.5 KB
  • 大小: 62.8 KB
  • 大小: 23.8 KB
  • 大小: 30.4 KB
  • 大小: 26.4 KB
  • 大小: 32.2 KB
0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics