本文为对帆软第八讲的问题深入并加深难度的总结;
视频连接
http://bbs.fanruan.com/plugin.php?id=threed_video:view&tid=67986&cid=10
/*
Navicat MySQL Data Transfer
Source Server : arvin
Source Server Version : 50624
Source Host : localhost:3306
Source Database : creek
Target Server Type : MYSQL
Target Server Version : 50624
File Encoding : 65001
Date: 2017-06-16 16:16:46
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for month_selll
-- ----------------------------
DROP TABLE IF EXISTS `month_selll`;
CREATE TABLE `month_selll` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`month` varchar(2) DEFAULT NULL,
`sell` double(10,2) DEFAULT NULL,
`year` varchar(4) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;
-- ----------------------------
-- Records of month_selll
-- ----------------------------
INSERT INTO `month_selll` VALUES ('1', '2', '1200.00', '2010');
INSERT INTO `month_selll` VALUES ('2', '3', '5462.21', '2010');
INSERT INTO `month_selll` VALUES ('3', '4', '2545.58', '2010');
INSERT INTO `month_selll` VALUES ('4', '5', '5454.55', '2010');
INSERT INTO `month_selll` VALUES ('5', '6', '4794.32', '2010');
INSERT INTO `month_selll` VALUES ('6', '7', '5797.00', '2010');
INSERT INTO `month_selll` VALUES ('7', '1', '2564.30', '2011');
INSERT INTO `month_selll` VALUES ('8', '2', '4564.56', '2011');
INSERT INTO `month_selll` VALUES ('9', '3', '4156.55', '2011');
INSERT INTO `month_selll` VALUES ('10', '4', '2412.25', '2011');
INSERT INTO `month_selll` VALUES ('11', '5', '4543.15', '2011');
INSERT INTO `month_selll` VALUES ('12', '10', '1500.00', '2015');
依据图中将年份、月份、销售额三个字段放入,并添加需要计算的样式。
B2的父格:A2
C2的父格:B2
D2、E2、F2、G2、H2的父格:C2
A3、C3的父格:A2
直接贴出各个计算单元格的公式,具体理解请参照连接。
Finereport公式不区分大小写。
D2:C2-C2[B2:1]
E2:c2/sum(c2[!0]{A2=$A2})
F2:if(&B2>1,c2/c2[B2:-1],0)
H2:G2[B2:-1]+C2
C3:if(&A2=1,G2[B2:-1]+C2,if(&B2=1,c2+h2[A2:-1,B2:!-1],c2+h2[b2:-1]))
公式解释:
C2[B2:1]:拿到B2单元格扩展出来的第一个值对应的C2单元格的值(可以理解为下标,或一维坐标);
c2[!0]:拿到C2单元格扩展出来的所有值;
$A2:表示A2单元格的值;
&B2:扩展后每个单元格的位置,返回int型,如1,2,3,4等;
{}:表示限制条件;
c2[B2:-1]:拿到B2单元格扩展出来的上一个值对应的C2单元格的值;
c2[B2:!-1]:拿到B2单元格扩展出来的最后一个值对应的C2单元格的值;
h2[A2:-1,B2:!-1]:拿到①A2单元格扩展出来的上一个值,②且B2单元格扩展出来的最后一个值同时对应的h2单元格的值(类似于二维坐标);
if(expr1, expr2, expr3):如果expr1为true,返回expr2,否则返回expr3