金融其它商业智能

这样的业务如何建模和建报表

公司情况描述:某公司有多个部门,分为三层:一级部门->二级部门->三级部门,三个部门之间的关系是:一个一级部门可有有0个或多个二级部门,一个二级部门可有0个或多个三级部门。每个部门都有员工,有的员工属于一级部门,有的员工属于二级部门,有的员工属于三级部门;某个员工可同时跨部门...显示全部
公司情况描述:
某公司有多个部门,分为三层:一级部门->二级部门->三级部门,三个部门之间的关系是:一个一级部门可有有0个或多个二级部门,一个二级部门可有0个或多个三级部门。
每个部门都有员工,有的员工属于一级部门,有的员工属于二级部门,有的员工属于三级部门;
某个员工可同时跨部门身兼数职;
公司每年都会对员工进行考核,若员工工作成绩突出,可以安排到国外深造。

考核流程:
1.        对员工的岗位表现进行考核,若员工身兼数职,则对其各个岗位分别考核,若通过的岗位越多,则被批准出国的机会越大。
2.        考核通过,则向全体员工进行公示,其它员工可根据被考核员工进行意见反馈。
3.        一个人可对被考核员工反馈多次,各次反馈都有效。比如某个人对考核通过员工反馈了两次,一次优秀,一次差,两次反馈都有效。
4.        人事部经理根据考核指标及员工对被考核员工的反馈情况,决定员工是否可以出国深造。

表结构:
1.        部门表:
(一级部门ID,二级部门ID,三级部门ID,一级部门名称,二级部门名称,三级部门名称);
数据举例:
(010000,010100,010101,市场营销部,技术支持中心,售前组)
                   (010000,010200,null ,售后服务部,售后一部):表示该部门没有三级部门
(020000,020100,020101,研发事业部,研发一部,研发一组)
                   
2.        员工表(员工ID,员工名称,所属部门ID,身份证号);
数据举例:
(’0000001’,’张三’,’010101, 010200,020100’,’132348198412035342’);
其中所属部门ID,即010101, 010200,020100,表示该员工身兼三职,分别是市场营销部->技术支持中心->售前组担任职务、市场营销部->售后一部、研发事业部->研发一部担任职务;

3.        考核通过员工表(员工ID,员工名称,所属部门ID,考核通过时间)
数据举例:
                (’0000001’,’张三’,’ 010101,020100’,’2010-8-23’);
        上面这条记录表示张三通过了考核,但通过考核的是它作为市场营销部->技术支持中心->售前组和研发事业部->研发一部两个岗位因表现出色考核通过,而在售后服务部->售后一部岗位表现不出色,考核没有通过。
4.        考核通过员工意见反馈表(被考核员工ID,员工表现评级,反馈员工ID,反馈时间)。
数据举例:
(’0000001’,1,2010-8-29,’0000002’);
5.        员工表现评级表(评级ID,评级名称);
数据:
(1,优秀),(2,良好),(3,一般),(4,差),5(非常差)

业务描述:
公司要求对以上信息用cognos建模成cube,然后可以在cube之上利用rs制作多张报表,可支持钻取,旋转等。并可进行多维分析。


对该cube,用户提出一张报表需求,统计各个部门各有多少个人,

公司的一张报表需求,结构大致如下:
查询条件:时间 从。。。到。。 查询
查询结果:
(部门ID,拥有员工数,考核通过数,反馈评级优秀数,反馈评级其它数)。
即想看各个部门有多少员工,在指定时间内考核通过了多少人,反馈了多少人。

要求:
1.        支持对部门的上钻下钻
2.        统计的度量都是是人头数(按身份证号排重),比如,上面张三,统计“部门员工数”时,下钻到二级部门时,因在技术支持中心和售后一部都担任职务,因而在在两个部门分别计为1,但上钻到一级部门(市场营销部)时,就需要按其身份证号排重,只计为1,而不是2。
3.        反馈评级数意思是:考核通过人中,有多少人被反馈是优秀的。
4.        条件匹配:考核通过数和反馈评级数的匹配字段不同:
        考核通过数,用考核通过时间进行匹配。
        反馈评级优秀人数和反馈评级其它(反馈为优秀以外的评级)数,用反馈时间进行匹配。
这相当于三个查询(部门ID,拥有员工数)、(部门ID,考核通过数)、(部门ID,反馈评级优秀数,反馈评级其它数),然后把他们按部门ID拼接在一起。


问题:
1.        请问如何建立cube?关键是员工表和考核通过表的所属部门ID不完全相同。好像这三张表,应该分成独立的两个业务模块,对应两个事实表,员工表独自一个模块,员工表是事实表,而考核通过员工表和考核通过员工意见反馈表两个表作为另个一模块,这两个表一起作为事实表。而报表也是由三个查询合并而成的。
那么,
        两个独立的模块是建成一个cube还是两个独立的cube?
        若建成一个cube,如何建立?都有哪些维度和度量?关键是员工表的所属部门字段,内容不同,考核通过员工表的部门ID是员工表的一个子集。部门维度如何建立?是为两个事实表分别建立部门维度,然后在rs中做三个查询,(员工表的部门维度,员工数)、(考核通过员工表的部门维度,考核通过数)、(考核通过员工表的部门维度,反馈评级优秀数,反馈评级其它数),然后三个查询之间建立关联?两个事实表放在一起,并且维度和度量混合在一起,是不是不太容易理解,而且容易出错,比如业务人员随意建立了一张表(员工表的部门维度,反馈评级优秀数),这样相当于取了两个表字段的笛卡尔积,没有任何意义。
        若建立成两个独立的cube,即员工cube,考核cube,然后在跨cube的查询之间建立关联关系。即,员工cube上建立一个查询:(部门ID,拥有员工数),考核cube上建立两个查询:(部门ID,考核通过数)和(部门ID,反馈优秀数,反馈其它数),然后在这三个查询之间做合并操作。这种跨cube建立关系的方法能否做到?如何做?若能做到,两个cube分别有哪些维度和度量?
        两个查询之间(不管是cube内还是跨cube)如何建立关联关系,并合并成一个查询?
        合并时,日期提示,是取哪个维度的哪个日期?如何建立过滤?好像取哪一个都不合适,此时该怎么处理才好?
        对机构维度的身份证号排重问题如何实现?要求既能钻取,又能实现度量按身份证号排重,如何做到?
        上面的讨论都基于一个方法,查询关联及合并,有没有其它的方法?是不是我的思路一开始就错了?有没有更好的处理办法?
        上面的报表的度量,是通过数据层建立好,还是在建立报表时通过计算得到?


还望能给出比较具体的(不必非要一步一步的)的建模思路?焦急等待中,望各位版主给出指导意见收起
参与6

查看其它 5 个回答ouliu58的回答

内容挺多哇 一会再思考一下。。顶下先。。
2010-08-29
浏览670

回答者

ouliu58 最近回答过的问题

回答状态

  • 发布时间:2010-08-29
  • 关注会员:0 人
  • 回答浏览:670
  • X社区推广