蓝色翔翼  
公告
日历
统计
  • 随笔 - 2
  • 文章 - 0
  • 评论 - 19
  • 引用 - 0

导航

 

置顶随笔

摘要: 这是我在博客园的第一篇文章,讲诉我与计算机结缘的过去与未来,期望各位过来人多多指点。我来自广州的一所985大学,会计专业,但一直对计算机有着浓厚的兴趣。大学期间的大部分课余时间都躲在图书馆里面看计算机的书,通过了软设的考试,也获得过些不知名的计算机设计比赛奖项。 其实当年准备了好久打算转专业去计算机,后来各种原因也就没去,但我自己还是坚持学习计算机,有时候甚至感觉本末倒置,在图书馆的时间基本都是在自然科学阅览室那几个靠近计算机专栏的位置。这几年的时间里,我也基本看完了计算机本科专业的课程,从原理性的到实操性的,从简单的到高深的,更多时候感觉自己倒是个软件专业的学生。 实话说,动力来自兴趣与压力阅读全文
posted @ 2010-12-18 22:33 蓝色翔翼 阅读(1067) 评论(13) 编辑

2011年1月5日

    最近在开发一个人力资源系统,涉及到其中的绩效方面感觉相当纠结,情况如下:
    客户自己的系统会导出excel文件,格式示例如下:
编号     年份   1月 … 12月   1季度 … 4季度 上半年 下半年 全年
00001 2009   A      B         B         A        B       B       A
00002 2009   B      C         B         C        A       B       B
00003 2009   C      B         A         B        B       C       B

其中的ABC等字母代表成绩数字,如A代表10分、B代表9分之类,然后要求计算绩效成绩,
公式要求为:成绩=1*月分数+3*其他分数
本来这也很简单,直接在excel右边添加一列,用excel写个公式算,太简单了。。。
但情况远远复杂得多:
1、客户要求可以按简单的条件进行筛选,如计算2009年至少有4个A以上的员工的最终成绩,那直接用excel算几乎就无能为力了;
2、客户希望选择的时间范围比较灵活,如可以选择“从2008年7月至2009年3月”之类,这其中除了包括月份之外,还会有季度、半年、全年数据;
3、更纠结的是,月份的权重不同,“3个月份才等于其他区间”,即3个月份的A才相当与1个季度的A,所以在筛选和计算时就要进行特殊处理。

简化后的主要问题就是上面所述的3种情况。
在此,我简述自己的处理方法,虽然可以勉强实现,但总觉得不甚好,期望各位高手指点。

第1步、由于数据量很大,所以我将excel数据表导入到sql server中;//本来之前是用access,但为了第二部的pivot,后来采用mssql
第2步、为了处理筛选条件,我觉得需要反转表,使用了下面的T-SQL语句:

 

代码
select 员工编号,年份,类型='月份',期间,分数
from ABC1.dbo.jixiao
unpivot
(分数
for 期间 in
(
[1月],[2月],[3月],[4月],[5月],[6月],[7月],[8月],[9月],[10月],[11月],[12月])
)
as unpvt
union
(
select 员工编号,年份,类型='季度',期间,分数
from ABC1.dbo.jixiao
unpivot
(分数
for 期间 in
(
[1季度],[2季度],[3季度],[4季度])
)
as unpvt)
union
(
select 员工编号,年份,类型='半年',期间,分数
from ABC1.dbo.jixiao
unpivot
(分数
for 期间 in
(
[上半年],[下半年])
)
as unpvt)
union
(
select 员工编号,年份,类型='全年',期间,分数
from ABC1.dbo.jixiao
unpivot
(分数
for 期间 in
(
[全年])
)
as unpvt)

 

 

通过一定处理后,使表格式变为:
编号     年份    区间   类型   分数
00001 2009    1      月     A
00001 2009    2      月     B
… … … … …
00002 2009    1    季度    B
00002 2009    2    半年    A
00002 2009    1    全年    A

这样之后,我就可以进行筛选,如“选择2009年月份中至少有3个A”

SELECT [编号] FROM 绩效统计 WHERE [分数]>=’A’ And ([年份]=2009) GROUP BY [编号] HAVING int(count(IIf(类型='',1))/3+count(IIf(类型<>'',1)))>=3)
///access的sql语句,mssql的要相应修改下

因为这样处理之后就可以用GROUP BY/HAVING来进行筛选

第3步、在第二步筛选的基础上作为子查询,再进行成绩运算

