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表计算人员分布占比
+-- ======================================