finereport第一个报表
finereport第一个报表
报表设定步骤
设计过程中遇到的问题总结
-
数据集设定问题
1.1 尽可能在SQL语句中,过滤掉不必要的数据,提升数据读取效率
1.2 可以在数据集SQL里,设定参数,以验证数据结果
1.3 对于finereport自有的参数,必须是 引 用 , 字 符 型 的 , 必 须 ′ {}引用,字符型的,必须 ' 引用,字符型的,必须′{}’
1.4 对于finereport自有的函数,要做参数使用,必须先在参数模板设定参数,公式引用该函数,再在SQL语句中类似其自有参数格式引用即可 -
不同数据集字段联动问题
2.1 系统默认,关联相邻左字段实现数据联动。
2.2 对来自于不同数据集的数据联动,必须通过过滤条件,指定到对应的单元格【只要需要根据报表数据进行关联的,都必须在单元格内体现,若是不需要体现在报表里,只要设定为隐藏列即可】
2.3 当数据量大时,使用过滤条件过滤数据可能无法实现,需要使用动态参数注入方式(动态参数注入是在SQL时根据条件实现过滤;过滤条件是数据读取后,在报表实现过滤。读取数据量不同)【当时因为只是用了过滤条件,系统产生数据量大的报错】 -
参数过滤问题
3.1 需要作为查询条件存在的,都必须到参数模板进行参数设定
3.3 待将全部设定的参数,在报表参数去全部引入后,必须逐一指定每个参数的控件属性,若要指定默认值,需在控件值进行指定【当时做错,以为此处是指定和数据库关联字段】;此处的控件属性,只指定了在查询条件这里要什么
3.4 参数后,统一将参数条件,设定在第一个过滤字段即可【当时将每个过滤字段都去设定,后经顾问指点,全部放到销售订单处指定过滤条件(过滤条件也就是报表执行时合并的sql where条件)】
-
数据分级权限问题
4.1 要实现的数据权限分级逻辑为:原始数据创建人(机构工程师),只能查询自己创建的数据;对应产品线的PM,可以看该产品线下的所有数据;该部门一级主管及PMC可以看所有数据
4.2 在部门下面,建各产品线为子部门,职务指定PM、PJM、工程师等
4.3 工程师与原始数据申请人实现关联过滤;PM则需要两个关联:子部门与产品线关联,职务指定
4.4 在finereport,如上建立了多层级部门,数据在帆软的格式为:一级部门,二级部门;而在SQL查询时“,”是不认的。过在通过函数获取时,同时将",“替换为” ‘,’ "
4.5 用了if语句(类似excel的if,即if(条件,true(结果1),false(结果2) ))
i f ( p o s t = = " 研 发 P M C " ∣ ∣ p o s t = = " 研 发 一 级 主 管 " ∣ ∣ d e p t = = " 资 讯 中 心 " , " " , " a n d ( p e r s o n . f d l o g i n n a m e = ′ " + f i n e u s e r n a m e + " ′ " + " o r p t l i n e . p t l i n e 1 d e s c i n ( ′ " + d e p t + " ′ ) a n d ′ P M ′ i n ( ′ " + p o s t + " ′ ) ) " ) 4.6 在 f i n e r e p o r t 中 , 在 S Q L 写 入 {if(post=="研发PMC"||post=="研发一级主管"||dept=="资讯中心","","and(person.fd_login_name = '"+fine_username+"'"+" or ptline.pt_line1_desc in ('"+dept+"') and 'PM' in ('"+post+"'))")} 4.6 在finereport中 ,在SQL写入 if(post=="研发PMC"∣∣post=="研发一级主管"∣∣dept=="资讯中心","","and(person.fdloginname=′"+fineusername+"′"+"orptline.ptline1descin(′"+dept+"′)and′PM′in(′"+post+"′))")4.6在finereport中,在SQL写入{},是finereport独有的,${}是执行finereport条件然后将结果在SQL where实现