SELECT Sum(IIf(类型='',1*分数,IIf(类型='季度',3*分数)))/(Sum(IIf(类型='',1,IIf(类型='季度',3)))) + Avg(IIf(类型='全年',分数,IIf(类型='半年',分数)))
from (子查询)
///access的sql语句

以上是自己的方法,感觉不甚好,希望可以抛砖引玉,高手指点下哈。

posted @ 2011-01-05 21:53 蓝色翔翼 阅读(313) 评论(6) 编辑

2010年12月18日

      这是我在博客园的第一篇文章,讲诉我与计算机结缘的过去与未来,期望各位过来人多多指点。

      我来自广州的一所985大学,会计专业,但一直对计算机有着浓厚的兴趣。大学期间的大部分课余时间都躲在图书馆里面看计算机的书,通过了软设的考试,也获得过些不知名的计算机设计比赛奖项。

      其实当年准备了好久打算转专业去计算机,后来各种原因也就没去,但我自己还是坚持学习计算机,有时候甚至感觉本末倒置,在图书馆的时间基本都是在自然科学阅览室那几个靠近计算机专栏的位置。这几年的时间里,我也基本看完了计算机本科专业的课程,从原理性的到实操性的,从简单的到高深的,更多时候感觉自己倒是个软件专业的学生。

      实话说,动力来自兴趣与压力。没有兴趣,我坚持不了这么久。我一直很好奇各种计算机的技术,所以虽然接触的时间晚,但我一直乐此不彼。压力则来自现实的竞争,名校里面的牛人让人羡慕也让人妒忌,但我不想只有妒忌的份,所以我也选择了计算机做自己的突破口。

     很多时候,其实很茫然,尤其是一开始。大一大二,着手学习计算机,C++、数据结构、操作系统之类的,难免繁琐枯燥,又很难很快啃下。感觉自己落下本专业的课程,却学着这些很自己想象不甚一样的东西,难免心生放弃。身边同学也疑惑,我放弃了社团活动和一些周末,学着这么不相关的东西究竟有何意义。

     我也一直在想有何意义。似乎大家的精力都花在英语或者社团上,计算机的确是个在会计人眼里没有地位的辅助性工具。英语学好了,大家都规划着去外企;计算机学好了呢,像我这样又达不到一定水平,不伦不类?但我还是熬着看完了这2年的计算机基础课程,还好本专业的成绩并没有落下。

     很长一段时间内,我只是很零散地学着计算机的课程,再后来心血来潮,就以软件设计师考试为提纲来进行学习。但我不知道就算过了这个证又能如何,简历上可以花俏点?转行做计算机?其实自己也不甚清楚,好在我自己还有坚持下去。

     事情转机在大三的上学期,老师居然通知有家很大的会计师事务所要来会计专业找个会计算机的人帮忙开发系统。平时什么活动基本都不会轮到我的,但这次基本却也就只能我去。还是很心虚,毕竟都没真正意义碰过什么项目。

    结果却很意外,财务与计算机的复合或许真的可以成为亮点,很受宠若惊地得到了对方的赞许。虽然很辛苦地开发了几个月,虽然最终成果并不是特别满意,但我却因为这次实习得到了很多的肯定,而且关键是在与企业的实际接触中逐步明确了自己的目标。

    我现在已经很清楚地知道,我应该走计算机应用的道路。所以我不再纠结于是否专研算法,是否参加ACM,我想着把有限的精力放在数据库系统开发。我要做一个快速数据处理分析的复合人,尤其是在财务领域。

    数据分析应当包括收集、转换、分析和展示,当然也需要平台来承载这所以的一切。很久之前用的一直是VC6,现在也适合潮流改学C#跟.NET,并把相应的国外著作都专研了几遍,我不想再做那个曾经的一知半解的我了。数据库方面则从简单的EXCEL到ACCESS,再到SQL SERVER。从VSTO到ADO.NET,再到水晶报表等,都是我的学习内容。

   很庆幸自己的找工还算满意,挺早就确定回家乡的移动工作。剩下的时间,我不想做传说中的猪,于是我跟着考研的人一道,还是每天在图书馆的那个位置,期待自己能够坚定地走下去。

   在博客园的第一篇日志,还望各位过来人指点。  

posted @ 2010-12-18 22:33 蓝色翔翼 阅读(1067) 评论(13) 编辑
  
 
Copyright © 蓝色翔翼 Powered by: 博客园 模板提供:沪江博客