diff --git a/finereport/kanban/pc/人力.sql b/finereport/kanban/pc/人力.sql index 402d4e0..0db4946 100644 --- a/finereport/kanban/pc/人力.sql +++ b/finereport/kanban/pc/人力.sql @@ -65,7 +65,15 @@ FROM third_department -- ====================================== -- report_指标卡_在职人数 -- ====================================== - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT SUM(zzs) AS SL FROM @@ -188,7 +196,9 @@ FROM ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -196,6 +206,7 @@ FROM ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name UNION ALL SELECT '0000' AS organ_code -- erp片区编码 @@ -204,15 +215,29 @@ FROM ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id -- hr项目id ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + ,'' AS comm_name )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,"','")+"')", "")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + + -- ====================================== -- 指标卡_离职人数 -- ====================================== - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT SUM(lzrs) AS SL FROM @@ -345,7 +370,9 @@ FROM ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -353,6 +380,7 @@ FROM ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name UNION ALL SELECT '0000' AS organ_code -- erp片区编码 @@ -361,30 +389,90 @@ FROM ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id -- hr项目id ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + ,'' AS comm_name )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,"','")+"')", "")} - +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END -- ====================================== -- 指标卡_人力成本/行政成本 -- ====================================== +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT -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,"','")+"')", "")} - +coalesce(SUM(CASE WHEN A.cost_type = '人力成本' THEN A.actual_amount ELSE 0 END),0) AS lc_total_fee -- 人力成本费用 +,coalesce(SUM(CASE WHEN A.cost_type = '行政成本' THEN A.actual_amount ELSE 0 END),0) AS ac_total_fee -- 行政成本费用 +FROM +( + SELECT + * + FROM dw.ods_cost_collection_lc_ac + WHERE left(ym,4) = left('${p_ym}',4) + AND ym <= '${p_ym}' +)A + LEFT JOIN +( + SELECT + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + ,comm_name + 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 + ,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项目名称 + ,'' AS comm_name +)B +ON A.organ_code = B.hr_organ_id +and A.comm_id = B.hr_comm_id +WHERE 1 = 1 +${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END -- ====================================== -- 员工满编率柱状图 -- ====================================== - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' + ) SELECT yd ,SUM(A.zzs) AS zzs -- 在职数 @@ -518,7 +606,9 @@ LEFT JOIN ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -526,6 +616,7 @@ LEFT JOIN ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name UNION ALL SELECT '0000' AS organ_code -- erp片区编码 @@ -534,11 +625,15 @@ LEFT JOIN ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id -- hr项目id ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + ,'' AS comm_name )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,"','")+"')", "")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END group by yd @@ -549,6 +644,15 @@ yd -- 片区排名 ${IF(LEN(p_area)=0,"", "/*")} +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T1.organ_comm AS organ_comm ,ROW_NUMBER() OVER(ORDER BY T1.RATE DESC) 排名 @@ -702,6 +806,8 @@ FROM 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,"','")+"')", "")} GROUP BY B.hr_organ_name )T1 @@ -709,6 +815,15 @@ ${IF(LEN(p_area)=0,"", "*/")} -- 项目排名 ${IF(LEN(p_area) > 0,"", "/*")} +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' + ) SELECT T1.organ_comm AS organ_comm ,ROW_NUMBER() OVER(ORDER BY T1.RATE DESC) 排名 @@ -834,30 +949,33 @@ FROM )A LEFT JOIN ( - SELECT - organ_code - ,organ_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 - ,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项目名称 + SELECT + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + ,comm_name + 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 + ,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项目名称 + ,'' AS comm_name )B ON A.pq = B.hr_organ_id and A.xm = B.hr_comm_id @@ -874,6 +992,9 @@ FROM AND A.xm = C.comm_id WHERE 1=1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END GROUP BY B.hr_comm_name )T1 @@ -884,7 +1005,15 @@ ${IF(LEN(p_area)>0,"", "*/")} -- ====================================== -- 员工离职原因占比 -- ====================================== - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' + ) SELECT A.lzlx AS lzlx -- 离职类型id ,A.lzlxname AS lzlxname -- 离职类型名称 @@ -913,7 +1042,9 @@ LEFT JOIN ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name FROM dim_organ_mapping + WHERE length(hr_comm_id) > 0 GROUP BY organ_code ,organ_name @@ -921,6 +1052,7 @@ LEFT JOIN ,hr_organ_name ,hr_comm_id ,hr_comm_name + ,comm_name UNION ALL SELECT '0000' AS organ_code -- erp片区编码 @@ -929,17 +1061,30 @@ LEFT JOIN ,'领悦集团总部' AS hr_organ_name -- hr片区名称 ,'153' AS hr_comm_id -- hr项目id ,'领悦集团总部' AS hr_comm_name -- hr项目名称 + ,'' AS comm_name )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,"','")+"')", "")} +AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END -- ====================================== -- 人力行政成本费率柱状图 -- ====================================== ${if(p_type='人力',"","/*")} +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T1.yr_month AS yr_month ,'人力成本' AS name @@ -950,27 +1095,69 @@ SELECT FROM ( SELECT - A.ym AS yr_month - ,A.lc_total_fee AS lc_total_fee - ,b.index_income_fact AS index_income_fact + A.ym AS yr_month + , SUM(A.lc_total_fee) AS lc_total_fee + , SUM(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 + A.ym AS ym + ,A.organ_code AS organ_code + ,A1.comm_id AS comm_id -- erp项目 匹配财务收入填报 + ,A1.comm_name AS comm_name -- erp项目,用作权限控制 + ,A.lc_total_fee AS lc_total_fee + FROM + ( + -- 费控人力行政成本填报 + SELECT organ_code + , comm_id + , 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, comm_id) 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 + )A LEFT JOIN (-- 公司实际收入 SELECT yr_month ,organ_code + ,comm_id ,SUM(index_income_fact) AS index_income_fact -- 实际收入 FROM ods_caiwu_feecollection WHERE category = '物业' @@ -978,49 +1165,106 @@ FROM GROUP BY yr_month ,organ_code + ,comm_id )B - ON A.ym = B.yr_month - AND A.organ_code = B.organ_code + ON A.organ_code = B.organ_code + AND A.ym = B.yr_month + AND A.comm_id = B.comm_id WHERE 1 = 1 ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"A.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","A.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.ym )T1 ORDER BY T1.yr_month ${if(p_type='人力',"","*/")} ${if(p_type='行政',"","/*")} - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T1.yr_month AS yr_month ,'行政成本' AS name ,'行政成本费率' AS name_rate - ,T1.ac_total_fee AS total_fee -- 人力成本 + ,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 -- 实际收入 + A.ym AS yr_month + ,SUM(A.ac_total_fee) AS ac_total_fee -- 行政成本 + ,SUM(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 + A.ym AS ym + ,A.organ_code AS organ_code + ,A1.comm_id AS comm_id -- erp项目 匹配财务收入填报 + ,A1.comm_name AS comm_name-- erp项目,用作权限控制 + ,A.ac_total_fee AS ac_total_fee + FROM + ( -- 费控人力行政成本填报 + SELECT organ_code + , ym + , comm_id + , 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, comm_id + ) 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 + )A LEFT JOIN (-- 公司实际收入 SELECT yr_month ,organ_code + ,comm_id ,SUM(index_income_fact) AS index_income_fact -- 实际收入 FROM ods_caiwu_feecollection WHERE category = '物业' @@ -1028,12 +1272,17 @@ FROM GROUP BY yr_month ,organ_code + ,comm_id )B ON A.ym = B.yr_month - AND A.organ_code = B.organ_code + AND A.organ_code = B.organ_code + AND A.comm_id = B.comm_id WHERE 1=1 - ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"A.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","A.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY A.ym )T1 ORDER BY T1.yr_month ${if(p_type='行政',"","*/")} @@ -1048,7 +1297,7 @@ ${if(p_type='行政',"","*/")} -- 片区排名 ${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "/*")} - SELECT +SELECT A.organ_name AS organ_comm_name ,A.lc_total_fee AS actual_cost -- 人力成本 ,B.index_income_fact AS index_income_fact -- 实际收入 @@ -1065,6 +1314,7 @@ ${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "/*")} 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 A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} GROUP BY organ_code,organ_name )A LEFT JOIN @@ -1092,11 +1342,19 @@ ${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "/*")} )C ON A.organ_code = C.organ_code -${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "*/")} + ${if(and(len(p_area)=0,p_type='人力')," -- 片区排名开始", "*/")} ${if(and(len(p_area)=0,p_type='行政')," -- 片区排名开始", "/*")} - + with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' + ) SELECT A.organ_name AS organ_comm_name ,A.ac_total_fee AS actual_cost -- 成本 @@ -1113,7 +1371,8 @@ SELECT ,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}' + AND ym <= '${p_ym}' + ${IF(LEN(p_area)>0," AND A.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} GROUP BY organ_code,organ_name )A LEFT JOIN @@ -1146,6 +1405,15 @@ ${if(and(len(p_area)=0,p_type='行政')," -- 片区排名开始", "*/")} -- 项目排名 ${if(and(len(p_area)>0,p_type='人力')," -- 片区排名开始", "/*")} +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T.organ_comm_name AS organ_comm_name ,T.actual_cost AS actual_cost @@ -1154,64 +1422,120 @@ SELECT ,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 -- 实际收入 + ,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 + A1.organ_code AS organ_code + ,A1.comm_id AS comm_id + ,A1.comm_name AS comm_name + ,A1.lc_total_fee AS lc_total_fee + ,A2.comm_id AS erp_comm_id + 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 + )A1 + 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项目名称 + )A2 + ON A1.organ_code = A2.organ_code + and A1.comm_id = A2.hr_comm_id + where 1 = 1 + ${IF(LEN(p_area)>0," AND A1.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"A2.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","A2.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + + )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 - 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 + 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 + GROUP BY A.comm_name +)T ${if(and(len(p_area)>0,p_type='人力')," -- 片区排名开始", "*/")} ${if(and(len(p_area)>0,p_type='行政')," -- 片区排名开始", "/*")} - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' + ) SELECT T.organ_comm_name AS organ_comm_name ,T.actual_cost AS actual_cost @@ -1221,7 +1545,7 @@ T.organ_comm_name AS organ_comm_name ,T. target_fee_rate AS target_fee_rate -- 费率目标 FROM ( -SELECT + 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 -- 实际收入 @@ -1229,20 +1553,70 @@ SELECT ,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 + 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 + A1.organ_code AS organ_code + ,A1.comm_id AS comm_id + ,A1.comm_name AS comm_name + ,A1.ac_total_fee AS ac_total_fee + ,A2.comm_id AS erp_comm_id + 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 + )A1 + 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项目名称 + )A2 + ON A1.organ_code = A2.organ_code + and A1.comm_id = A2.hr_comm_id + where 1 = 1 + ${IF(LEN(p_area)>0," AND A1.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"A2.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","A2.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + )A LEFT JOIN (-- 公司实际收入 @@ -1272,8 +1646,7 @@ FROM 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 + GROUP BY A.comm_name )T ${if(and(len(p_area)>0,p_type='行政')," -- 片区排名开始", "*/")} @@ -1286,6 +1659,15 @@ ${if(and(len(p_area)>0,p_type='行政')," -- 片区排名开始", "*/")} -- 片区 ${IF(LEN(p_area)=0,"", "/*")} +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T.hr_organ_name AS hr_organ_name ,T.lz_rate AS lz_rate @@ -1343,6 +1725,9 @@ FROM 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,"','")+"')", "")} + GROUP BY B.hr_organ_name )T @@ -1351,7 +1736,15 @@ ${IF(LEN(p_area)=0,"", "*/")} ${IF(LEN(p_area)>0,"", "/*")} -- 项目 - +with one_to_many AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT T.hr_organ_name AS hr_organ_name ,T.lz_rate AS lz_rate -- 离职率 @@ -1381,30 +1774,33 @@ FROM )A LEFT JOIN ( - SELECT - organ_code - ,organ_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 - ,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项目名称 + SELECT + organ_code + ,organ_name + ,hr_organ_id + ,hr_organ_name + ,hr_comm_id + ,hr_comm_name + ,comm_name + 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 + ,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项目名称 + ,'' AS comm_name )B ON A.pq = B.hr_organ_id and A.xm = b.hr_comm_id @@ -1421,6 +1817,10 @@ FROM AND A.xm = C.comm_id where 1 = 1 ${IF(LEN(p_area)>0," AND B.organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL + THEN ${if(len(p_area)>0,"B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '"+fine_username+"'" + ")","1=1")} + ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END + GROUP BY B.hr_comm_name )T @@ -1663,8 +2063,6 @@ SELECT 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,"", "*/")}