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

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

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

比上期和同期比

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

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

  比上期代码如下:
集算器协助报表工具实现跨行运算

  先用SQL进行分组汇总,计算出每年每月的销售额,再用公式“当月销售额/上月销售额”计算比上期。结果如下:
集算器协助报表工具实现跨行运算

  同期比代码如下:
集算器协助报表工具实现跨行运算 

  用SQL对分组后的数据按月份、年份排序,再用公式“当月销售额/上一年同月份销售额”进行计算,结果如下:
集算器协助报表工具实现跨行运算

每月累计销售额

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

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

  先用SQL进行分组汇总,计算出每个销售员每年每月的销售额,再进行跨行计算,用公式“当月累计=本月销售额+上月累计”。结果如下:
集算器协助报表工具实现跨行运算 

单账户各期余额

  data.csv存储着某账户各期资金存取情况,初始余额为45,需要根据该文件计算出各期余额,部分源数据如下:
集算器协助报表工具实现跨行运算 

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

  以逗号为分隔符读入文件,按照公式“上期余额-本期存款-本期取款”为公式计算本期余额,结果如下:
集算器协助报表工具实现跨行运算

多产品每日库存

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

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

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

  假设时间是间断的,则需要将数据先按不间断的时间序列对齐,再计算库存,代码如下:
集算器协助报表工具实现跨行运算 

贷款分期

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

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

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

不规则跨行占比

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

  期望的报表如下:
集算器协助报表工具实现跨行运算

  集算器代码如下:
集算器协助报表工具实现跨行运算 

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