上传的图像用于项目: 'CST技术支持'
  1. CST技术支持
  2. SLAL2-2502

【PRO-夏尔天逸】PRO报表SQL语句编写

XMLWord打印

    • Icon: 任务 任务
    • 解决结果: 完成
    • Icon: High High
    • 202105
    • X-成都夏尔-Y2020042
    • xiaertest
    • 基础通用功能
    • 隐藏

      1. 由于需要取得各时间点的 员工分组统计,取时间轴数据,抽取所有emp.job表的信息,通过对报表增加过滤组件,对字段start_date & end_date进行过滤设置,已达到取某个时间点的emp_job信息。例如: start_date<= 某个时间点 <= end_date
      2. 需要抽取员工的字段信息参考 附件中截图的数据集
      3. 增加字段【统计部门】,该信息为员工身上部门的最上级部门,该处需要递归查询
      4. 仅抽取 业务单元为 艺术设计中心(BU002),以及部门为3D角色部(BP007)的员工信息
      5. 透视表中的比例,当前功能貌似不可实现?:
      sql:
      WITH RECURSIVE dep_level_view AS (
      select
      eroad_index_id as cid,
      dep_trans.value,code,
      ARRAY[dep_trans.value] as name_list,
      ARRAY[eroad_index_id] as path_ids,
      FALSE as is_cycle
      from hr_department
      left join ir_translation dep_trans on dep_trans.res_id=hr_department.id
      and dep_trans.name ='hr.department,name'
      and dep_trans.lang='zh_CN'
      where
      eroad_index_id is not null and
      eroad_start_date <= current_date and
      (eroad_end_date >= current_date or eroad_end_date is null) and
      not is_virtual_org and status = 'active' and active and
      parent_department_id is NULL
      UNION
      SELECT
      dep_table.eroad_index_id as cid,
      dep_transt.value,
      dep_table.code,
      dep_level_view.name_list || dep_transt.value as name_list,
      dep_level_view.path_ids || dep_table.eroad_index_id as path_ids,
      dep_table.eroad_index_id = any(dep_level_view.path_ids) as is_cycle
      FROM hr_department dep_table
      left join ir_translation dep_transt on dep_transt.res_id=dep_table.id
      and dep_transt.name ='hr.department,name'
      and dep_transt.lang='zh_CN'
      JOIN dep_level_view
      ON dep_table.parent_department_id = dep_level_view.cid and not dep_level_view.is_cycle and
      dep_table.eroad_index_id is not null and dep_table.eroad_start_date <= current_date and
      (dep_table.eroad_end_date >= current_date or dep_table.eroad_end_date is null) and
      not dep_table.is_virtual_org and dep_table.status = 'active' and dep_table.active
      )
      SELECT
      dep_level_view.name_list[1] 统计部门,
      emp.id,
      emp_job.active,
      emp_job.status,
      emp_job.eroad_start_date AS start_date,
      CASE WHEN emp_job.eroad_end_date is null THEN to_date('9999-12-31','YYYY-MM-DD') ELSE emp_job.eroad_end_date END AS end_date,
      emp.employee_number, – 员工工号
      emp.name AS emp_name, – 员工姓名
      CASE emp_status.name
      WHEN 'Active' THEN '在职'
      WHEN 'Inactive' THEN '离职'
      ELSE '预入职' END AS emp_status, – 员工状态
      CASE emp_type.name
      WHEN 'Regular Employee' THEN '正式员工'
      WHEN 'Temporary Employee' THEN '临时员工'
      WHEN 'Trainee' THEN '实习生'
      WHEN 'Outsourced Employee' THEN '外包员工'
      WHEN 'Contractor' THEN '劳务派遣'
      WHEN 'Part-Time Employee' THEN '兼岗员工'
      WHEN 'Pre-Position Employee' THEN '岗前员工'
      ELSE '试用员工' END AS emp_type, – 员工类型
      emp.hire_date, – 入职日期
      emp.termination_date, – 离职日期
      COALESCE(legal_entity_irt.value, legal_entity.name, '') AS legal_entity_name, – 法人实体
      COALESCE(bu_irt.value, bu.name, '') AS bu_name, – 业务单元
      COALESCE(division_irt.value, division.name, '') AS divison_name, – 分部
      COALESCE(dep_irt.value, dep.name, '') AS dep_name, – 部门
      COALESCE(position_irt.value, position.name, '') AS position_name, – 岗位
      COALESCE(emp_group_irt.value, emp_group.name, '') AS employee_group, – 员工分组
      emp_manager.name AS manager_employee – 上级

      FROM emp_job
      left join
      dep_level_view ON dep_level_view.cid = emp_job.department_id
      LEFT JOIN hr_employee emp ON emp_job.employee_id = emp.id
      LEFT JOIN legal_entity AS legal_entity ON
      emp_job.legal_entity_id = legal_entity.eroad_index_id AND
      legal_entity.eroad_index_id IS NOT NULL AND
      legal_entity.eroad_start_date <= current_date AND
      (legal_entity.eroad_end_date >= current_date OR legal_entity.eroad_end_date IS NULL) AND
      legal_entity.active = TRUE
      LEFT JOIN ir_translation AS legal_entity_irt ON
      legal_entity_irt.res_id = legal_entity.id AND
      legal_entity_irt.name = 'legal.entity,name' AND
      legal_entity_irt.lang = #

      {system.lang}
      LEFT JOIN hr_business_unit AS bu ON
      emp_job.business_unit_id = bu.eroad_index_id AND
      bu.eroad_index_id IS NOT NULL AND
      bu.eroad_start_date <= current_date AND
      (bu.eroad_end_date >= current_date OR bu.eroad_end_date IS NULL) AND
      bu.active = TRUE
      LEFT JOIN ir_translation AS bu_irt ON
      bu_irt.res_id = bu.id AND
      bu_irt.name = 'hr.business.unit,name' AND
      bu_irt.lang = #{system.lang}

      LEFT JOIN hr_division AS division ON
      emp_job.division_id = division.eroad_index_id AND
      division.eroad_index_id IS NOT NULL AND
      division.eroad_start_date <= current_date AND
      (division.eroad_end_date >= current_date OR division.eroad_end_date IS NULL) AND
      division.active = TRUE
      LEFT JOIN ir_translation AS division_irt ON
      division_irt.res_id = division.id AND
      division_irt.name = 'hr.division,name' AND
      division_irt.lang = #

      {system.lang}
      LEFT JOIN hr_department AS dep ON
      emp_job.department_id = dep.eroad_index_id AND
      dep.eroad_index_id IS NOT NULL AND
      dep.eroad_start_date <= current_date AND
      (dep.eroad_end_date >= current_date OR dep.eroad_end_date IS NULL) AND
      dep.active = TRUE
      LEFT JOIN ir_translation AS dep_irt ON
      dep_irt.res_id = dep.id AND
      dep_irt.name = 'hr.department,name' AND
      dep_irt.lang = #{system.lang}

      LEFT JOIN hr_position AS position ON
      emp_job.position_id = position.eroad_index_id AND
      position.eroad_index_id IS NOT NULL AND
      position.eroad_start_date <= current_date AND
      (position.eroad_end_date >= current_date OR position.eroad_end_date IS NULL) AND
      position.active = TRUE
      LEFT JOIN ir_translation AS position_irt ON
      position_irt.res_id = position.id AND
      position_irt.name = 'hr.position,name' AND
      position_irt.lang = #

      {system.lang}
      LEFT JOIN employee_status emp_status ON emp_job.employee_status = emp_status.id
      LEFT JOIN employee_type AS emp_type ON emp_job.employee_type = emp_type.id
      LEFT JOIN employee_group AS emp_group on emp_job.employee_group = emp_group.id AND emp_group.active = TRUE
      LEFT JOIN ir_translation AS emp_group_irt ON
      emp_group_irt.res_id = emp_group.id AND
      emp_group_irt.name = 'employee.group,name' AND
      emp_group_irt.lang = #{system.lang}

      LEFT JOIN hr_employee AS emp_manager on emp_job.manager_employee_id = emp_manager.id AND emp_manager.active = TRUE
      WHERE
      emp_job.eroad_index_id IS NOT NULL AND
      emp_job.active = TRUE AND
      emp_job.employee_id IS NOT NULL AND
      (bu.code = 'BU002' or dep.code = 'DP007')
      ORDER BY emp.id;

      显示
      1. 由于需要取得各时间点的 员工分组统计,取时间轴数据,抽取所有emp.job表的信息,通过对报表增加过滤组件,对字段start_date & end_date进行过滤设置,已达到取某个时间点的emp_job信息。例如: start_date<= 某个时间点 <= end_date 2. 需要抽取员工的字段信息参考 附件中截图的数据集 3. 增加字段【统计部门】,该信息为员工身上部门的最上级部门,该处需要递归查询 4. 仅抽取 业务单元为 艺术设计中心(BU002),以及部门为3D角色部(BP007)的员工信息 5. 透视表中的比例,当前功能貌似不可实现?: sql: WITH RECURSIVE dep_level_view AS ( select eroad_index_id as cid, dep_trans.value,code, ARRAY [dep_trans.value] as name_list, ARRAY [eroad_index_id] as path_ids, FALSE as is_cycle from hr_department left join ir_translation dep_trans on dep_trans.res_id=hr_department.id and dep_trans.name ='hr.department,name' and dep_trans.lang='zh_CN' where eroad_index_id is not null and eroad_start_date <= current_date and (eroad_end_date >= current_date or eroad_end_date is null) and not is_virtual_org and status = 'active' and active and parent_department_id is NULL UNION SELECT dep_table.eroad_index_id as cid, dep_transt.value, dep_table.code, dep_level_view.name_list || dep_transt.value as name_list, dep_level_view.path_ids || dep_table.eroad_index_id as path_ids, dep_table.eroad_index_id = any(dep_level_view.path_ids) as is_cycle FROM hr_department dep_table left join ir_translation dep_transt on dep_transt.res_id=dep_table.id and dep_transt.name ='hr.department,name' and dep_transt.lang='zh_CN' JOIN dep_level_view ON dep_table.parent_department_id = dep_level_view.cid and not dep_level_view.is_cycle and dep_table.eroad_index_id is not null and dep_table.eroad_start_date <= current_date and (dep_table.eroad_end_date >= current_date or dep_table.eroad_end_date is null) and not dep_table.is_virtual_org and dep_table.status = 'active' and dep_table.active ) SELECT dep_level_view.name_list [1] 统计部门, emp.id, emp_job.active, emp_job.status, emp_job.eroad_start_date AS start_date, CASE WHEN emp_job.eroad_end_date is null THEN to_date('9999-12-31','YYYY-MM-DD') ELSE emp_job.eroad_end_date END AS end_date, emp.employee_number, – 员工工号 emp.name AS emp_name, – 员工姓名 CASE emp_status.name WHEN 'Active' THEN '在职' WHEN 'Inactive' THEN '离职' ELSE '预入职' END AS emp_status, – 员工状态 CASE emp_type.name WHEN 'Regular Employee' THEN '正式员工' WHEN 'Temporary Employee' THEN '临时员工' WHEN 'Trainee' THEN '实习生' WHEN 'Outsourced Employee' THEN '外包员工' WHEN 'Contractor' THEN '劳务派遣' WHEN 'Part-Time Employee' THEN '兼岗员工' WHEN 'Pre-Position Employee' THEN '岗前员工' ELSE '试用员工' END AS emp_type, – 员工类型 emp.hire_date, – 入职日期 emp.termination_date, – 离职日期 COALESCE(legal_entity_irt.value, legal_entity.name, '') AS legal_entity_name, – 法人实体 COALESCE(bu_irt.value, bu.name, '') AS bu_name, – 业务单元 COALESCE(division_irt.value, division.name, '') AS divison_name, – 分部 COALESCE(dep_irt.value, dep.name, '') AS dep_name, – 部门 COALESCE(position_irt.value, position.name, '') AS position_name, – 岗位 COALESCE(emp_group_irt.value, emp_group.name, '') AS employee_group, – 员工分组 emp_manager.name AS manager_employee – 上级 FROM emp_job left join dep_level_view ON dep_level_view.cid = emp_job.department_id LEFT JOIN hr_employee emp ON emp_job.employee_id = emp.id LEFT JOIN legal_entity AS legal_entity ON emp_job.legal_entity_id = legal_entity.eroad_index_id AND legal_entity.eroad_index_id IS NOT NULL AND legal_entity.eroad_start_date <= current_date AND (legal_entity.eroad_end_date >= current_date OR legal_entity.eroad_end_date IS NULL) AND legal_entity.active = TRUE LEFT JOIN ir_translation AS legal_entity_irt ON legal_entity_irt.res_id = legal_entity.id AND legal_entity_irt.name = 'legal.entity,name' AND legal_entity_irt.lang = # {system.lang} LEFT JOIN hr_business_unit AS bu ON emp_job.business_unit_id = bu.eroad_index_id AND bu.eroad_index_id IS NOT NULL AND bu.eroad_start_date <= current_date AND (bu.eroad_end_date >= current_date OR bu.eroad_end_date IS NULL) AND bu.active = TRUE LEFT JOIN ir_translation AS bu_irt ON bu_irt.res_id = bu.id AND bu_irt.name = 'hr.business.unit,name' AND bu_irt.lang = #{system.lang} LEFT JOIN hr_division AS division ON emp_job.division_id = division.eroad_index_id AND division.eroad_index_id IS NOT NULL AND division.eroad_start_date <= current_date AND (division.eroad_end_date >= current_date OR division.eroad_end_date IS NULL) AND division.active = TRUE LEFT JOIN ir_translation AS division_irt ON division_irt.res_id = division.id AND division_irt.name = 'hr.division,name' AND division_irt.lang = # {system.lang} LEFT JOIN hr_department AS dep ON emp_job.department_id = dep.eroad_index_id AND dep.eroad_index_id IS NOT NULL AND dep.eroad_start_date <= current_date AND (dep.eroad_end_date >= current_date OR dep.eroad_end_date IS NULL) AND dep.active = TRUE LEFT JOIN ir_translation AS dep_irt ON dep_irt.res_id = dep.id AND dep_irt.name = 'hr.department,name' AND dep_irt.lang = #{system.lang} LEFT JOIN hr_position AS position ON emp_job.position_id = position.eroad_index_id AND position.eroad_index_id IS NOT NULL AND position.eroad_start_date <= current_date AND (position.eroad_end_date >= current_date OR position.eroad_end_date IS NULL) AND position.active = TRUE LEFT JOIN ir_translation AS position_irt ON position_irt.res_id = position.id AND position_irt.name = 'hr.position,name' AND position_irt.lang = # {system.lang} LEFT JOIN employee_status emp_status ON emp_job.employee_status = emp_status.id LEFT JOIN employee_type AS emp_type ON emp_job.employee_type = emp_type.id LEFT JOIN employee_group AS emp_group on emp_job.employee_group = emp_group.id AND emp_group.active = TRUE LEFT JOIN ir_translation AS emp_group_irt ON emp_group_irt.res_id = emp_group.id AND emp_group_irt.name = 'employee.group,name' AND emp_group_irt.lang = #{system.lang} LEFT JOIN hr_employee AS emp_manager on emp_job.manager_employee_id = emp_manager.id AND emp_manager.active = TRUE WHERE emp_job.eroad_index_id IS NOT NULL AND emp_job.active = TRUE AND emp_job.employee_id IS NOT NULL AND (bu.code = 'BU002' or dep.code = 'DP007') ORDER BY emp.id;

      1. 报表展示的需求为 任意时间点,员工分组的人员比例,分别为:饼状图、堆叠柱状图、透视表
      2. 维度为员工最上级部门,员工分组,统计项数值为 各员工分组数量、比例

      见附件

        1. 1111.png
          72 kB
          罗军
        2. 22222.png
          23 kB
          罗军
        3. 33333.png
          35 kB
          罗军
        4. 444444.png
          20 kB
          罗军

            grant.yang 杨光磊
            luoj 罗军
            表决:
            0 为这个问题表决

              创建日期:
              已更新:
              已解决: