
2008年2月14日
马上过年喽,不知道大家是不是也跟我一样无心工作等放假~嘿嘿,提前拜年啦,年后公司要登记员工信息,我又得干活ing!忿啊~于是乎~我做了个员工登记表,这玩意看着简单,还是很需要实力的 哈哈哈哈哈哈,我这样的实力派,就把做法分享给大家,又需要的同学可以借鉴一下。其实这是个表需要填写完信息之后,直接保存到数据库里,就是所谓的填报是也~其实很简单。
数据库中的数据表我重新建了个表,把它命名为Employee,用来保存员工信息用。表中共有name,sex,birthdate,national,political,origin,height,weight,healthcondition,qualificationgs,school,major,address,zipcode,Email,tle,language,level,computer,graduatedate,reportdate,title,educationexperience,workexperience,photo,writedate等几个列。
打开设计器,先来新建一张报表,然后排好样式,比如下面这个。

打开报表|报表填报属性对话框。
点击智能添加字段按钮,用来将模板中的字段和数据表中的字段对应,可以自由选择所需对应的字段。
可选列中包含数据表中所有的字段,值对应模板中的数据字段,这里需要建立数据表中的字段和模板字段的一一对应关系,选择右边的智能添加单元格按钮,可选列自动选择name,值选择时只需要点击相应的单元格B3,单元格值就会自动传入对话框界面,这里还可以把姓名作为主键,然后依次当可选列选择性别,值选择对应D3,以此类推,birthdate对应F3,national对应B4,political对应D4,origin对应F4……这个样子~

填报属性就设置完成喽~
报表的填报属性设置完成后,需要设置模板中单元格的填报属性,选中B3单元格,右键选择单元格填报属性,设置单元格的填报属性,

然后就可以填报啦~~啊哈哈哈哈哈

在里面把自己记录写上,就可以保存到数据库里啦~怎么样~我是不是个人才呢~
不过~这个也是偷学来的~囧
关于这个要说的东西太多了,就作为第一部分先发给大家吧~
下按此讲什么呢~讲一下怎么智能显示出你想要写的内容好了~吼吼
我这么努力 大家要支持哦~
posted @
2009-02-04 14:19 javareport 阅读(333) |
评论 (1) |
编辑 收藏
好久没记笔记了,嘿嘿~太偷懒咯~这次写个刚学会的东东~就是我平时通过浏览器填写表格的时候,常常会遇到这样的情况,在选择省份之后,后面城市的内容要和该省份的城市对应==!。就是参数之间有关联的关系~第一个变了 第二个跟着变咯~不知道要通过什么参数进行相关设置,来达到参数连动的效果呢~~见本人制作过程~~嘿嘿~
下面就拿我上次做的省份城市的例子看一下~

就是上面这个效果啦~,当我们选择浙江省后,后面城市选择即为浙江省相关城市~是不是很神奇 嘿嘿~
制作过程来咯~
1.新建个报表数据集ds1,添加数据列

像上面这样哦~
2.设计报表,将ds1中的字段 省份拖拽到A5单元格中,保留其默认的扩展、分组并且扩展方向从上到下的设置。同理,将其它与标题呼应的字段拖拽到对应的单元格中,采用与A5同样的设置~同时在A6单元格中输入公式=sum(D5),对A5扩展出来的数据求和。设置完成之后就想下图这个样子啦~

3.添加数据字典:点击服务器,选择服务器数据字典。打开服务器数据字典后,点击左上角的 + ,选择自定义,分别添加"省份"、"城市"、"省份城市"三个数据字典。
4.通过插入行,对三个数据字典各自添加key(键值)和value(数值)。注意:"省份城市"数据字典中,key(键值)与"城市"数据字典key(键值)一致,value(数值)与"省份"数据字典中key(键值)一致。
5.在报表|报表参数中定义参数:
参数$Province,默认值为"江苏省",编辑器为下拉框,数据字典类型为服务器数据字典。数据字典的来源为刚刚自定义的名为"省份"的服务器数据字典;
参数$City,默认值为"南京市",编辑器为下拉框,数据字典类型为报表数据字典。数据字典的来源为刚刚自定义的名为"城市"的服务器数据字典。在过滤条件中,写入公式:=MAP($$$,"省份城市")==$Province。该公式中,"$$$"代表当前值,整个公式表示当前值(键值)在名字为“省份城市”的数据字典中,返回所对应的值与参数$Province的一一对应

