fineReport学习记录

一.学习层次坐标课程中(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个数

A1[A1:-1]:返回对应上一个A1纵向扩展出来的值

C1[B1:-1]:返回以B1为父格的上一个C1纵向扩展出来的值

A1[;A1:-1]返回对应上一个A1横向扩展出来的值

A1[A1:+1]返回对应下一个A1纵向扩展出来的值

A1[A1:1]返回A1纵向扩展出来的第一个值

C1[B1:1]返回B1扩展出来的第一个值对应的C1的值

A1[;A1:1]返回A1横向扩展出来的第一个值

C1[A1:2,B1:3]返回A1扩展出来的第二个值对应的B1扩展出来的第三个值对应的C1的值

A1[A1:!-1]返回A1纵向扩展出来的最后一个值

下面为跟着视频做的案例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})

注意:不明白上面的公式含义,特别是跨层累计和统计个数的公式写法。

 

文本函数:

FIND()从指定的索引处开始,返回第一次出现的指定子字符串在此字符串中的索引

FORMAT()按指定的规则将对象格式化为字符串

LEN()返回文本字符数或者数组的长度

SPLIT()分割字符串为数组

REPLACE()用其他文本来代替原始文本中的部分内容

 常用函数

举例:

 

二。主子报表

下面是两个子报表:

订单统计表
订单编号:    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可以达到同样效果)

          作用在‘当前行或列’上表示作用在单元格上,作用在‘当前格’表示单元格中的文字

对单元格显示方式设置,另一种方法:双击单元格-高级-自定义-IF($$$,'已付','未付')   $$$表示单元格的值为TRUE,该语句表示如果是TRUE就显示已付,否则显示未付

 

四。数据决策系统中用户权限设置

 

 上图中对锁的设置中,若设置该用户没有任何权限,点击两次我上图圈住的锁即可实现该功能。这是因为‘平台目录’是下面的父目录。如果要开启某个功能,可以点击下面的某个功能对应的锁。

 

五。为图标添加事件,比如 自动轮播事件

https://help.finereport.com/doc-view-2663.html

代码:

setTimeout(function(){
var vanchart =FR.Chart.WebUtils.getChart("chart0").getChartWithIndex(0);
vanchart.openAutoTooltip();
},3000)


代码中chart0为空间名称,需要根据我们实际情况对哪个图表设置来改名

跑马灯效果:
https://help.finereport.com/doc-view-2393.html 该效果涉及冻结标题行,所以需要先对标题进行设计

六。帆软市场 下载多种实现好的模板、插件,本地安装:https://market.fanruan.com/
另外也可以在线安装https://help.finereport.com/doc-view-2198.html


七。分栏显示:https://bbs.fanruan.com/lesson-981.html

如上图方框内写的函数,设置各列的显示方式
posted @ 2020-04-12 10:34  巴拉巴拉程序猿  Views(742)  Comments(0Edit  收藏  举报