一.学习层次坐标课程中(https://help.finereport.com/beginnerguide-view-16),查询表内容数据库语句如下:
select STRFTIME('%m',订购日期) as 月份,应付金额
from 订单
where STRFTIME('%Y',订购日期)='2011'
表示从‘订单’表中查询‘订购日期’的年份为2011年的月份以及应付金额。
注意:订购日期 原始格式为 2010-01-01 00:00:00 这样表示,%m表示从订购日期内容中提取出月份,%Y表示提取出年份。 注意大小写,必须年份是大写,月份是小写。
.层次坐标常用公式
cell表示列号,x表示行号
cellx[!0]:获取单元格cellx扩展出来的所有值
cellx[!0]{条件表达式}:A1[!0]{A1!=3} 取出A1单元格中扩展出来的所有值中不等于3的数
&cellx:&A1 得到A1单元格扩展出来后每个值对应的位置
$cellx: $A1 获取A1单元格的值
cellx[celly:-z]:获取扩展单元格celly当前位置有一定偏移的位置上的值,-z表示相对后移,+z表示相对前移
如:A1对应为range(5),B1=A1[A1:-1] 表示A1对应列为1 2 3 4 5,B1为对A1列后移一位,即空 1 2 3 4
cellx[celly:z]:取单元格celly扩展后某一位置上,cellx对应的值。 z表示正数第z个数,!-z表示倒数第z个数
下面为跟着视频做的案例1:
A B C D E
1 月份 应付金额 比较 占比 环比
2 ds1.G(月份) ds1.求和(应付金额) =B2-B2[A2:1] =B2/sum(B2[!0]) =IF(&A2>1,B2/B2[A2:-1],0)
比较:B列中:第n行数字比n-1行数字相差多少
占比:B列中:第N行数字占该列数字总和比例
环比:B列中:每行数字占上一行数字的比例,默认第一行数字占第一行数字比例为0
注意:中括号 里面为什么是A2而不是B2?取的是B2列中的值,但为什么是相对A2列中的位置取值??
我觉得是因为B2单元格是依据A1单元格为左父格所得到的,并且该单元格是求和得到,所以后面的公式依据依然是A1.
案例2:
A B C D E
1 年份 月份 应付金额 逐层累计 跨层累计
2 ds1.G(年份) ds1.G(月份) ds1.求和(应付金额) =C2+D2[B2:-1] =IF(&B2>1,C2+E2[B2:-1],C2+E2[A2:-1,B2:!-1])
3 应付金额大于2500的月份个数 =COUNT(C2[!0]{A2=$A2 && C2>2500})
注意:不明白上面的公式含义,特别是跨层累计和统计个数的公式写法。
二。主子报表
下面是两个子报表:
订单统计表
订单编号: ds1.G(订单ID)
订单日期: ds1.G(订购日期) 发货日期: ds1.G(发货日期)
客户编号: ds1.G(客户ID) 客户名称: ds1.G(货主名称)
地址: ds1.G(货主地址)
到货日期: ds1.G(到货日期) 应付金额: ds1.G(应付金额)
订单明细
产品 单价 数量 折扣 销售额
ds2.S(产品ID) ds2.G(单价) ds2.G(数量) ds2.G(折扣) =B12*C12*(1-D12)
最终显示为:
注意:设置 订单统计表 的所有元素的左父格均为ds1.G(订单ID),ds2.S(产品ID) 的左父格也是ds1.G(订单ID)
每页显示一份子报表,选中 ds2.S(产品ID)-单元格属性中选择‘其他’-行后分页 则表示在该行以后分页显示
订单明细表与订单统计表相关,所以设置ds2.S(产品ID)-双击-过滤-订单ID等于订单编号 一定要点击‘添加’才能生效
三。条件属性
右边列工具栏中有 条件属性-添加条件-编辑内容
注意:获取行公式:ROW()%2==0 表示偶数行 (ROW()%2=0可以达到同样效果)
作用在‘当前行或列’上表示作用在单元格上,作用在‘当前格’表示单元格中的文字