From 23c49af1f2f0ecdff77a522967a044e7b00bd503 Mon Sep 17 00:00:00 2001 From: yangkunan Date: Fri, 1 Nov 2024 20:54:28 +0800 Subject: [PATCH] =?UTF-8?q?=E6=98=8E=E7=BB=86=E8=A1=A8=E9=80=BB=E8=BE=91&?= =?UTF-8?q?=E7=9C=8B=E6=9D=BF=E5=8F=96=E6=95=B0=E4=BC=98=E5=8C=96=E4=B8=BA?= =?UTF-8?q?=E5=A1=AB=E6=8A=A5=E8=A1=A8=E4=BD=9C=E4=B8=BA=E6=95=B0=E6=8D=AE?= =?UTF-8?q?=E6=9D=A5=E6=BA=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .idea/sqldialects.xml | 8 +- finereport/kanban/pc/人力.sql | 1214 ++++++++++------- .../tianbao/5_manpower/1_月度合同到期提醒.sql | 49 + .../xiazuan/5_manpower/2_员工满编率明细.sql | 45 +- .../xiazuan/5_manpower/3_员工离职率明细.sql | 412 +++++- .../5_manpower/4_人力行政成本费率明细.sql | 234 ++++ .../xiazuan/5_manpower/5_在职人员明细.sql | 340 ++++- 7 files changed, 1715 insertions(+), 587 deletions(-) create mode 100644 finereport/tianbao/5_manpower/1_月度合同到期提醒.sql diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 5c3a239..5570155 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -42,11 +42,12 @@ + + + + - - - @@ -57,6 +58,7 @@ + diff --git a/finereport/kanban/pc/人力.sql b/finereport/kanban/pc/人力.sql index bb09d07..22461bb 100644 --- a/finereport/kanban/pc/人力.sql +++ b/finereport/kanban/pc/人力.sql @@ -75,7 +75,7 @@ FROM ,xm -- 项目 ,zzs -- 在职人数 FROM ods_hr_view_mbl_d -- 在职与编制人数 - WHERE left(rq,7) = '${p_ym}' + WHERE ny = '${p_ym}' )A LEFT JOIN ( @@ -122,7 +122,9 @@ FROM ,lzrs -- 离职人数 ,concat(nd,'-',yd) AS YM -- 年月 FROM ods_hr_view_lzrs_d -- 离职人数 - WHERE left(rq,7) = '${p_ym}' + WHERE left(rq,4) = left('${p_ym}',4) -- 取累计值 + AND left(rq,7) <= '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 )A LEFT JOIN ( @@ -157,38 +159,28 @@ where 1 = 1 -- ====================================== --- 指标卡_人力成本 +-- 指标卡_人力成本/行政成本 -- ====================================== SELECT -sum(total_fee) AS total_fee -from dw.dws_cost_lc_summary_d -- 人力成本实际值 -WHERE fee_type = '实际值' -AND concat(yearname,'-',monthname) = '${p_ym}' +coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 +,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 +from dw.ods_cost_collection_lc_ac +WHERE left(ym,4) = left('${p_ym}',4) +AND ym <= '${p_ym}' ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} --- ====================================== --- 指标卡_行政成本 --- ====================================== -SELECT -sum(total_fee) AS total_fee -FROM dw.dws_cost_ac_summary_d -- 费控行政成本实际值 -WHERE fee_type = '实际值' -AND concat(yearname,'-',monthname) = '${p_ym}' -${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} -- ====================================== -- 员工满编率柱状图 -- ====================================== SELECT - A.yd AS yd -- 月度 - ,A.pq AS pq -- 片区 - ,A.xm AS xm -- 项目 - ,A.zzs AS zzs -- 在职数 - ,A.bzs AS bzs -- 编制数 - ,CASE WHEN A.bzs = 0 THEN 0 - ELSE A.zzs / A.bzs END AS rate -- 满编率 + yd + ,SUM(A.zzs) AS zzs -- 在职数 + ,SUM(A.bzs) AS bzs -- 编制数 + ,CASE WHEN sum(A.bzs) = 0 THEN 0 + ELSE sum(A.zzs) / sum(A.bzs) END AS rate -- 满编率 FROM ( SELECT @@ -198,8 +190,9 @@ FROM ,xm -- 项目 ,zzs -- 在职数 ,bzs -- 编制数 - FROM ods_hr_view_mbl_d - where nd = left('${p_ym}',4) + FROM ods_hr_view_mbl_d + where nd = left('${p_ym}',4) + AND pq not in('89','267') -- 排除了佳美、悦汇 )A LEFT JOIN ( @@ -231,39 +224,102 @@ ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - +group by +yd -- ====================================== -- 员工满编率排名 -- ====================================== --- 注意 目前会有空的排名 是因为佳美物业未做映射 +-- 片区排名 +${IF(LEN(p_area)=0,"", "/*")} SELECT T1.organ_comm AS organ_comm ,ROW_NUMBER() OVER(ORDER BY T1.RATE DESC) 排名 ,T1.rate - ,'0' AS target_rate + ,T1.full_rate_target AS target_rate FROM -( + ( SELECT - ${IF(LEN(p_area)>0,"B.hr_comm_name", "B.hr_organ_name")} AS organ_comm - ,CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(zzs) / SUM(bzs) END AS RATE + B.hr_organ_name AS organ_comm + ,CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(A.zzs) / SUM(A.bzs) END AS RATE + ,SUM(C.full_rate_target) AS full_rate_target FROM - ( + ( SELECT - pq -- 片区 - ,xm -- 项目 - ,zzs -- 在职数 - ,bzs -- 编制数 - ,rq -- 日期 + pq -- 片区 + ,SUM(zzs) AS zzs -- 在职数 + ,SUM(bzs) AS bzs -- 编制数 FROM ods_hr_view_mbl_d - WHERE rq = '${p_ym}' - -- 注意 目前会有一个空的排名 是因为佳美物业未做映射 - AND pq NOT IN ('89','267') -- 这里剔除了佳美物业公司/悦汇发展公司 + WHERE ny = '${p_ym}' + AND pq NOT IN ('89','267') -- 这里剔除了佳美物业公司/悦汇发展公司 + GROUP BY pq )A LEFT JOIN ( + SELECT + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + FROM dim_organ_mapping + WHERE length(hr_organ_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + )B + ON A.pq = B.hr_organ_id + LEFT JOIN + ( + SELECT + organ_code + ,full_rate_target -- 满编率目标 + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + GROUP BY + B.hr_organ_name + )T1 +${IF(LEN(p_area)=0,"", "*/")} + +-- 项目排名 +${IF(LEN(p_area) > 0,"", "/*")} +SELECT + T1.organ_comm AS organ_comm + ,ROW_NUMBER() OVER(ORDER BY T1.RATE DESC) 排名 + ,T1.rate + ,T1.full_rate_target AS target_rate +FROM +( + SELECT + B.hr_comm_name AS organ_comm + ,CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(A.zzs) / SUM(A.bzs) END AS RATE + ,SUM(C.full_rate_target) AS full_rate_target + FROM + ( + SELECT + pq -- 片区 + ,xm -- 项目 + ,SUM(zzs) AS zzs -- 在职数 + ,SUM(bzs) AS bzs -- 编制数 + FROM ods_hr_view_mbl_d + WHERE ny = '${p_ym}' + AND pq NOT IN ('89','267') -- 这里剔除了佳美物业公司/悦汇发展公司 + GROUP BY pq, xm + )A + LEFT JOIN + ( SELECT organ_code ,organ_name @@ -272,6 +328,7 @@ FROM ,hr_comm_id ,hr_comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -290,12 +347,25 @@ FROM )B ON A.pq = B.hr_organ_id and A.xm = B.hr_comm_id + LEFT JOIN + ( + SELECT + comm_id + ,organ_code + ,full_rate_target -- 满编率目标 + FROM ods_hr_collection_target + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + AND A.xm = C.comm_id WHERE 1=1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - - GROUP BY ${IF(LEN(p_area)>0,"B.hr_comm_name", "B.hr_organ_name")} + GROUP BY + B.hr_comm_name )T1 +${IF(LEN(p_area)>0,"", "*/")} + -- ====================================== -- 员工离职原因占比 @@ -360,29 +430,79 @@ SELECT T1.yr_month AS yr_month ,'人力成本' AS name ,'人力成本费率' AS name_rate - ,RIGHT(T1.yr_month,2) AS MONTHS - ,T1.actual_cost AS actual_cost -- 人力成本 + ,T1.lc_total_fee AS total_fee -- 人力成本 ,T1.index_income_fact AS index_income_fact -- 实际收入 - ,T1.actual_cost / T1.index_income_fact AS FEE_RATE -- 费率 + ,T1.lc_total_fee / T1.index_income_fact AS fee_rate -- 人力成本费率 FROM ( SELECT - A.yr_month AS yr_month - ,A.actual_cost + A.ym AS yr_month + ,A.lc_total_fee AS lc_total_fee ,b.index_income_fact AS index_income_fact FROM ( --- 费控人力成本科目汇总表 + -- 费控人力行政成本填报 SELECT - organ_code - ,CONCAT(yearname,'-',monthname) AS yr_month - ,SUM(CASE WHEN fee_type IN('实际值','目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - from dw.dws_cost_ac_summary_d - WHERE yearname = left('${p_ym}',4) - AND CONCAT(yearname,'-',monthname) < '${p_ym}' - GROUP BY CONCAT(yearname,'-',monthname),organ_code + organ_code + ,ym + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code,ym )A LEFT JOIN + (-- 公司实际收入 + SELECT + yr_month + ,organ_code + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + FROM ods_caiwu_feecollection + WHERE category = '物业' + AND LEFT(yr_month,4) = left('${p_ym}',4) + GROUP BY + yr_month + ,organ_code + )B + ON A.ym = B.yr_month + AND A.organ_code = B.organ_code + WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +)T1 +ORDER BY T1.yr_month + +${if(p_type='人力',"","*/")} + +${if(p_type='行政',"","/*")} + +SELECT + T1.yr_month AS yr_month + ,'行政成本' AS name + ,'行政成本费率' AS name_rate + ,T1.ac_total_fee AS total_fee -- 人力成本 + ,T1.index_income_fact AS index_income_fact -- 实际收入 + ,T1.ac_total_fee / T1.index_income_fact AS fee_rate -- 人力成本费率 +FROM +( + SELECT + A.ym AS yr_month + ,A.ac_total_fee AS ac_total_fee -- 人力成本 + ,B.index_income_fact AS index_income_fact -- 实际收入 + FROM + ( + -- 费控人力行政成本填报 + SELECT + organ_code + ,ym + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code,ym + ) A + LEFT JOIN (-- 公司实际收入 SELECT yr_month @@ -391,56 +511,11 @@ FROM FROM ods_caiwu_feecollection WHERE category = '物业' AND LEFT(yr_month,4) = left('${p_ym}',4) - GROUP BY yr_month,organ_code - )B - ON A.yr_month = B.yr_month - AND A.organ_code = B.organ_code - WHERE 1 = 1 - ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} -)T1 -ORDER BY T1.yr_month -${if(p_type='人力',"","*/")} - -${if(p_type='行政',"","/*")} - -SELECT - T1.yr_month AS yr_month - ,'行政成本' AS name - ,'行政成本费率' AS name_rate - ,RIGHT(T1.yr_month,2) AS MONTHS - ,T1.actual_cost AS actual_cost -- 人力成本 - ,T1.index_income_fact AS index_income_fact -- 实际收入 - ,T1.actual_cost / T1.index_income_fact AS FEE_RATE -- 费率 -FROM -( - SELECT - A.yr_month AS yr_month - ,A.actual_cost AS actual_cost -- 人力成本 - ,B.index_income_fact AS index_income_fact -- 实际收入 - FROM - ( --- 费控人力成本科目汇总表 - SELECT - organ_code - ,CONCAT(yearname, '-', monthname) AS yr_month - ,SUM(CASE WHEN fee_type IN ('实际值', '目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - FROM dw.dws_cost_lc_summary_d - WHERE yearname = LEFT('${p_ym}', 4) - AND CONCAT(yearname, '-', monthname) < '${p_ym}' - GROUP BY CONCAT(yearname, '-', monthname),organ_code - ) A - LEFT JOIN - (-- 公司实际收入 - SELECT - yr_month + GROUP BY + yr_month ,organ_code - , SUM(index_income_fact) AS index_income_fact -- 实际收入 - FROM ods_caiwu_feecollection - WHERE category = '物业' - AND LEFT(yr_month, 4) = LEFT('${p_ym}', 4) - GROUP BY yr_month,organ_code )B - ON A.yr_month = B.yr_month + ON A.ym = B.yr_month AND A.organ_code = B.organ_code WHERE 1=1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} @@ -456,217 +531,238 @@ ${if(p_type='行政',"","*/")} -- 这里无法筛选片区时展示对应片区下项目费率的排名 -- 原因: 费控成本均在各片区智能下,普通项目没有费用,可使用如下sql查询: -/* -SELECT - A.organ_comm_name AS organ_comm_name - ,A.actual_cost AS actual_cost -- 成本 - ,B.index_income_fact AS index_income_fact -- 实际收入 - ,ROW_NUMBER() OVER (ORDER BY A.actual_cost / B.index_income_fact DESC ) AS 排名 -- 费率排名 - ,A.actual_cost / B.index_income_fact AS fee_rate -- 费率 - ,A.budget_actual_cost / B.index_income_target AS target_fee_rate -- 费率目标 - FROM - ( --- 费控人力成本科目汇总表 - SELECT - A2.comm_name AS organ_comm_name - ,A2.comm_id AS organ_comm_code - ,A2.cost_comm_name AS cost_comm_name - ,SUM(CASE WHEN fee_type IN('实际值','目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - ,SUM(CASE WHEN fee_type = '目标值' THEN total_fee ELSE 0 END) / 10000 AS budget_actual_cost -- 人力成本预算值 - - FROM - ( - SELECT - * - FROM dw.dws_cost_ac_summary_d - WHERE CONCAT(yearname,'-',monthname) = '2024-09' - )A1 - LEFT JOIN - ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,comm_id - ,comm_name - ,cost_comm_id -- 费控项目id - ,cost_comm_name -- 费控项目名称 - FROM dim_organ_mapping_kunan_tmp - GROUP BY - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,comm_id - ,comm_name - ,cost_comm_id -- 费控项目id - ,cost_comm_name -- 费控项目名称 - )A2 - ON A1.organ_code = A2.organ_code - AND A1.dimsubjectcode = A2.cost_comm_id - WHERE 1=1 - -- AND A2.organ_code IN ('0102') - GROUP BY - A2.comm_name - ,A2.comm_id - ,A2.cost_comm_name - )A - LEFT JOIN - (-- 公司实际收入 - SELECT - comm_name AS organ_comm_name - ,comm_id AS organ_comm_code - ,SUM(index_income_fact) AS index_income_fact -- 实际收入 - ,SUM(index_income_target) AS index_income_target -- 收入目标 - FROM ods_caiwu_feecollection - WHERE category = '物业' - AND yr_month = '2024-09' - GROUP BY - comm_name - ,comm_id - )B - ON A.organ_comm_code = B.organ_comm_code - */ - - - -${if(p_type='人力',"","/*")} +-- 片区排名 +${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "/*")} SELECT A.organ_name AS organ_comm_name - ,A.actual_cost AS actual_cost -- 成本 + ,A.lc_total_fee AS actual_cost -- 人力成本 ,B.index_income_fact AS index_income_fact -- 实际收入 - ,ROW_NUMBER() OVER (ORDER BY A.actual_cost / B.index_income_fact DESC ) AS 排名 -- 费率排名 - ,A.actual_cost / B.index_income_fact AS fee_rate -- 费率 - ,A.budget_actual_cost / B.index_income_target AS target_fee_rate -- 费率目标 + ,ROW_NUMBER() OVER (ORDER BY A.lc_total_fee / B.index_income_fact DESC ) AS 排名 -- 费率排名 + ,A.lc_total_fee / B.index_income_fact AS fee_rate -- 人力成本费率 + ,C.lc_fee_rate_target AS target_fee_rate -- 费率目标 FROM - ( --- 费控人力成本科目汇总表 + ( -- 费控人力行政成本填报 SELECT - A1.organ_code - ,A1.organ_name - -- ${IF(LEN(p_area)>0,"dimsubjectname", "organ_name")} AS organ_comm_name - ,SUM(CASE WHEN fee_type IN('实际值','目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - ,SUM(CASE WHEN fee_type = '目标值' THEN total_fee ELSE 0 END) / 10000 AS budget_actual_cost -- 人力成本预算值 - FROM - ( - SELECT - * - FROM dw.dws_cost_ac_summary_d -- 费控人力成本科目汇总表 - WHERE CONCAT(yearname,'-',monthname) = '${LEFT(MONTHDELTA(p_ym,-1),7)}' -- 取上月数据 - )A1 - LEFT JOIN - ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,cost_comm_id - ,cost_comm_name - FROM dim_organ_mapping_kunan_tmp - GROUP BY organ_code - ,organ_name - ,cost_comm_id - ,cost_comm_name - )A2 - ON A1.organ_code = A2.organ_code - -- AND A1.dimsubjectcode = A2.cost_comm_id - WHERE 1=1 - -- ${IF(LEN(p_area)>0," AND A2.id IN ('"+JOINARRAY(p_area,"','")+"')", "")} - GROUP BY - A1.organ_code - ,A1.organ_name - -- ${IF(LEN(p_area)>0,"dimsubjectname", "organ_name")} + ,organ_name + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code,organ_name )A LEFT JOIN (-- 公司实际收入 SELECT - -- ${IF(LEN(p_area)>0,"comm_name", "organ_name")} AS organ_comm_name organ_code ,SUM(index_income_fact) AS index_income_fact -- 实际收入 ,SUM(index_income_target) AS index_income_target -- 收入目标 FROM ods_caiwu_feecollection WHERE category = '物业' - AND yr_month = '${LEFT(MONTHDELTA(p_ym,-1),7)}' + AND left(yr_month,4) = left('${p_ym}',4) + AND yr_month < '${p_ym}' GROUP BY - -- ${IF(LEN(p_area)>0,"comm_name", "organ_name")} organ_code )B ON A.organ_code = B.organ_code + LEFT JOIN + ( + SELECT + organ_code + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code -${if(p_type='人力',"","*/")} - -${if(p_type='行政',"","/*")} +${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "*/")} +${if(and(len(p_area)=0,p_type='行政')," -- 片区排名开始", "/*")} SELECT A.organ_name AS organ_comm_name - ,A.actual_cost AS actual_cost -- 成本 + ,A.ac_total_fee AS actual_cost -- 成本 ,B.index_income_fact AS index_income_fact -- 实际收入 - ,ROW_NUMBER() OVER (ORDER BY A.actual_cost / B.index_income_fact DESC ) AS 排名 -- 费率排名 - ,A.actual_cost / B.index_income_fact AS fee_rate -- 费率 - ,A.budget_actual_cost / B.index_income_target AS target_fee_rate -- 费率目标 -FROM - ( --- 费控人力成本科目汇总表 + ,ROW_NUMBER() OVER (ORDER BY A.lc_total_fee / B.index_income_fact DESC ) AS 排名 -- 费率排名 + ,A.lc_total_fee / B.index_income_fact AS fee_rate -- 行政成本费率 + ,C.ac_fee_rate_target AS target_fee_rate -- 费率目标 + FROM + ( -- 费控人力行政成本填报 SELECT - -- ${IF(LEN(p_area)>0,"A2.comm_name", "A1.organ_name")} AS organ_comm_name - -- ${IF(LEN(p_area)>0,",A2.comm_id", ",A1.organ_code")} AS organ_comm_code - A1.organ_code - ,A1.organ_name - ,SUM(CASE WHEN fee_type IN('实际值','目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - ,SUM(CASE WHEN fee_type = '目标值' THEN total_fee ELSE 0 END) / 10000 AS budget_actual_cost -- 人力成本预算值 - - FROM - ( - SELECT - * - FROM dw.dws_cost_lc_summary_d - WHERE CONCAT(yearname,'-',monthname) = '${LEFT(MONTHDELTA(p_ym,-1),7)}' - )A1 - LEFT JOIN - ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,comm_id - ,comm_name - ,cost_comm_id - ,cost_comm_name - FROM dim_organ_mapping_kunan_tmp - GROUP BY - organ_code - ,organ_name - ,comm_id - ,comm_name - ,cost_comm_id - ,cost_comm_name - )A2 - ON A1.organ_code = A2.organ_code - -- AND A1.dimsubjectcode = A2.cost_comm_id - WHERE 1=1 - -- ${IF(LEN(p_area)>0," AND A2.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - GROUP BY - A1.organ_code - ,A1.organ_name - -- ${IF(LEN(p_area)>0,"A2.comm_name", "A1.organ_name")} - -- ${IF(LEN(p_area)>0,",A2.comm_id", ",A1.organ_code")} + organ_code + ,organ_name + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code,organ_name )A - LEFT JOIN + LEFT JOIN (-- 公司实际收入 SELECT - -- ${IF(LEN(p_area)>0,"comm_id", "organ_code")} AS organ_comm_code - organ_code + organ_code ,SUM(index_income_fact) AS index_income_fact -- 实际收入 - ,SUM(index_income_target) AS index_income_target -- 收入目标 FROM ods_caiwu_feecollection WHERE category = '物业' - AND yr_month = '${LEFT(MONTHDELTA(p_ym,-1),7)}' + AND LEFT(yr_month,4) = left('${p_ym}',4) + AND yr_month <= '${p_ym}' GROUP BY - organ_code - -- ${IF(LEN(p_area)>0,"comm_id", "organ_code")} + organ_code )B ON A.organ_code = B.organ_code + LEFT JOIN + ( + SELECT + organ_code + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code +${if(and(len(p_area)=0,p_type='行政')," -- 片区排名开始", "*/")} + + + +-- 项目排名 + +${if(and(len(p_area)>0,p_type='人力')," -- 片区排名开始", "/*")} +SELECT + T.organ_comm_name AS organ_comm_name + ,T.actual_cost AS actual_cost + ,T.index_income_fact AS index_income_fact -- 实际收入 + ,ROW_NUMBER() OVER (ORDER BY T.fee_rate DESC ) AS 排名 -- 费率排名 + ,T.fee_rate AS fee_rate + ,T. target_fee_rate AS target_fee_rate -- 费率目标 +FROM + ( + SELECT + A.comm_name AS organ_comm_name + ,SUM(A.lc_total_fee) AS actual_cost -- 成本 + ,SUM(B.index_income_fact) AS index_income_fact -- 实际收入 + -- ,ROW_NUMBER() OVER (ORDER BY A.lc_total_fee / B.index_income_fact DESC ) AS 排名 -- 费率排名 + ,CASE WHEN sum(B.index_income_fact) = 0 THEN 0 + ELSE SUM(A.lc_total_fee) / SUM(B.index_income_fact) END AS fee_rate + ,SUM(C.lc_fee_rate_target) AS target_fee_rate -- 费率目标 + FROM + ( -- 费控人力行政成本填报 + SELECT + organ_code + ,comm_id + ,comm_name + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code, comm_id, comm_name + )A + LEFT JOIN + (-- 公司实际收入 + SELECT + organ_code + ,comm_id + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + FROM ods_caiwu_feecollection + WHERE category = '物业' + AND LEFT(yr_month,4) = left('${p_ym}',4) + AND yr_month <= '${p_ym}' + GROUP BY + organ_code,comm_id + )B + ON A.organ_code = B.organ_code + AND A.comm_id = B.comm_id + LEFT JOIN + ( + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code + AND A.comm_id = C.comm_id + WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + GROUP BY A.comm_name + )T + ${if(and(len(p_area)>0,p_type='人力')," -- 片区排名开始", "*/")} + + +${if(and(len(p_area)>0,p_type='行政')," -- 片区排名开始", "/*")} + +SELECT +T.organ_comm_name AS organ_comm_name +,T.actual_cost AS actual_cost +,T.index_income_fact AS index_income_fact -- 实际收入 +,ROW_NUMBER() OVER (ORDER BY T.fee_rate DESC ) AS 排名 -- 费率排名 +,T.fee_rate AS fee_rate +,T. target_fee_rate AS target_fee_rate -- 费率目标 +FROM +( +SELECT + A.comm_name AS organ_comm_name + ,SUM(A.ac_total_fee) AS actual_cost -- 成本 + ,SUM(B.index_income_fact) AS index_income_fact -- 实际收入 + -- ,ROW_NUMBER() OVER (ORDER BY A.lc_total_fee / B.index_income_fact DESC ) AS 排名 -- 费率排名 + ,CASE WHEN SUM(B.index_income_fact) = 0 THEN 0 + ELSE SUM(A.ac_total_fee) / SUM(B.index_income_fact) END AS fee_rate + ,SUM(C.ac_fee_rate_target) AS target_fee_rate -- 费率目标 + + +FROM + ( -- 费控人力行政成本填报 + SELECT + organ_code + ,comm_id + ,comm_name + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code, comm_id, comm_name + )A + LEFT JOIN + (-- 公司实际收入 + SELECT + organ_code + ,comm_id + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + FROM ods_caiwu_feecollection + WHERE category = '物业' + AND LEFT(yr_month,4) = left('${p_ym}',4) + AND yr_month <= '${p_ym}' + GROUP BY + organ_code,comm_id + )B + ON A.organ_code = B.organ_code + AND A.comm_id = B.comm_id + LEFT JOIN + ( + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code + AND A.comm_id = C.comm_id + WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + GROUP BY A.comm_name + )T +${if(and(len(p_area)>0,p_type='行政')," -- 片区排名开始", "*/")} - ${if(p_type='行政',"","*/")} @@ -674,46 +770,103 @@ FROM -- 离职率排名 -- ====================================== - +-- 片区 +${IF(LEN(p_area)=0,"", "/*")} SELECT T.hr_organ_name AS hr_organ_name ,T.lz_rate AS lz_rate - ,0 AS lz_rate_target + ,T.lz_rate_target AS lz_rate_target ,ROW_NUMBER() OVER(ORDER BY T.lz_rate desc) AS 排名 FROM ( SELECT - ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} AS hr_organ_name - ,CASE WHEN ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) = 0 THEN 0 - ELSE SUM(zlzrs) / ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) - END AS lz_rate - + B.hr_organ_name AS hr_organ_name + ,CASE WHEN sum(A.zzrs) = 0 THEN 0 + ELSE SUM(A.zlzrs) / sum(zzrs) + END AS lz_rate -- 离职率 + ,SUM(C.lz_rate_target) AS lz_rate_target FROM + ( + SELECT + pq -- 片区 + ,xm -- 项目 + ,SUM(zzrs) AS zzrs -- 当天在职人数 + ,SUM(zlzrs) AS zlzrs -- 当天总离职人数 + FROM ods_hr_view_lzbl_d + WHERE LEFT(rq,4) = left('${p_ym}',4) + AND LEFT(rq,7) <= '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 + GROUP BY pq, xm + )A + LEFT JOIN + ( + SELECT + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + FROM dim_organ_mapping + WHERE length(hr_organ_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + )B + ON A.pq = B.hr_organ_id + LEFT JOIN ( SELECT - nd -- 年度 - ,jd -- 季度 - ,yd -- 月度 - ,rq -- 日期 - ,zb -- 总部 - ,pq -- 片区 - ,xm -- 项目 - ,zzrs -- 当天在职人数 - ,zdlzrs -- 当天主动离职人数 - ,bdlzrs -- 当天被动离职人数 - ,zlzrs -- 当天总离职人数 - ,CASE WHEN rq = CONCAT('${p_ym}','-01') THEN zzrs ELSE 0 END AS StartOfmonth_zzrs -- 月初在职人数 - ,CASE WHEN rq = LAST_DAY(CONCAT('${p_ym}','-01')) THEN zzrs ELSE 0 END AS EndOfmonth_zsrs -- 月末在职人数 - FROM ods_hr_view_lzbl_d - WHERE LEFT(rq,7) = '${p_ym}' - AND pq not in('89','267') - -- 排除了: - -- 89:佳美物业公司 - -- 153:领悦集团总部 - -- 267:悦汇发展公司 - )A - LEFT JOIN - ( + organ_code + ,lz_rate_target -- 离职率目标 + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + GROUP BY + B.hr_organ_name + )T +${IF(LEN(p_area)=0,"", "*/")} + + +${IF(LEN(p_area)>0,"", "/*")} +-- 项目 + +SELECT + T.hr_organ_name AS hr_organ_name + ,T.lz_rate AS lz_rate -- 离职率 + ,T.lz_rate_target AS lz_rate_target -- 离职率目标 + ,ROW_NUMBER() OVER(ORDER BY T.lz_rate desc) AS 排名 +FROM + ( + SELECT + B.hr_comm_name AS hr_organ_name + ,CASE WHEN SUM(A.zzrs) = 0 THEN 0 + ELSE SUM(A.zlzrs) / SUM(A.zzrs) + END AS lz_rate + ,SUM(C.lz_rate_target) AS lz_rate_target + + FROM + ( + SELECT + pq -- 片区 + ,xm -- 项目 + ,SUM(zzrs) AS zzrs -- 当天在职人数 + ,SUM(zlzrs) AS zlzrs -- 当天总离职人数 + FROM ods_hr_view_lzbl_d + WHERE LEFT(rq,4) = left('${p_ym}',4) + AND LEFT(rq,7) <= '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 + GROUP BY pq, xm + )A + LEFT JOIN + ( SELECT organ_code ,organ_name @@ -722,6 +875,7 @@ FROM ,hr_comm_id ,hr_comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -737,15 +891,26 @@ FROM ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id -- hr项目id ,'领悦集团总部' AS hr_comm_name -- hr项目名称 - )B - ON A.pq = B.hr_organ_id - and A.xm = b.hr_comm_id + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id + LEFT JOIN + ( + SELECT + comm_id + ,organ_code + ,lz_rate_target -- 离职率目标 + FROM ods_hr_collection_target + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + AND A.xm = C.comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} GROUP BY - ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} + B.hr_comm_name )T - +${IF(LEN(p_area)>0,"", "*/")} @@ -753,225 +918,304 @@ FROM -- 指标卡_人力成本费率/目标值 -- ====================================== + +-- 整体 +${IF(LEN(p_area)=0,"", "/*")} + SELECT - SUM(T1.actual_cost) AS actual_cost -- 人力成本 - ,SUM(T1.index_income_fact) AS index_income_fact -- 实际收入 - ,sum(T1.actual_cost) / sum(T1.index_income_fact) AS FEE_RATE -- 费率 - ,0 AS fee_rate_target +T.lc_fee_rate AS lc_fee_rate -- 人力成本费率 +,T.lc_fee_rate_target AS lc_fee_rate_target -- 人力成本费率目标 +,CASE WHEN T.lc_fee_rate_target = 0 THEN 0 + ELSE T.lc_fee_rate / T.lc_fee_rate_target END AS lc_target_rate -- 人力成本费率目标占比 +,T.ac_fee_rate AS ac_fee_rate -- 行政成本费率 +,T.ac_fee_rate_target AS ac_fee_rate_target -- 行政成本费率目标值 +,CASE WHEN T.ac_fee_rate_target = 0 THEN 0 + ELSE T.ac_fee_rate / T.ac_fee_rate_target END AS ac_target_rate -- 行政成本费率目标占比 FROM - ( - SELECT - A.yr_month AS yr_month - ,A.actual_cost - ,b.index_income_fact AS index_income_fact +( +SELECT +coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) + / (SELECT SUM(index_income_fact) FROM ods_caiwu_feecollection + WHERE category = '物业' + AND left(yr_month,4) = left('${p_ym}',4) + AND yr_month < '${p_ym}') AS lc_fee_rate -- 人力成本费率 +,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) + / (SELECT SUM(index_income_fact) FROM ods_caiwu_feecollection + WHERE category = '物业' + AND left(yr_month,4) = left('${p_ym}',4) + AND yr_month < '${p_ym}') AS ac_fee_rate -- 行政成本费率 +,0 AS lc_fee_rate_target -- 人力成本费率 +,0 AS ac_fee_rate_target -- 行政成本费率 +from dw.ods_cost_collection_lc_ac +WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' +UNION ALL +SELECT +0 AS lc_fee_rate +,0 AS ac_fee_rate +,lc_fee_rate_target -- 人力成本费率 +,ac_fee_rate_target -- 行政成本费率 +FROM ods_hr_collection_target_overall +WHERE ym = '${p_ym}' +)T +${IF(LEN(p_area)=0,"", "*/")} + +-- 片区 +${IF(LEN(p_area)>0,"", "/*")} +SELECT + T.lc_fee_rate AS lc_fee_rate -- 人力成本费率 + ,T.lc_fee_rate_target AS lc_fee_rate_target -- 人力成本费率目标 + ,CASE WHEN T.lc_fee_rate_target = 0 THEN 0 + ELSE T.lc_fee_rate / T.lc_fee_rate_target END AS lc_target_rate -- 人力成本费率目标占比 + ,T.ac_fee_rate AS ac_fee_rate -- 行政成本费率 + ,T.ac_fee_rate_target AS ac_fee_rate_target -- 行政成本费率目标值 + ,CASE WHEN T.ac_fee_rate_target = 0 THEN 0 + ELSE T.ac_fee_rate / T.ac_fee_rate_target END AS ac_target_rate -- 行政成本费率目标占比 +FROM +( +SELECT + A.lc_total_fee / B.index_income_fact AS lc_fee_rate + ,A.ac_total_fee / B.index_income_fact AS ac_fee_rate + ,C.lc_fee_rate_target AS lc_fee_rate_target -- 人力成本费率 + ,C.ac_fee_rate_target AS ac_fee_rate_target -- 行政成本费率 FROM ( - -- 费控人力成本科目汇总表 + -- 费控人力行政成本填报 SELECT - organ_code - ,CONCAT(yearname,'-',monthname) AS yr_month - ,SUM(CASE WHEN fee_type IN('实际值','目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - from dw.dws_cost_ac_summary_d - WHERE CONCAT(yearname,'-',monthname) = '${LEFT(MONTHDELTA(p_ym,-1),7)}' - GROUP BY CONCAT(yearname,'-',monthname),organ_code + organ_code + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + from dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' + GROUP BY organ_code )A LEFT JOIN (-- 公司实际收入 SELECT - yr_month - ,organ_code - ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + organ_code + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 FROM ods_caiwu_feecollection WHERE category = '物业' - AND yr_month = '${LEFT(MONTHDELTA(p_ym,-1),7)}' - GROUP BY yr_month,organ_code - )B - ON A.yr_month = B.yr_month - AND A.organ_code = B.organ_code - WHERE 1 = 1 - ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - )T1 - - - --- ====================================== --- 指标卡_行政成本费率/目标值 --- ====================================== - - - -SELECT - SUM(T1.actual_cost) AS actual_cost -- 行政成本 - ,SUM(T1.index_income_fact) AS index_income_fact -- 实际收入 - ,SUM(T1.actual_cost) / SUM(T1.index_income_fact) AS FEE_RATE -- 费率 - ,0 AS fee_rate_target -FROM -( - SELECT - A.yr_month AS yr_month - ,A.actual_cost AS actual_cost -- 人力成本 - ,B.index_income_fact AS index_income_fact -- 实际收入 - FROM - ( --- 费控行政成本科目汇总表 - SELECT + AND left(yr_month,4) = left('${p_ym}',4) + AND yr_month < '${p_ym}' + GROUP BY organ_code + )B + ON A.organ_code = B.organ_code + LEFT JOIN + ( + SELECT organ_code - ,CONCAT(yearname, '-', monthname) AS yr_month - ,SUM(CASE WHEN fee_type IN ('实际值', '目标值') THEN total_fee ELSE 0 END) / 10000 AS actual_cost -- 人力成本 - FROM dw.dws_cost_lc_summary_d - WHERE CONCAT(yearname, '-', monthname) = '${LEFT(MONTHDELTA(p_ym,-1),7)}' - GROUP BY CONCAT(yearname, '-', monthname),organ_code - )A - LEFT JOIN - (-- 公司实际收入 - SELECT - yr_month - ,organ_code - ,SUM(index_income_fact) AS index_income_fact -- 实际收入 - FROM ods_caiwu_feecollection - WHERE category = '物业' - AND yr_month = '${LEFT(MONTHDELTA(p_ym,-1),7)}' - GROUP BY yr_month,organ_code - )B - ON A.yr_month = B.yr_month - AND A.organ_code = B.organ_code - WHERE 1=1 - ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code + WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +)T +${IF(LEN(p_area)>0,"", "*/")} - )T1 -- ====================================== -- 指标卡_在职人数满编率/目标值 -- ====================================== + +-- 整体 +${IF(LEN(p_area) = 0,"", "/*")} +SELECT +sum(T.full_rate) AS full_rate -- 满编率 +,sum(T.full_rate_target) AS full_rate_target -- 满编率目标 +,CASE WHEN sum(T.full_rate_target) =0 THEN 0 +ELSE sum(T.full_rate) / sum(T.full_rate_target) END AS target_rate -- 目标占比 +FROM +( SELECT CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(zzs) / SUM(bzs) END AS full_rate -- 满编率 ,0 AS full_rate_target -- 满编率目标值 FROM ( SELECT - pq -- 片区 - ,xm -- 项目 - ,zzs -- 在职数 + zzs -- 在职数 ,bzs -- 编制数 FROM ods_hr_view_mbl_d - WHERE rq = '${p_ym}' - -- 注意 目前会有一个空的排名 是因为佳美物业未做映射 - AND pq not in('89','267') -- 排除了佳美、悦汇 + WHERE ny = '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 )A -LEFT JOIN -( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 -)B -ON A.pq = B.hr_organ_id -and A.xm = B.hr_comm_id -LEFT JOIN -( - SELECT - organ_code -- erp片区code - ,organ_name -- erp片区名称 - ,comm_id -- 项目id - ,comm_name -- 项目名称 - ,ym -- 日期(yyyy-MM格式) - ,full_rate_target -- 满编率目标 - ,lz_rate_target -- 离职率目标 - ,lc_fee_rate_target -- 人力成本费率目标 - ,ac_fee_rate_target -- 行政成本费率目标 - FROM ods_hr_collection_target -- 目标值收集 - WHERE ym = '${p_ym}' - -)C -ON A.pq = C.organ_code -AND A.xm = c.comm_id -WHERE 1 = 1 +UNION ALL +SELECT +0 AS full_rate -- 满编率 +,full_rate_target -- 满编率目标 +FROM ods_hr_collection_target_overall +WHERE ym = '${p_ym}' +)T ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + ${IF(LEN(p_area) = 0,"", "*/")} + +-- 片区 + ${IF(LEN(p_area) > 0,"", "/*")} + + +SELECT +CASE WHEN SUM(A.bzs) = 0 THEN 0 ELSE SUM(A.zzs) / SUM(A.bzs) END AS full_rate -- 满编率 +,SUM(C.full_rate_target) AS full_rate_target -- 满编率目标值 +,CASE WHEN (SUM(A.bzs) = 0 OR coalesce(SUM(C.full_rate_target) ,0) = 0)THEN 0 + ELSE (SUM(A.zzs) / SUM(A.bzs)) / SUM(C.full_rate_target) END AS target_rate -- 满编率目标占比 +FROM + ( + SELECT + pq -- 片区 + ,SUM(zzs) AS zzs -- 在职数 + ,SUM(bzs) AS bzs -- 编制数 + FROM ods_hr_view_mbl_d + WHERE yd = '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 + GROUP BY pq + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + FROM dim_organ_mapping + WHERE length(hr_organ_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + )B + ON A.pq = B.hr_organ_id + LEFT JOIN + ( + SELECT + organ_code -- erp片区code + ,full_rate_target -- 满编率目标 + FROM ods_hr_collection_target -- 目标值收集 + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + +WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +${IF(LEN(p_area) > 0,"", "*/")} + + + -- ====================================== -- 指标卡_离职人数离职率/目标值 -- ====================================== +-- 整体 +${IF(LEN(p_area) = 0,"", "/*")} SELECT -CASE WHEN ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) = 0 THEN 0 - ELSE SUM(zlzrs) / ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) - END AS lz_rate -,'0.002' AS lz_rate_target +sum(lz_rate) AS lz_rate +,sum(lz_rate_target) AS lz_rate_target +,CASE WHEN sum(lz_rate_target) = 0 THEN 0 + ELSE sum(lz_rate) / sum(lz_rate_target) END AS target_rate +FROM +( +SELECT +CASE WHEN SUM(zzrs) = 0 THEN 0 + ELSE SUM(zlzrs) / SUM(zzrs) + END AS lz_rate -- 离职率 +,0 AS lz_rate_target -- 离职率目标 FROM ( SELECT - nd -- 年度 - ,jd -- 季度 - ,yd -- 月度 - ,rq -- 日期 - ,zb -- 总部 - ,pq -- 片区 - ,xm -- 项目 - ,zzrs -- 当天在职人数 - ,zdlzrs -- 当天主动离职人数 - ,bdlzrs -- 当天被动离职人数 + zzrs -- 当天在职人数 ,zlzrs -- 当天总离职人数 - ,CASE WHEN rq = CONCAT('${p_ym}','-01') THEN zzrs ELSE 0 END AS StartOfmonth_zzrs -- 月初在职人数 - ,CASE WHEN rq = LAST_DAY(CONCAT('${p_ym}','-01')) THEN zzrs ELSE 0 END AS EndOfmonth_zsrs -- 月末在职人数 FROM ods_hr_view_lzbl_d - WHERE LEFT(rq,7) = '${p_ym}' + WHERE LEFT(rq,4) = left('${p_ym}',4) + AND LEFT(rq,7) <= '${p_ym}' AND pq not in('89','267') -- 排除了佳美、悦汇 - -- 排除了: - -- 89:佳美物业公司 - -- 153:领悦集团总部 - -- 267:悦汇发展公司 )A +UNION ALL +SELECT +0 AS lz_rate +,lz_rate_target -- 离职率目标 +FROM ods_hr_collection_target_overall +WHERE ym = '${p_ym}' +)T + + +${IF(LEN(p_area) = 0,"", "*/")} + +-- 片区 +${IF(LEN(p_area) > 0,"", "/*")} + +SELECT + CASE WHEN sum(zzrs) = 0 THEN 0 + ELSE SUM(zlzrs) / sum(zzrs) + END AS lz_rate +,sum(C.lz_rate_target) AS lz_rate_target +,CASE WHEN (sum(zzrs) = 0 OR sum(lz_rate_target)= 0) THEN 0 + ELSE (SUM(zlzrs) / sum(zzrs)) / sum(lz_rate_target) + END AS target_rate +FROM + ( + SELECT + pq -- 片区 + ,SUM(zzrs) AS zzrs-- 当天在职人数 + ,sum(zlzrs) AS zlzrs -- 当天总离职人数 + FROM ods_hr_view_lzbl_d + WHERE LEFT(rq,7) = '${p_ym}' + AND pq not in('89','267') -- 排除了佳美、悦汇 + -- 排除了: + -- 89:佳美物业公司 + -- 153:领悦集团总部 + -- 267:悦汇发展公司 + GROUP BY pq + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + FROM dim_organ_mapping + WHERE length(hr_organ_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + )B + ON A.pq = B.hr_organ_id LEFT JOIN -( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 -)B -ON A.pq = B.hr_organ_id -and A.xm = b.hr_comm_id + ( + SELECT + organ_code + ,lz_rate_target + FROM ods_hr_collection_target_organ + WHERE ym = '${p_ym}' + )C + ON a.pq = c.organ_code where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + +${IF(LEN(p_area) > 0,"", "*/")} \ No newline at end of file diff --git a/finereport/tianbao/5_manpower/1_月度合同到期提醒.sql b/finereport/tianbao/5_manpower/1_月度合同到期提醒.sql new file mode 100644 index 0000000..2d9d235 --- /dev/null +++ b/finereport/tianbao/5_manpower/1_月度合同到期提醒.sql @@ -0,0 +1,49 @@ +DROP TABLE ods_renli_contract_terminate; +CREATE TABLE ods_renli_contract_terminate ( +contract_code varchar(50) COMMENT '合同编号' +,organ_code varchar(50) COMMENT 'erp片区code' +,organ_name varchar(100) COMMENT 'erp片区名称' +,comm_id varchar(50) COMMENT '项目id' +,comm_name varchar(100) COMMENT '项目名称' +,contract_type varchar(100) COMMENT '合同类型' +,contract_name varchar(100) COMMENT '合同名称' +,contract_amount decimal(16,8) COMMENT '合同金额' +,party_a varchar(50) COMMENT '合作甲方' +,party_b varchar(50) COMMENT '合作乙方' +,start_date varchar(50) COMMENT '生效日期' +,end_date varchar(50) COMMENT '结束日期' +,update_by varchar(50) COMMENT '数据更新人' +,update_time datetime COMMENT '数据更新时间' +-- ,PRIMARY KEY (contract_code) +) COMMENT='月度合同到到期提醒填报'; + +SELECT +contract_code -- 合同编号 +,organ_code -- erp片区code +,organ_name -- erp片区名称 +,comm_id -- 项目id +,comm_name -- 项目名称 +,contract_type -- 合同类型 +,contract_name -- 合同名称 +,contract_amount -- 合同金额 +,party_a -- 合作甲方 +,party_b -- 合作乙方 +,start_date -- 生效日期 +,end_date -- 结束日期 +FROM ods_renli_contract_terminate +; + + +1、合同到期日-当期日期=90天提醒。显示到期合同总数量,并可下钻明细。 +2、合同到期日-当期日期=60天提醒,显示到期合同总数量,并可下钻明细。 +3、合同到期日-当期日期=30天提醒,显示到期合同总数量,并可下钻明细。 +4、合同到期日-当期日期=15天提醒,显示到期合同总数量,并可下钻明细。 +5、合同到期日-当期日期=7天提醒,显示到期合同总数量,并可下钻明细。" + + + + +-- VALUE("dict_片区_项目",3,4,D4) + +-- VALUE("dict_片区",1,2,B2) +-- VALUE("dict_片区_项目",3,4,C2) \ No newline at end of file diff --git a/finereport/xiazuan/5_manpower/2_员工满编率明细.sql b/finereport/xiazuan/5_manpower/2_员工满编率明细.sql index 0a962f5..5351e9e 100644 --- a/finereport/xiazuan/5_manpower/2_员工满编率明细.sql +++ b/finereport/xiazuan/5_manpower/2_员工满编率明细.sql @@ -1,31 +1,22 @@ SELECT -T1.hr_comm_name AS hr_comm_name -,T1.hr_organ_name AS hr_organ_name -,T1.bzs AS bzs -- 当月编制数 -,T1.zzs AS zzs -- 当月在职数 -,'0' AS target_full_rate -- 月均满编率目标 -,CASE when T1.bzs = 0 then 0 else T1.zzs / T1.bzs end AS full_rate -- 月度满编率 -,'0' AS target_rate -- 月均满编率目标 -,T1.rate AS rate -- 月均满编率实际 + B.hr_comm_name AS hr_comm_name -- 片区 + ,B.hr_organ_name AS hr_organ_name -- 项目 + ,SUM(A.bzs) AS bzs -- 编制数 + ,SUM(A.zzs) AS zzs -- 在职数 + ,SUM(C.full_rate_target) AS full_rate_target -- 满编率目标值 + ,SUM(C.avg_full_rate_target) AS avg_full_rate_target -- 月均满编率目标值 + ,CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(zzs) / SUM(bzs) END AS RATE -- 月均满编率 FROM ( - SELECT - B.hr_comm_name AS hr_comm_name - ,B.hr_organ_name AS hr_organ_name - ,SUM(A.bzs) AS bzs - ,SUM(A.zzs) AS zzs - ,CASE WHEN SUM(bzs) = 0 THEN 0 ELSE SUM(zzs) / SUM(bzs) END AS RATE - FROM - ( SELECT pq -- 片区 ,xm -- 项目 ,zzs -- 在职数 ,bzs -- 编制数 - ,rq FROM ods_hr_view_mbl_d - WHERE rq = '${p_ym}' + WHERE ny >= '${p_startym}' + AND ny <= '${p_ym}' -- 注意 目前会有一个空的排名 是因为佳美物业未做映射 AND pq NOT IN('89','267') )A @@ -39,7 +30,7 @@ FROM ,hr_comm_id -- hr项目id ,hr_comm_name -- hr项目名称 FROM dim_organ_mapping - WHERE hr_organ_name IS NOT NULL + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -47,7 +38,6 @@ FROM ,hr_organ_name ,hr_comm_id ,hr_comm_name - UNION ALL SELECT '0000' AS organ_code -- erp片区编码 @@ -60,9 +50,20 @@ FROM )B ON A.pq = B.hr_organ_id and A.xm = B.hr_comm_id + LEFT JOIN + ( + SELECT + comm_id + ,organ_code + ,full_rate_target -- 满编率目标 + ,avg_full_rate_target -- 月均满编率目标 + FROM ods_hr_collection_target + WHERE ym = '${p_ym}' + )C + ON A.pq = C.organ_code + AND A.xm = C.comm_id WHERE 1=1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('" + p_area +"')", "")} GROUP BY B.hr_comm_name - ,B.hr_organ_name -)T1 \ No newline at end of file + ,B.hr_organ_name \ No newline at end of file diff --git a/finereport/xiazuan/5_manpower/3_员工离职率明细.sql b/finereport/xiazuan/5_manpower/3_员工离职率明细.sql index af22985..23281d3 100644 --- a/finereport/xiazuan/5_manpower/3_员工离职率明细.sql +++ b/finereport/xiazuan/5_manpower/3_员工离职率明细.sql @@ -1,38 +1,164 @@ SELECT ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} AS hr_organ_name -,CASE WHEN ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) = 0 THEN 0 - ELSE SUM(zlzrs) / ((SUM(StartOfmonth_zzrs) + SUM(EndOfmonth_zsrs)) / 2) - END AS lz_rate -,SUM(StartOfmonth_zzrs) AS StartOfmonth_zzrs -- 月初在职人数 -,SUM(EndOfmonth_zsrs) AS EndOfmonth_zsrs -- 月末在职人数 -,sum(zdlzrs) AS zdlzrs -- 主动离职人数 -,sum(bdlzrs) AS bdlzrs -- 当天被动离职人数 -,SUM(zlzrs) AS zlzrs -- 总离职人数 +,SUM(A.StartOfmonth_zzrs) AS StartOfmonth_zzrs -- 月初在职人数 +,SUM(A.EndOfmonth_zsrs) AS EndOfmonth_zsrs -- 月末在职人数 +,sum(A.zdlzrs) AS zdlzrs -- 主动离职人数 +,CASE WHEN SUM(A.zzrs) = 0 THEN 0 ELSE sum(A.zdlzrs) / SUM(A.zzrs) END AS zdlz_rate +,sum(A.bdlzrs) AS bdlzrs -- 当天被动离职人数 +,CASE WHEN SUM(A.zzrs) = 0 THEN 0 ELSE sum(A.bdlzrs) / SUM(A.zzrs) END AS bdlz_rate +,SUM(A.zlzrs) AS zlzrs -- 总离职人数 +,CASE WHEN SUM(A.zzrs) = 0 THEN 0 ELSE sum(A.zlzrs) / SUM(A.zzrs) END AS lz_rate FROM ( - SELECT - nd -- 年度 - ,jd -- 季度 - ,yd -- 月度 - ,rq -- 日期 - ,zb -- 总部 - ,pq -- 片区 - ,xm -- 项目 - ,zzrs -- 当天在职人数 - ,zdlzrs -- 当天主动离职人数 - ,bdlzrs -- 当天被动离职人数 - ,zlzrs -- 当天总离职人数 - ,CASE WHEN rq = CONCAT('${p_ym}','-01') THEN zzrs ELSE 0 END AS StartOfmonth_zzrs -- 月初在职人数 - ,CASE WHEN rq = LAST_DAY(CONCAT('${p_ym}','-01')) THEN zzrs ELSE 0 END AS EndOfmonth_zsrs -- 月末在职人数 + SELECT + pq, xm, ym, StartOfmonth_zzrs, EndOfmonth_zsrs, zdlzrs, bdlzrs, zlzrs +,(StartOfmonth_zzrs + EndOfmonth_zsrs) / 2 AS zzrs + FROM + ( + SELECT + pq -- 片区 + ,xm -- 项目 + ,LEFT(rq,7) AS ym + ,SUM(CASE WHEN rq = CONCAT('${p_ym}','-01') THEN zzrs ELSE 0 END) AS StartOfmonth_zzrs -- 月初在职人数 + ,SUM(CASE WHEN rq = LAST_DAY(CONCAT('${p_ym}','-01')) THEN zzrs ELSE 0 END) AS EndOfmonth_zsrs -- 月末在职人数 + ,SUM(zdlzrs) AS zdlzrs -- 当天主动离职人数 + ,SUM(bdlzrs) AS bdlzrs -- 当天被动离职人数 + ,SUM(zlzrs) AS zlzrs -- 当天总离职人数 FROM ods_hr_view_lzbl_d - WHERE LEFT(rq,7) = '${p_ym}' - AND pq not in('89','267') -- 排除了: -- 89:佳美物业公司 - -- 153:领悦集团总部 -- 267:悦汇发展公司 + GROUP BY pq, xm, rq + UNION ALL + + SELECT + T1.organ_code AS pq + ,T1.comm_id AS xm + ,T1.ym AS ym + ,SUM(T1.begin_num ) AS StartOfmonth_zzrs-- 月初在职 + ,SUM(T1.end_num ) AS EndOfmonth_zsrs-- 月末在职 + ,SUM(T1.active_quit) AS zdlzrs-- 主动离职人数 + ,SUM(T1.pass_quit ) AS bdlzrs-- 被动离职人数 + ,SUM(T1.active_quit) + SUM(T1.pass_quit ) AS zlzrs + FROM + ( + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-01' AS ym + ,COALESCE(jan_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jan_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jan_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jan_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-02' AS ym + ,COALESCE(feb_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(feb_end_num,0) AS end_num -- 月末在职 + ,COALESCE(feb_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(feb_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-03' AS ym + ,COALESCE(mar_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(mar_end_num,0) AS end_num -- 月末在职 + ,COALESCE(mar_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(mar_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-04' AS ym + ,COALESCE(apr_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(apr_end_num,0) AS end_num -- 月末在职 + ,COALESCE(apr_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(apr_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-05' AS ym + ,COALESCE(may_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(may_end_num,0) AS end_num -- 月末在职 + ,COALESCE(may_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(may_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-06' AS ym + ,COALESCE(jun_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jun_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jun_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jun_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-07' AS ym + ,COALESCE(jul_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jul_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jul_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jul_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-08' AS ym + ,COALESCE(aug_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(aug_end_num,0) AS end_num -- 月末在职 + ,COALESCE(aug_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(aug_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + UNION ALL + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-09' AS ym + ,COALESCE(sep_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(sep_end_num,0) AS end_num -- 月末在职 + ,COALESCE(sep_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(sep_pass_quit,0) AS pass_quit -- 被动离职人数 + FROM ods_hr_history_erp_date + )T1 + GROUP BY T1.organ_code, T1.comm_id ,T1.ym + )T + WHERE ym >= '${p_startym}' + AND ym <= '${p_ym}' + AND pq not in('89','267') + AND (pq is NOT NULL OR xm IS NOT NULL ) + )A -LEFT JOIN +RIGHT JOIN ( SELECT organ_code -- erp片区编码 @@ -42,6 +168,7 @@ LEFT JOIN ,hr_comm_id -- hr项目id ,hr_comm_name -- hr项目名称 FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -65,56 +192,193 @@ where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('" + p_area +"')", "")} GROUP BY ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} +ORDER BY ${IF(LEN(p_area)>0,"B.hr_comm_name", "hr_organ_name")} --- 离职原因占比 + + +-- ====================================== +-- 天问提供历史数据处理 +-- ====================================== + + +DROP TABLE ods_hr_history_erp_date; + +CREATE TABLE ods_hr_history_erp_date ( + organ_name varchar(100) COMMENT 'erp片区名称' +,organ_code varchar(100) COMMENT 'erp片区编码' +,comm_name varchar(100) COMMENT '项目名称' +,comm_id varchar(100) COMMENT '项目id' +,sep_end_num int COMMENT '9月末在职人数' +,sep_pass_quit int COMMENT '9月被动离职人数' +,sep_active_quit int COMMENT '9月主动离职人数' +,sep_begin_num int COMMENT '9月初在职' + +,aug_end_num int COMMENT '8月末在职人数' +,aug_pass_quit int COMMENT '8月被动离职人数' +,aug_active_quit int COMMENT '8月主动离职人数' +,aug_begin_num int COMMENT '8月初在职' + +,jul_end_num int COMMENT '7月末在职人数' +,jul_pass_quit int COMMENT '7月被动离职人数' +,jul_active_quit int COMMENT '7月主动离职人数' +,jul_begin_num int COMMENT '7月初在职' + +,jun_end_num int COMMENT '6月末在职人数' +,jun_pass_quit int COMMENT '6月被动离职人数' +,jun_active_quit int COMMENT '6月主动离职人数' +,jun_begin_num int COMMENT '6月初在职' + +,may_end_num int COMMENT '5月末在职人数' +,may_pass_quit int COMMENT '5月被动离职人数' +,may_active_quit int COMMENT '5月主动离职人数' +,may_begin_num int COMMENT '5月初在职' + +,apr_end_num int COMMENT '4月末在职人数' +,apr_pass_quit int COMMENT '4月被动离职人数' +,apr_active_quit int COMMENT '4月主动离职人数' +,apr_begin_num int COMMENT '4月初在职' + +,mar_end_num int COMMENT '3月末在职人数' +,mar_pass_quit int COMMENT '3月被动离职人数' +,mar_active_quit int COMMENT '3月主动离职人数' +,mar_begin_num int COMMENT '3月初在职' + +,feb_end_num int COMMENT '2月末在职人数' +,feb_pass_quit int COMMENT '2月被动离职人数' +,feb_active_quit int COMMENT '2月主动离职人数' +,feb_begin_num int COMMENT '2月初在职' + +,jan_end_num int COMMENT '1月末在职人数' +,jan_pass_quit int COMMENT '1月被动离职人数' +,jan_active_quit int COMMENT '1月主动离职人数' +,jan_begin_num int COMMENT '1月初在职' +) COMMENT='erp系统历史离职人数'; + + +SELECT * FROM ods_hr_history_erp_date + + +-- 列转行处理 SELECT - A.lzlx AS lzlx -- 离职类型id - ,A.lzlxname AS lzlxname -- 离职类型名称 - ,A.lzyy AS lzyy -- 离职原因id - ,A.lzyyname AS lzyyname -- 离职原因名称 - ,A.lzrs AS lzrs -- 离职人数 + T1.organ_code AS organ_code +,T1.organ_name AS organ_name +,T1.comm_id AS comm_id +,T1.comm_name AS comm_name +,T1.ym AS ym +,SUM(T1.begin_num ) AS begin_num-- 月初在职 +,SUM(T1.end_num ) AS end_num-- 月末在职 +,SUM(T1.active_quit) AS active_quit-- 主动离职人数 +,SUM(T1.pass_quit ) AS pass_quit-- 被动离职人数 FROM - ( - SELECT - pq -- 片区 - ,xm -- 项目 - ,lzlx -- 离职类型id - ,lzlxname -- 离职类型名称 - ,lzyy -- 离职原因id - ,lzyyname -- 离职原因名称 - ,lzrs -- 离职人数 - FROM ods_hr_view_lzrs_fl_d - WHERE LEFT(rq,7) = '${p_ym}' - )A - LEFT JOIN - ( - SELECT - organ_code -- erp片区编码 - ,organ_name -- erp片区名称 - ,hr_organ_id -- hr片区编码 - ,hr_organ_name -- hr片区名称 - ,hr_comm_id -- hr项目id - ,hr_comm_name -- hr项目名称 - FROM dim_organ_mapping - GROUP BY - organ_code - ,organ_name - ,hr_organ_id - ,hr_organ_name - ,hr_comm_id - ,hr_comm_name - UNION ALL - SELECT - '0000' AS organ_code -- erp片区编码 - ,'' AS organ_name -- erp片区名称 - ,'153' AS hr_organ_id -- hr片区编码 - ,'领悦集团总部' AS hr_organ_name -- hr片区名称 - ,'153' AS hr_comm_id -- hr项目id - ,'领悦集团总部' AS hr_comm_name -- hr项目名称 -)B - ON A.pq = B.hr_organ_id - and A.xm = B.hr_comm_id -where 1 = 1 - ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +( + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-01' AS ym + ,COALESCE(jan_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jan_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jan_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jan_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-02' AS ym + ,COALESCE(feb_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(feb_end_num,0) AS end_num -- 月末在职 + ,COALESCE(feb_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(feb_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-03' AS ym + ,COALESCE(mar_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(mar_end_num,0) AS end_num -- 月末在职 + ,COALESCE(mar_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(mar_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-04' AS ym + ,COALESCE(apr_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(apr_end_num,0) AS end_num -- 月末在职 + ,COALESCE(apr_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(apr_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-05' AS ym + ,COALESCE(may_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(may_end_num,0) AS end_num -- 月末在职 + ,COALESCE(may_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(may_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-06' AS ym + ,COALESCE(jun_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jun_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jun_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jun_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-07' AS ym + ,COALESCE(jul_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(jul_end_num,0) AS end_num -- 月末在职 + ,COALESCE(jul_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(jul_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-08' AS ym + ,COALESCE(aug_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(aug_end_num,0) AS end_num -- 月末在职 + ,COALESCE(aug_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(aug_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +UNION ALL +SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,'2024-09' AS ym + ,COALESCE(sep_begin_num,0) AS begin_num -- 月初在职 + ,COALESCE(sep_end_num,0) AS end_num -- 月末在职 + ,COALESCE(sep_active_quit,0) AS active_quit -- 主动离职人数 + ,COALESCE(sep_pass_quit,0) AS pass_quit -- 被动离职人数 +FROM ods_hr_history_erp_date +)T1 +GROUP BY T1.organ_code, T1.organ_name, T1.comm_id, T1.comm_name,T1.ym diff --git a/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql b/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql index 5164b0c..03dfb89 100644 --- a/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql +++ b/finereport/xiazuan/5_manpower/4_人力行政成本费率明细.sql @@ -140,3 +140,237 @@ FROM ${if(p_type='行政',"","*/")} + + +-- ====================================== +-- 使用填报数据来源 +-- ====================================== + + +${if(p_type='人力',"","/*")} + + + SELECT + A.organ_name AS organ_name -- 片区 + ,A.comm_name AS comm_name -- 项目 + ,SUM(D.lc_fee_rate_target) AS lc_fee_rate_target -- 人力费率年度目标值 + ,SUM(B.index_market_target) AS index_market_target-- 收入累计目标值 + ,SUM(A.lc_target_fee) AS lc_target_fee -- 人力成本累计目标值 + ,SUM(C.lc_fee_rate_target) AS lc_fee_rate_target -- 人力成本费率目标值 + ,SUM(B.index_income_fact) AS index_income_fact -- 实际收入累计值 + ,SUM(A.lc_total_fee) AS lc_total_fee -- 人力成本累计实际 + ,CASE WHEN sum(B.index_income_fact) = 0 THEN 0 + ELSE SUM(A.lc_total_fee) / SUM(B.index_income_fact) END AS fee_rate -- 费率实际值 + + FROM + ( -- 费控人力行政成本填报 + SELECT + organ_code -- 片区id + ,organ_name -- 片区名称 + ,comm_id -- 项目id + ,comm_name -- 项目名称 + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN budget_amount ELSE 0 END),0) AS lc_target_fee -- 人力成本预算费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN budget_amount ELSE 0 END),0) AS ac_target_fee -- 行政成本预算费用 + from dw.ods_cost_collection_lc_ac + WHERE ym >= '${p_startym}' + AND ym <= '${p_ym}' + GROUP BY organ_code, organ_name, comm_id, comm_name + )A + LEFT JOIN + ( + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + )A1 + ON A.organ_code = A1.organ_code + and A.comm_id = A1.hr_comm_id + LEFT JOIN + (-- 公司实际收入 + SELECT + organ_code + ,comm_id + ,SUM(index_market_target) AS index_market_target -- 收入目标值 + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + FROM ods_caiwu_feecollection + WHERE category = '物业' + AND yr_month >= '${p_startym}' + AND yr_month <= '${p_ym}' + GROUP BY + organ_code,comm_id + )B + ON A1.organ_code = B.organ_code + AND A1.comm_id = B.comm_id + LEFT JOIN + (-- 费控月度目标值 + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code + AND A.comm_id = C.comm_id + LEFT JOIN + (-- 费控年度目标值 + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE left(ym,4) = left('${p_ym}',4) + AND length(ym) = 4 + )D + ON A.organ_code = D.organ_code + AND A.comm_id = D.comm_id + WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + GROUP BY A.organ_name + ,A.comm_name + +${if(p_type='人力',"","*/")} + + +${if(p_type='行政',"","/*")} + + +SELECT + A.organ_name AS organ_name -- 片区 + ,A.comm_name AS comm_name -- 项目 + ,SUM(D.ac_fee_rate_target) AS lc_fee_rate_target -- 人力费率年度目标值 + ,SUM(B.index_market_target) AS index_market_target-- 收入累计目标值 + ,SUM(A.ac_target_fee) AS lc_target_fee -- 人力成本累计目标值 + ,SUM(C.ac_fee_rate_target) AS lc_fee_rate_target -- 人力成本费率目标值 + ,SUM(B.index_income_fact) AS index_income_fact -- 实际收入累计值 + ,SUM(A.ac_total_fee) AS lc_total_fee -- 人力成本累计实际 + ,CASE WHEN sum(B.index_income_fact) = 0 THEN 0 + ELSE SUM(A.ac_total_fee) / SUM(B.index_income_fact) END AS fee_rate -- 费率实际值 + +FROM + ( -- 费控人力行政成本填报 + SELECT + organ_code -- 片区id + ,organ_name -- 片区名称 + ,comm_id -- 项目id + ,comm_name -- 项目名称 + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '人力成本' THEN budget_amount ELSE 0 END),0) AS lc_target_fee -- 人力成本预算费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 + ,coalesce(SUM(CASE WHEN cost_type = '行政成本' THEN budget_amount ELSE 0 END),0) AS ac_target_fee -- 行政成本预算费用 + from dw.ods_cost_collection_lc_ac + WHERE ym >= '${p_startym}' + AND ym <= '${p_ym}' + GROUP BY organ_code, organ_name, comm_id, comm_name + )A + LEFT JOIN + ( + SELECT + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,comm_id + ,comm_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'' AS comm_id + ,'' AS comm_name + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + )A1 + ON A.organ_code = A1.organ_code + and A.comm_id = A1.hr_comm_id + LEFT JOIN + (-- 公司实际收入 + SELECT + organ_code + ,comm_id + ,SUM(index_market_target) AS index_market_target -- 收入目标值 + ,SUM(index_income_fact) AS index_income_fact -- 实际收入 + FROM ods_caiwu_feecollection + WHERE category = '物业' + AND yr_month >= '${p_startym}' + AND yr_month <= '${p_ym}' + GROUP BY + organ_code,comm_id + )B + ON A1.organ_code = B.organ_code + AND A1.comm_id = B.comm_id + LEFT JOIN + (-- 费控月度目标值 + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE ym = '${p_ym}' + )C + ON A.organ_code = C.organ_code + AND A.comm_id = C.comm_id + LEFT JOIN + (-- 费控年度目标值 + SELECT + organ_code + ,comm_id + ,lc_fee_rate_target -- 人力成本费率目标 + ,ac_fee_rate_target -- 行政成本费率目标 + FROM ods_cost_collection_target + WHERE left(ym,4) = left('${p_ym}',4) + AND length(ym) = 4 + )D + ON A.organ_code = D.organ_code + AND A.comm_id = D.comm_id +WHERE 1 = 1 + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +GROUP BY A.organ_name + ,A.comm_name + ${if(p_type='行政',"","*/")} diff --git a/finereport/xiazuan/5_manpower/5_在职人员明细.sql b/finereport/xiazuan/5_manpower/5_在职人员明细.sql index 39da933..121eff8 100644 --- a/finereport/xiazuan/5_manpower/5_在职人员明细.sql +++ b/finereport/xiazuan/5_manpower/5_在职人员明细.sql @@ -42,6 +42,70 @@ GROUP BY nld + +-- 年龄分布 +-- 年龄<30岁;30岁≤年龄<40岁;40岁≤年龄<50岁;50岁≤年龄<60岁;60岁≤年龄<65岁;年龄≥65岁; +SELECT + CASE WHEN A.nl < 30.00 THEN '年龄<30岁' + WHEN A.nl >= 30.00 AND A.nl < 40.00 THEN '30岁≤年龄<40岁' + WHEN A.nl >= 40.00 AND A.nl < 50.00 THEN '40岁≤年龄<50岁' + WHEN A.nl >= 50.00 AND A.nl < 60.00 THEN '50岁≤年龄<60岁' + WHEN A.nl >= 60.00 AND A.nl < 65.00 THEN '60岁≤年龄<65岁' + WHEN A.nl >= 65.00 THEN '年龄≥65岁' + END AS nld + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,nl + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + CASE WHEN nl < 30.00 THEN '年龄<30岁' + WHEN nl >= 30.00 AND nl < 40.00 THEN '30岁≤年龄<40岁' + WHEN nl >= 40.00 AND nl < 50.00 THEN '40岁≤年龄<50岁' + WHEN nl >= 50.00 AND nl < 60.00 THEN '50岁≤年龄<60岁' + WHEN nl >= 60.00 AND nl < 65.00 THEN '60岁≤年龄<65岁' + WHEN nl >= 65.00 THEN '年龄≥65岁' + END + + -- ====================================== -- 司龄分布 -- ====================================== @@ -84,9 +148,69 @@ where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} GROUP BY sld +-- 司龄<3个月内;3个月≤司龄<1年;1年≤司龄<3年;3年≤司龄<5年;5年≤司龄<10年;10年≤司龄<15年;司龄≥15年; - - +SELECT + CASE WHEN A.sl < 0.30 THEN '司龄<3个月内' + WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄<1年' + WHEN A.sl >= 1.00 AND A.sl < 3.00 THEN '1年≤司龄<3年' + WHEN A.sl >= 3.00 AND A.sl < 5.00 THEN '3年≤司龄<5年' + WHEN A.sl >= 5.00 AND A.sl < 10.00 THEN '5年≤司龄<10年' + WHEN A.sl >= 10.00 AND A.sl < 15.00 THEN '10年≤司龄<15年' + WHEN A.sl >= 15.00 THEN '司龄≥15年' + END AS sld + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,sl + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + CASE WHEN A.sl < 0.30 THEN '司龄<3个月内' + WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄<1年' + WHEN A.sl >= 1.00 AND A.sl < 3.00 THEN '1年≤司龄<3年' + WHEN A.sl >= 3.00 AND A.sl < 5.00 THEN '3年≤司龄<5年' + WHEN A.sl >= 5.00 AND A.sl < 10.00 THEN '5年≤司龄<10年' + WHEN A.sl >= 10.00 AND A.sl < 15.00 THEN '10年≤司龄<15年' + WHEN A.sl >= 15.00 THEN '司龄≥15年' + END -- ====================================== -- 学历分布 @@ -132,6 +256,54 @@ where 1 = 1 GROUP BY xl +SELECT + A.xlmc + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,xlmc + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + A.xlmc + -- ====================================== -- 职务角色 @@ -176,7 +348,63 @@ where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} GROUP BY zwje +-- 总部职能中心/一级部门负责人及以上人员 +-- 总部二级职能部门负责人 +-- 片区负责人 +-- 片区职能部门负责人 +-- 项目负责人 +-- 项目部门负责人 +-- 案场负责人 +-- 案场部门负责人 +-- 员工 +SELECT + zwmc AS zwje + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,zwmc + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + A.zwmc @@ -226,6 +454,53 @@ GROUP BY swtx +SELECT + A.zycjname + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,zycjname + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + A.zycjname -- ====================================== -- 一级专业条线 @@ -271,6 +546,60 @@ where 1 = 1 GROUP BY zytx ; + + + + + +SELECT + A.zytxmc + ,count(1) AS sl +FROM + ( + SELECT + pq + ,xm + ,zytxmc + FROM ods_hr_view_zaizhi_user_d + WHERE ny <= '${p_ym}' + AND ny >= '${p_startym}' + )A + LEFT JOIN + ( + SELECT + organ_code -- erp片区编码 + ,organ_name -- erp片区名称 + ,hr_organ_id -- hr片区编码 + ,hr_organ_name -- hr片区名称 + ,hr_comm_id -- hr项目id + ,hr_comm_name -- hr项目名称 + FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 + GROUP BY + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + UNION ALL + SELECT + '0000' AS organ_code -- erp片区编码 + ,'' AS organ_name -- erp片区名称 + ,'153' AS hr_organ_id -- hr片区编码 + ,'领悦集团总部' AS hr_organ_name -- hr片区名称 + ,'153' AS hr_comm_id -- hr项目id + ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + FROM dual + )B + ON A.pq = B.hr_organ_id + and A.xm = b.hr_comm_id +where 1 = 1 + ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} +GROUP BY + A.zytxmc + + -- ====================================== -- 人员明细 -- ====================================== @@ -349,4 +678,9 @@ LEFT JOIN ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id where 1 = 1 -${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} \ No newline at end of file +${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")} + + +-- ====================================== +-- 使用ods_hr_view_zaizhi_user_d表计算人员分布占比 +-- ======================================