双击A5单元格,数据列|过滤对话框中,添加参数为省份等于$Province,同理,双击B5单元格,在出现的数据列|过滤中,添加参数为城市等于$City,即给报表添加了两个参数控制。如下图所示:

这样就搞定了哦~
当选择省份之后,城市下拉框中所有选项都是该省份的城市,就是实现了参数连动~~
怎么样?这个也不难吧?呵呵~

posted @
2008-12-26 15:04 javareport 阅读(192) |
评论 (0) |
编辑 收藏
常常遇到这样的情况,数据库当中存储的数据都有一个时间戳。但是这个时间戳往往不是连贯的。例如我们下面将要提到的例子,比如一个员工业绩考核年报。假设一月份是假期,所有员工都没有业绩记录。那么按照普通的做法,在报表当中展示数据的时候,则不显示有一月这样一个月。
但是我们在查看数据的时候,往往希望一整年的数据是连贯显示的。但是这时,不可能通过修改数据库达到目的,就只能通过报表工具来弥补数据的不足。
下面是用FineReport做的一个例子:
该表的数据库结构很简单,共包含4个列,分别是编号,员工姓名,时间,业绩。按照普通的做法,就是将序号,员工姓名分别拖拽至单元格当中,设置纵向扩展。时间列设置横向扩展。数据放置到交叉的位置,也就是这是一个最简单的交叉表。
但是从效果图里面可以看到,1月是全部没有数据的。如果直接从数据库当中读取数据来展现,报表当中就不会有1月这一列。所以这里的连贯月份就需要我们用报表来实现。
在FineReport当中,有一个list的功能,也就是手工设置一串数据。这里我们就设置了一个list 从1到12。并且通过高亮将单纯的数字改成了1月,2月这样的形式。
然后当然,我们list出来的月份数据和统计数据需要通过关联达到准确计算的目的。这时候就需要在统计数据格子的过滤条件当中,添加关联的条件了。具体的大家可以参考附件的CPT文件。
因为是共享版面,所以无法直接上传附件,感兴趣的朋友可以留下自己的电子邮箱,然后我发到你的邮箱就可以咯~
posted @
2008-11-28 15:52 javareport 阅读(151) |
评论 (0) |
编辑 收藏
隔了好久又开始写学习笔记了,工作忙的差点荒废了做笔记,呵呵,自我检讨一下先吧。
这次的中级报表制作做什么呢,想了一下,还是做个不是很复杂的,举个用列名称控制显示列的例子好了。
我想要什么效果呢,就是数据库里存了好多的数据列,但是我不想都显示出来,只想要我想看的固定的那几个列,所以我就想要访问报表的时候,他把可以选看的列名称都显示给我,我可以自己选几个想看的列。
其实操作起来也不是很难的。老规矩,放个图先:

这个图里面,有六个列可以选,课程号,课程,年纪,姓名等等,但是我只想看课程号,名字和他们对应的性别,这里我就多选这三个列,得到的效果见下图喽~

废话不多说了,简单介绍下我的制作方法吧~
首先 把数据导入到Finereport里来。直接select * from StScore.
StScore这个表里有六个列: Class No, Name, Sex, Course, Grade, Student No.
然后新建一张空白的自由报表。 定义一个参数,名称为Para。类型选为复选框,如图:
然后我们来定义一个报表数据字典,选择定义|自定义,然后写入6个列名,分别为复选框中的可选项,确定。设置如下图:
在B2单元格中,写入一个公式:=split($para, ",")。意思就是啊在B1单元格中写入了一个函数split ( )。该函数在此处可以获取从参数中传入的列名作为值,并将每一个值写一个单元格。
然后我们鼠标选中B2单元格,将他设置为从左到右扩展。
在A3单元格中写入如下公式:=ds1.select(#0),这个公式的意义就是取得ds1数据源当中的所有行号。就是呢ds1当中有多少行数据,那么这个公式返回该结果的行号,1,2,3……
把A3单元格设置为从上到下扩展。
然后在B3单元格中写入如下公式:=ds1.column(b2),这个公式的意义就是要获取B2单元格所指定的列的列内容。其返回记录的排列顺序是按照A3当中所获取的行号进行排列的。
预览就有我们要的效果喽~搞定!嘿嘿~
中级的报表相对以前写的初级确实是多了很多步骤呢,也不知道自己描述的清不清楚~还有问题的同学欢迎提问喽~恩恩~
posted @
2008-11-07 14:52 javareport 阅读(190) |
评论 (0) |
编辑 收藏
自由分栏
最近忙了一阵子 教程有些日子没做咯~~ 有没有人期待啊 哈哈
说这次要进阶的 之前做的都是很初级的报表制作 几分钟搞定的事。
这次中级的做什么好呢 第一次的中级的就分享个相对不是很难的吧 做个员工档案卡
其实员工档案卡很简单 为什么要归到中级里呢 我想了一下
这里我要用到自由分栏 之前用别的方法试过 不是做不了 就是比较麻烦 所以这里归到中级里 也有这种问题的朋友可以看看 能不能帮到你
废话不多说了 老规矩 先放个图吧
就是这个预览效果哦~在我的工作中,常常会遇到把一片的数据进行分栏的情况,比如一片数据是一个标签的情况,不知道大家是不是也一样了。
用finereport来做这个表 难度其实也说不上有
先列一下我的制作过程吧
新建一个自由报表,导入数据源这些都不用说的吧 必做步棸哦~
然后我们画一个表样
象这样:

然后把相应的数据拖到对应的格子里 就成了这样:

把除了姓名这一格之外的格子的父格都设置为B2(包括A2 哦) 这样的效果就是一个名字对应一个性别 专业等信息 达到每一个姓名相关的记录都在同一片的目的。
然后我把得每一个标签都区分开来,也就是把整个连贯在一起的报表,添加空格。我的办法就是在是在A8这一行当中,选择任意一个单元格,右键,选择父格设置,将其左父格自定义为B2单元格,也就是每一个完整的数据标签下面,都会跟随一个空白的行,这样每一个标签,在行方向上就隔开了哦~o(∩_∩)o…看看效果吧
隔开了哦~嘿嘿
这时候预览报表,可以看到整个报表只占据了页面左侧的部分位置。并且由于长度超过了预设的A4纸大小哦……..所以这里就要开始分栏了~
选则finereport里的 报表|报表分栏 写一下开始分栏行列号 和结束的行列号
我们这里是从第1行到第8行 就写1 和8 就可以了
Ok 了哦~~搞定了
看下效果

这个分栏的效果就出来喽~
今天的课就到这里啦~有问题的同学尽管提哦~一起学习吧~
posted @
2008-09-01 15:49 javareport 阅读(137) |
评论 (0) |
编辑 收藏
说这次要进阶的 之前做的都时候很初级的报表制作 几分钟搞定的事。
这次拿到手要做的 居然又只是做一个收入支出的图表 又是一个初级图表
不过 这次有点不同的是 在这一张图表里 设置显示两种图表样式。
我选用了柱形图和折线图两种
感觉比较好的是 收入用柱形图 然后支出用折线 在饼图中折线把柱形图分隔成两端
那么上一段就是净利润哦 呵呵
废话不多说
老规矩 放个图

这张图跟之前做的基本没什么区别 具体的我就不啰嗦了
导入数据 插入悬浮元素图表 设置数据区域 配个色什么的
说说这里我注意到的地方吧
就是我在考虑一张图里有两中图表样式的解决方法
我看了一下FineReport的解决办法 双击图表 在出现的图表设置窗口 选择 其他样式
——编辑 (如图)

里面的默认样式 就是你选择的样式 这里我选择的是柱形图 样式序列里选择2
然后可以选择第2中图表样式了 我选择了柱形图 这个设置可以方便你选择多个样式出现在一个图表里 呵呵 我也是后来来发现的
然后确定 图表就自动出现两种样式了
这里本来想给finereport 提个建议的 是我有的时候会用到需要两个X轴刻度,左右各一个
这样做起来又会方便很多 本来打算再放各比例的图示的 不过这个小功能据说在新版本6.2里解决了

老样子 再放个设计视图
下期 我准备告别初级报表 做中级报表制作教程 总不能老不进步呀 是吧,
posted @
2008-08-05 13:52 javareport 阅读(146) |
评论 (0) |
编辑 收藏
老样子,先看下效果图

用FineReport 做这个简单的Newspaper Readership by Education Level 统计的折线图
这个统计,数据量很少,我还是手动输入的数据,选择插入悬浮元素图表,
我使用格子数据源,然后选择好X轴Y轴和系列名称
系列名称学习笔记里已经解释过了~不啰嗦了~
这个折线图的Y轴是百分比,所以双击图例,在坐标轴设置里的Y轴设置一下格式
格式我选择了0.00%,finereport里可以选择的格式有 日期型、时间型、货币型、百分比等等的……
X轴的单位标成year~
夏天天气好闷热 选个清凉点的配色。
下面放一个我的设计界面。
这个图表真的好简单==! 下期的我要进阶了,这么简单的,做起来都没激情。哈哈~

posted @
2008-07-30 15:06 javareport 阅读(121) |
评论 (0) |
编辑 收藏
先看下效果图

用FineReport 做个简单的Over age 65 population 统计,外加一个按性别区分的统计图
这个统计,因为数据量很少,我手动输入的数据,选择插入悬浮元素图表,
我使用格子数据源,然后选择好X轴Y轴和系列名称
这里的系列名称就是by sex 区分统计时 按male 和famale分两组的意思。
对了,做这个图的时候我考虑了好久,原来选择B5:C7就是B5到B7;C5到C7两排都选中,哈哈。很少用手动输入的数据源,都不敢确定了。
随便调了调字体啊背景啊,x轴的单位设置了一下
下面是我的设计界面。为了方便截图,插个两个比较小的图。
这个图表还是很简单的,跟之前的相对简单很多,慢慢来吧,从小事做起~

posted @
2008-07-24 16:12 javareport 阅读(119) |
评论 (0) |
编辑 收藏
继续我的报表图制作教程
之前用finereport做报表还都是比较初级的报表,现在稍微进阶了一些,呵呵。
新做的是销售量汇总的报表。老规矩,先放个图。


这样的一个图表跟我之前制作的稍微复杂了一点,
这里我导入了两个数据源ds1、ds2,FineReport支持在报表里面进行复杂的的多数据源关联,不需要拼SQL,像我这样两个数据源的关联是很简单的。
Ds1是记录销售人员姓名 产品类别 销售数量的数据源。
Ds2是记录了产品销售底线和产品名的数据源
把这几个数据列拖进格子里
其他的没什么特别
这里主要要展现了一个员工对于任务的完成情况,即计算他的销售任务完成比例
拖入销售底线那个数据列,然后双击格子,在其他里设置自定义显示的值为B6/$$$
意思就是用员工的产品销售量除他需要完成的底线。得到的就是他的任务完成情况了。
这里需要注意的是,销售量的格子双击一下,选择是被包含于产品类别的,这样出来的效果就是根据不同的产品列出来了。
下面就直接点击 选择插入图表了。
这里我做了两个图
一个是销售比例图,这个直接由产品类别和销售总量决定,勾选百分比,就可以了。
另一个是销售数量的图,这个图由三个数据源决定,一个是产品类别,一个是销售人员还有一个是销售数量
接着美化报表,选了个比较有质感的图做背景,哈哈,好看吧~
posted @
2008-07-11 16:10 javareport 阅读(373) |
评论 (0) |
编辑 收藏
这两天用finereport的报表工具又做了个系统告警排名的图,再分享一下体会吧
先把图放出来

这样一个图,其实做起来很简单,导入数据库数据,拖拽到格子里。选择插入图表。
这里我选用了柱形的3D图,感觉这样的漂亮些。细节的报表美化可以自己看着办喽,随便点点看看效果,背景插入图片啊,色彩统一一下。
选择报表参数,定义个dates,这样可以任意查看你想要查看日期的报表。
完成了,感觉还是那么简单。恩。
posted @
2008-07-08 13:38 javareport 阅读(215) |
评论 (1) |
编辑 收藏
用finereport做的报表,发些最近练手的报表图出来晒晒~



呵呵,还可以吧~
posted @
2008-06-25 15:14 javareport 阅读(224) |
评论 (0) |
编辑 收藏
这是一个24小时的CPU曲线图,每个采样间隔是10分钟。
从图里面可以看到统计指标分别是用户使用的cpu 、 系统使用的cpu 、 空闲cpu 和i/o,这四个指标之和是100%。
这个表最终展现就是这么一个图表,可以说设计方面就没有什么难度了。用FineReport做这个报表很简单,几乎是除了手敲一个标题,其他全部用鼠标操作,几步就好了。
因为数据源的结构很清晰,写SQL这一步也就省了,直接用FineReport的数据向导把需要的列取出来就行,当然加一个查询时间段还是需要动手写一个两句的SQL,不就是where to_date()……,再不会写SQL的人现在也会写了。 :)
把SQL里面选好的五个列,分别是时间,系统利用率,用户,空闲的,I/O的,依次拖拽到报表界面里面。用默认的设置就好了,改都不用改。
最后加个标题。要不然图表的图例没有啊。
当然,这个表只要体现图表,可以不用拖拽数据到报表里面,直接在图表里面选SQL数据源。不过,我更喜欢先把数据取到格子里面,再直接从格子里面读,简单明了。
当然,所有设计的工作完成了以后,要记着把格子里面的数据隐藏掉,否则就图表和清单一起展现了。
PS:因为数据量比较多很密集,如果X轴直接按照原始取点展示的话,下面就是一片黑色聚集到一起了,要设置一下,根据需要相同的年,月,日,时,分,秒都可以合并。
更多了解:www.finereport.com
posted @
2008-06-05 14:24 javareport 阅读(303) |
评论 (0) |
编辑 收藏
[img]http://finesoftware.k13.23dns.net/picFforum/pic1.png ][/img]
这是一个常见的能够衡量一台机器的繁忙程度的报表。
看似简单,也就是一张报表当中放置了多个图表。但实际上由于数据库的单表数据量近亿,直接取数据几乎是不可能的。
并且由于数据库表并不算科学,也就是要要做这个表,需要从四张不同的数据库表当中取数据。我埋头查了好久,才算把这个SQL搞定,贡献出来给大家分享一下。
Select
A.HOST as HOST,
B.PARAMETER.NAME as PARAMETER,
TO_DATE('1970-01-01','yyyy-mm-dd') + trunc(C.TIMESTAMP/(1000*60*60*24)) as DATES,
SUBSTR(TO_CHAR(TO_DATE('1970-01-01','yyyy-mm-dd hh24:mi:ss') + C.TIMESTAMP/(1000*60*60*24),'yyyy-mm-dd hh24:mi:ss'),12,2) as HOURS,
TO_NUMBER(C.VALUE) as VALUE
from
(select * from A where HOST='[?HOST|SERVER6?]') A inner join D D on A.GUID = D.HOST
Inner join (select * from B where B.PARAMETERNAME='CPU'
OR B.PARAMETERNAME='MEMORY'
OR B.PARAMETERNAME='DSKBUSY'
OR B.PARAMETERNAME='IO'
OR B.PARAMETERNAME='FSPERCENT'
OR B.PARAMETERNAME='FSSpace')) B on D.GUID = B.APPLICATION inner join C C on B.GUID = C.AGENT
where TO_DATE('1970-01-01','yyyy-mm-dd') + trunc(C.TIMESTAMP/(1000*60*60*24))>=TO_DATE('[?start|2008-04-05?]','yyyy-mm-dd')
and TO_DATE('1970-01-01','yyyy-mm-dd') + trunc(C.TIMESTAMP/(1000*60*60*24))<=TO_DATE('[?end|2008-04-12?]','yyyy-mm-dd')
在这个SQL里面,首先数据是存在oracle数据库里面的,我面对的第一个问题,就是数据库当中存储的时间都是时间戳,也就是距离1970年1月1号零点的毫秒数。需要将其转化为我们常用的yyyy-MM-dd格式。我一点感觉就是应该用to_date函数。但是只有一个to_date似乎是不能完成彻底的转化。
怎么办呢,google,baidu了无数,都没有找到答案,谁让我不懂什么SQL呢,书到用时方恨少!
一定要把我使用的查询关键词写出来,方便以后哪个兄弟用同样的关键词,至少能搜到我这个答案啊。“毫秒转化为时间”。当然大家肯定也看到了,我转化的方法就是TO_DATE('1970-01-01','yyyy-mm-dd') + trunc(C.TIMESTAMP/(1000*60*60*24))和TO_CHAR(TO_DATE('1970-01-01','yyyy-mm-dd hh24:mi:ss') + C.TIMESTAMP/(1000*60*60*24),'yyyy-mm-dd hh24:mi:ss'),12,2),这两者的区别就是,前者只取年月日,后者则将小时分秒都取出来。
日期型的问题解决了,然后又有一个严重的问题冒出来了,数据量太大,在PL/SQL里面执行,都需要花超过一小时的时间,这个肯定是不能让人接受的。我只好又埋头钻研SQL优化,当当当当,成功的把执行时间降低到了0.47秒!
主要的优化方法,就是把where条件,大部分放到inner join那里去做。说起来其实挺简单,是吧。
然后说说报表吧,这个报表是在一张表当中体现了四个图表,一个日趋势,其它三个都是周趋势。其中第一个图和第二图的统计的指标是一样的,分别都是CPU利用率,内存利用率和磁盘的利用率。这三个指标的组合往往能够代表一台机器的繁忙程度。
然后还有一个图是磁盘的忙率比率,以及文件系统的平均可用空间。
设计的方法就没有什么难度好说了,因为我用的FineReport,做这个报表就是小菜一碟了。直接把刚刚定义好的列拖过来,一个小时,一个日期,两个时间字段分别放到B3C3格子里面。左边A4到A8手工写上指标名字或者将库里面的指标名字拖来,中间拖数据过来。就OK。 然后直接插入图表,选择好数据区域就可以了。Just like excel~
当然,这个表要体现的图表,当然可以不用拖拽数据到报表里面,直接写SQL做图表了。不过,我比较懒,不想写4次SQL,所以,就先把数据拖过来,获得图表要体现的数据,再直接从格子里面读了。所以最后最后,我不想在报表里面看到数据,只要图表,隐藏数据区域就好了。就这么简单。
最后一点,在前面的SQL里面我想大家都看到了,这个报表是有参数的。对这太平常不过了,好像每一张报表都会有时间参数的,没有人说,我不管时间,只统计所有的结果吧。以前用别的工具的时候,有参数的报表,都需要通过自己手写一些JSP或者什么其他的,在页面里面把参数查询的框子弄出来。
但是我不得不重申一次,我比较懒,不喜欢什么都要自己写(当然写上面那个SQL,我也嫌麻烦,但是没办法啊,谁让数据量大呢,连Oracle自己查询都会out of memory)。如果参数可以通过拖拖拽拽,访问报表时候就自动会有这么一个参数页面,该多好。
听说汽车的发明是因为人懒得走路,那么我这种懒人,会不会促进软件越来越人性化呢?答案当然是。所以,就是说,我用的FineReport,是可以这样的。报表里面有什么参数,我只需要把它定位一个位置,访问报表的时候,就可以直接弹出或者有个内嵌的参数查询框子了。溜个图:
[img]http://finesoftware.k13.23dns.net/picFforum/canshu1.png ][/img]
具体怎么做,就不多说了,他们家软件的帮助文档写的挺详细的。有兴趣的可以到他们网站down一个看看。地址:www.finereport.com
posted @
2008-05-30 13:14 javareport 阅读(163) |
评论 (0) |
编辑 收藏
摘要: 平时我们在设计报表的过程中,在设计器界面我们通常把所需的列直接从数据源拖入即可。但对于返回不定列的数据集,之前的方法已不能满足我们的需求。假若在列数过多的情况下,一个个进行拖拽,相对比较麻烦;或者我们要定义固定返回几列,也不能立刻实现。下面介绍的动态列报表可以帮我们解决上述问题。
阅读全文
posted @
2008-02-18 16:15 javareport 阅读(483) |
评论 (0) |
编辑 收藏
摘要: 套打就是以背景图为字段填写的位置作准确的定位,一般用于打印支票,发票等等。
阅读全文
posted @
2008-02-14 09:35 javareport 阅读(505) |
评论 (0) |
编辑 收藏