审单人员效率 PPP 模型的主要目的是通过系统化的计算和分析,评估审单人员的工作效率,并为管理决策提供数据支持。具体包括以下几个方面:
vol_o
)。t_dash_ppp_checker_std_v
)折算审单数量(vol_c
)。效率 = 折合单量 / 有效人天
)。time_break
)。score
)和排名(rank
)。Procedure
)和视图(View
)自动化计算,减少人工干预。审单人员效率 PPP 模型的核心目的是通过数据驱动的方式,量化审单人员的工作效率,优化工时管理,支持绩效评估,并为管理者提供科学的决策依据。同时,模型的标准化流程确保了评估的透明性和一致性,帮助团队实现效率提升和流程优化。
t_dash_ppp_voucher_2022
) → 工时计算(t_dash_ppp_wl_v_s
) → 标椎工时计算(t_dash_ppp_checker_std_v
) → 效率计算(t_dash_ppp_productivity_v
) → 最终评分(t_dash_ppp_score_final
)。view
整合 t_dash_ppp_productivity_v
和 t_dash_ppp_employee
表,计算每个人员的审单量、折合单量和效率。用户名
(VARCHAR): 审单人员。凭证号码
(VARCHAR): 审单的凭证编号。录入日期
(DATE): 审单录入的日期。时间
(VARCHAR): 审单结束的时间。TCode
(VARCHAR): 单据类型。全名
(VARCHAR): 审单人员的全名。ID
: 自增主键。BUSINESS_ID
: 凭证号码 + 全名的组合。TIME_END
: 审单结束时间。TASK_DEF_ID
: 单据类型。BUSINESS_TYPE
: 单据类型的业务分类。EMP
: 审单人员的编号和姓名。time_used
、time_break
等)。ppp_month
: 审单月份。business_type
: 单据业务类型。task_def_id
: 单据类型。time_break
: 是否有时间中断。std_time
: 标准工时。ttl_time
: 总工时。ttl_cnt
: 审单数量。ex_rate
: 折算率。ppp_type
: 审单类型。ppp_date
: 审单日期。pernr
: 审单人员编号。business_type
: 单据业务类型。ppp_month
: 审单月份。vol_o
: 审单数量。time_used
: 审单工时。vol_b
: 中断的审单数量。vol_c
: 折算后的审单数量。ppp10
t_dash_ppp_wl_v_s
表中。t_dash_ppp_wl_v_s
表中的数据。time_from
、time_used
、time_break
等字段。ppp20
t_dash_ppp_checker_std_v
表中。ex_rate
。ppp30
t_dash_ppp_productivity_v
表中。vol_o
)和审单工时(time_used
)。t_dash_ppp_checker_std_v
,计算折算后的审单数量(vol_c
)。ppp40
vol_c_per_day
)。Field | Type | 说明 |
---|---|---|
组 | varchar(10) | 审单人员的分组(如部门或团队)。 |
人 | varchar(20) | 审单人员的编号和姓名。 |
绩效月 | varchar(6) | 审单的月份(如 202309)。 |
审单量 | decimal(40,5) | 审单数量(vol_o )。 |
折合单量 | decimal(40,5) | 折算后的审单数量(vol_c )。 |
有效人天 | decimal(44,9) | 审单人员的有效工作天数。 |
效率 | decimal(53,9) | 审单效率(vol_c / 有效人天 )。 |
ppp01
的内容说明**ppp01
是一个存储过程,主要用于将审单的原始数据从 t_dash_ppp_voucher_2022
表中提取并插入到中间处理表 T_DASH_PPP_WL_V_S
中。它是整个审单效率计算流程的第一步,目的是为后续的工时计算、标准工时折算和效率评估提供基础数据。
数据来源:
t_dash_ppp_voucher_2022
表中提取审单的原始数据。TCode
)、全名等信息。目标表:
T_DASH_PPP_WL_V_S
表中。BUSINESS_ID
)、审单结束时间(TIME_END
)、单据类型(TASK_DEF_ID
)、业务分类(BUSINESS_TYPE
)、审单人员信息(EMP
)等。数据处理逻辑:
用户名
和 凭证号码
拼接为 BUSINESS_ID
。录入日期
和 时间
拼接为 TIME_END
。TCode
直接映射为 BUSINESS_TYPE
。用户名
和 全名
拼接为 EMP
。时间范围过滤:
d0
和 d1
控制)。d0
(DATE): 时间范围的起始日期。d1
(DATE): 时间范围的结束日期。以下是存储过程的主要逻辑分解:
INSERT INTO ... SELECT
语句,从 t_dash_ppp_voucher_2022
表中提取数据并插入到 T_DASH_PPP_WL_V_S
表中。BUSINESS_ID
: 拼接 用户名
和 凭证号码
。TIME_END
: 拼接 录入日期
和 时间
,格式化为 YYYY-MM-DD HH:MM:SS
。TASK_DEF_ID
: 直接使用 TCode
的值。BUSINESS_TYPE
: 直接使用 TCode
的值。EMP
: 拼接 PERNR
和 全名
。d0
和 d1
之间的数据。以下是存储过程的关键代码段及其功能说明:
sql
CREATE PROCEDURE `ofssc`.`ppp01`(IN `d0` date, IN `d1` date)
BEGIN
-- 插入数据到 T_DASH_PPP_WL_V_S 表
INSERT INTO T_DASH_PPP_WL_V_S (
BUSINESS_ID,
TIME_END,
TASK_DEF_ID,
BUSINESS_TYPE,
EMP
)
SELECT
CONCAT(V.凭证号码, E.PERNR) AS BUSINESS_ID, -- 拼接凭证号码和员工编号
CONCAT(DATE_FORMAT(V.录入日期, '%y-%m-%d'), ' ', V.时间) AS TIME_END, -- 拼接录入日期和时间
V.TCode AS TASK_DEF_ID, -- 使用 TCode 作为 TASK_DEF_ID
V.TCode AS BUSINESS_TYPE, -- 使用 TCode 作为 BUSINESS_TYPE
CONCAT(E.PERNR, '-', V.全名) AS EMP -- 拼接员工编号和全名
FROM
t_dash_ppp_employee E -- 员工信息表
INNER JOIN
T_DASH_PPP_VOUCHER_2022 V -- 审单原始数据表
ON
E.NACHN = V.全名 -- 根据员工全名进行关联
WHERE
v.录入日期 <= d1 AND v.录入日期 >= d0; -- 过滤时间范围内的数据
END;
数据预处理:
t_dash_ppp_voucher_2022
表中提取并插入到中间表 T_DASH_PPP_WL_V_S
中。时间范围过滤:
数据关联:
t_dash_ppp_employee
)与审单原始数据表(t_dash_ppp_voucher_2022
)通过 全名
字段进行关联,补充审单人员的编号信息。执行 ppp01
后,目标表 T_DASH_PPP_WL_V_S
中会新增以下字段的数据:
BUSINESS_ID
: 审单的唯一标识。TIME_END
: 审单结束的完整时间。TASK_DEF_ID
: 审单的单据类型。BUSINESS_TYPE
: 审单的业务分类。EMP
: 审单人员的编号和姓名。ppp01
是审单效率计算流程的第一步,负责将原始数据转换为中间处理表的标准格式。ppp10
)、标准工时折算(ppp20
)和效率评估(ppp30
)都依赖于 T_DASH_PPP_WL_V_S
表中的数据。ppp01
存储过程的主要功能是从原始审单数据表中提取数据,并将其插入到中间处理表 T_DASH_PPP_WL_V_S
中。通过拼接字段、时间范围过滤和数据关联,为后续的审单效率计算提供了标准化的基础数据。它是整个审单效率计算流程的重要起点。
ppp20
的内容说明**ppp20
是一个存储过程,主要用于计算审单的标椎工时(标准工时)和折算率,并将结果存储到目标表 t_dash_ppp_checker_std_v
中。它是审单效率计算流程中的重要步骤,为后续的效率评估提供标椎工时和折算率的依据。
计算标椎工时:
std_time
)。计算折算率:
ex_rate
)是实际工时与标椎工时的比值,用于将实际审单数量折算为标准审单数量。数据分组:
business_type
)、单据类型(task_def_id
)和时间范围(ppp_month
)进行分组计算。存储结果:
t_dash_ppp_checker_std_v
中,供后续步骤使用。d0
(DATE): 时间范围的起始日期。d1
(DATE): 时间范围的结束日期。pppmonth
(VARCHAR): 审单月份,用于标识数据的时间范围。以下是存储过程的主要逻辑分解:
t_dash_ppp_checker_std_v
中与当前 ppp_month
相关的旧数据,确保计算结果的准确性。t_dash_ppp_wl_v_s
表中的数据,按照业务类型、单据类型和时间范围分组。ttl_time
)和审单数量(ttl_cnt
)。std_time
): sql
std_time = ttl_time / ttl_cnt
ex_rate
):
time_break = 'Y'
),则不参与折算率的计算。t_dash_ppp_checker_std_v
中,字段包括:
ppp_month
: 审单月份。business_type
: 业务类型。task_def_id
: 单据类型。time_break
: 是否有时间中断。std_time
: 标椎工时。ttl_time
: 总工时。ttl_cnt
: 审单数量。ex_rate
: 折算率。3.54778
)。以下是存储过程的关键代码段及其功能说明:
sql
CREATE DEFINER=`root`@`%` PROCEDURE `ofssc`.`ppp20`(IN `d0` date, IN `d1` date, IN `pppmonth` varchar(6))
BEGIN
-- 删除旧数据
DELETE FROM t_dash_ppp_checker_std_v WHERE ppp_month = pppmonth;
-- 插入标椎工时和折算率
INSERT INTO t_dash_ppp_checker_std_v (
ppp_month,
business_type,
task_def_id,
time_break,
std_time,
ttl_time,
ttl_cnt,
ex_rate,
time_from,
time_till
)
SELECT
pppmonth,
business_type,
task_def_id,
time_break,
SUM(w.time_used) / COUNT(1) AS std_time, -- 计算标椎工时
SUM(w.time_used) AS ttl_time, -- 计算总工时
COUNT(1) AS ttl_cnt, -- 计算审单数量
0 AS ex_rate, -- 初始化折算率
d0 AS time_from, -- 时间范围的起始日期
d1 AS time_till -- 时间范围的结束日期
FROM
t_dash_ppp_wl_v_s w
WHERE
w.time_end >= d0 AND w.time_end < CONCAT(d1, ' 23:59:59')
GROUP BY
task_def_id, business_type, time_break;
-- 设置默认折算率
SELECT std_time INTO vstd_time
FROM t_dash_ppp_checker_std_v
WHERE ppp_month = pppmonth
AND business_type = 'YNB0101'
AND task_def_id = 'ND1100'
AND time_break = '';
SET vstd_time = 3.54778; -- 默认值
IF vstd_time > 0 THEN
UPDATE t_dash_ppp_checker_std_v
SET ex_rate = std_time / vstd_time
WHERE ppp_month = pppmonth;
END IF;
END;
计算标椎工时:
计算折算率:
数据存储:
t_dash_ppp_checker_std_v
中,供后续步骤使用。默认值处理:
执行 ppp20
后,目标表 t_dash_ppp_checker_std_v
中会新增以下字段的数据:
ppp_month
: 审单月份。business_type
: 业务类型。task_def_id
: 单据类型。time_break
: 是否有时间中断。std_time
: 标椎工时。ttl_time
: 总工时。ttl_cnt
: 审单数量。ex_rate
: 折算率。time_from
和 time_till
: 时间范围的起始和结束日期。ppp20
的计算结果直接影响后续的效率评估。ppp20
存储过程的主要功能是计算审单的标椎工时和折算率,并将结果存储到目标表 t_dash_ppp_checker_std_v
中。它是审单效率计算流程中的重要步骤,为后续的效率评估提供了标准化的依据,同时确保了数据的完整性和一致性。
ppp30
的内容说明**ppp30
是一个存储过程,主要用于计算审单人员的效率。它是审单效率计算流程中的核心步骤之一,基于 t_dash_ppp_wl_v_s
表中的工时数据和 t_dash_ppp_checker_std_v
表中的标椎工时数据,计算每个人员在不同业务类型下的审单效率。
计算实际审单数量:
vol_o
)。time_break = ''
)的审单。计算审单工时:
time_used
)。计算折算后的审单数量:
t_dash_ppp_checker_std_v
)中的折算率(ex_rate
),将实际审单数量折算为标准审单数量(vol_c
)。time_break = 'Y'
),则单独统计中断的审单数量(vol_b
),并根据标椎工时进行折算。存储结果:
t_dash_ppp_productivity_v
中,供后续的效率评估和排名使用。v_start_date
(DATE): 时间范围的起始日期。d1
(DATE): 时间范围的结束日期。以下是存储过程的主要逻辑分解:
t_dash_ppp_productivity_v
中与当前时间范围相关的旧数据,确保计算结果的准确性。vol_o
):统计每个人员在每个业务类型下的实际审单数量。time_used
):统计每个人员在每个业务类型下的总审单工时。vol_b
)。ex_rate
),将实际审单数量和中断的审单数量折算为标准审单数量(vol_c
)。t_dash_ppp_productivity_v
中,字段包括:
ppp_type
: 审单类型(固定为 '初审'
)。ppp_date
: 审单日期。pernr
: 审单人员编号。business_type
: 业务类型。ppp_month
: 审单月份。vol_o
: 实际审单数量。time_used
: 审单工时。vol_b
: 中断的审单数量。vol_c
: 折算后的审单数量。以下是存储过程的关键代码段及其功能说明:
sql
CREATE DEFINER=`root`@`%` PROCEDURE `ofssc`.`ppp30`(IN `v_start_date` date, IN `d1` date)
BEGIN
-- 初始化目标表
DELETE FROM t_dash_ppp_productivity_v
WHERE ppp_date >= DATE_FORMAT(v_start_date, '%Y%m%d')
AND ppp_date <= DATE_FORMAT(d1, '%Y%m%d');
-- 定义游标,计算实际审单数量
DECLARE c_vol_o CURSOR FOR
SELECT
'ND1100' AS ppp_type,
DATE_FORMAT(w.time_end, '%Y%m%d') AS ppp_date,
w.emp,
w.business_type,
f_ppp_month(w.time_end) AS pppmonth,
COUNT(1) AS vol_o
FROM
t_dash_ppp_wl_v_s w
JOIN
t_dash_ppp_employee e ON e.pernr = LEFT(w.emp, 8)
WHERE
w.time_end >= v_start_date
AND w.time_end < d1
AND w.task_def_id = 'ND1100'
GROUP BY
DATE_FORMAT(w.time_end, '%Y%m%d'), w.emp, w.business_type, f_ppp_month(w.time_end), w.task_def_id;
-- 定义游标,计算审单工时
DECLARE c_time CURSOR FOR
SELECT
'ND1100' AS ppp_type,
DATE_FORMAT(w.time_end, '%Y%m%d') AS ppp_date,
w.emp,
w.business_type,
f_ppp_month(w.time_end) AS pppmonth,
SUM(w.time_used) AS time_used
FROM
t_dash_ppp_wl_v_s w
JOIN
t_dash_ppp_employee e ON e.pernr = LEFT(w.emp, 8)
WHERE
w.time_end >= v_start_date
AND w.time_end < d1
AND w.task_def_id = 'ND1100'
AND w.time_break <> 'Y'
GROUP BY
DATE_FORMAT(w.time_end, '%Y%m%d'), w.emp, w.business_type, f_ppp_month(w.time_end), w.task_def_id;
-- 定义游标,计算中断的审单数量
DECLARE c_b_time CURSOR FOR
SELECT
'ND1100' AS ppp_type,
DATE_FORMAT(w.time_end, '%Y%m%d') AS ppp_date,
w.emp,
w.business_type,
f_ppp_month(w.time_end) AS pppmonth,
COUNT(1) AS vol_b
FROM
t_dash_ppp_wl_v_s w
JOIN
t_dash_ppp_employee e ON e.pernr = LEFT(w.emp, 8)
WHERE
w.time_end >= v_start_date
AND w.time_end < d1
AND w.task_def_id = 'ND1100'
AND w.time_break = 'Y'
GROUP BY
DATE_FORMAT(w.time_end, '%Y%m%d'), w.emp, w.business_type, f_ppp_month(w.time_end), w.task_def_id;
-- 打开游标并循环处理数据
OPEN c_vol_o;
LOOPC1: LOOP
FETCH c_vol_o INTO v_ppp_type, v_ppp_date, v_pernr, v_business_type, v_ppp_month, v_vol_o;
IF done THEN
LEAVE loopc1;
END IF;
-- 插入或更新实际审单数量
IF EXISTS (SELECT * FROM t_dash_ppp_productivity_v WHERE ...) THEN
UPDATE t_dash_ppp_productivity_v SET vol_o = v_vol_o WHERE ...;
ELSE
INSERT INTO t_dash_ppp_productivity_v (...) VALUES (...);
END IF;
END LOOP;
-- 类似地处理审单工时和中断的审单数量
-- ...
-- 更新折算后的审单数量
UPDATE t_dash_ppp_productivity_v p
JOIN t_dash_ppp_checker_std_v s
ON s.ppp_month = p.ppp_month AND s.business_type = p.business_type AND s.task_def_id = p.ppp_type
SET p.vol_c = s.ex_rate * p.vol_o;
-- 删除无效数据
DELETE FROM t_dash_ppp_productivity_v WHERE time_used IS NULL OR time_used = 0;
END;
计算实际审单数量:
vol_o
)。计算审单工时:
time_used
)。计算折算后的审单数量:
ex_rate
),将实际审单数量折算为标准审单数量(vol_c
)。存储结果:
t_dash_ppp_productivity_v
中,供后续的效率评估和排名使用。执行 ppp30
后,目标表 t_dash_ppp_productivity_v
中会新增以下字段的数据:
ppp_type
: 审单类型(固定为 '初审'
)。ppp_date
: 审单日期。pernr
: 审单人员编号。business_type
: 业务类型。ppp_month
: 审单月份。vol_o
: 实际审单数量。time_used
: 审单工时。vol_b
: 中断的审单数量。vol_c
: 折算后的审单数量。ppp30
存储过程的主要功能是计算审单人员的效率,包括实际审单数量、审单工时和折算后的审单数量,并将结果存储到目标表 t_dash_ppp_productivity_v
中。它是审单效率计算流程中的核心步骤,为后续的效率评估和排名提供了关键数据支持。
ppp40
的内容说明**ppp40
是一个存储过程,主要用于计算审单人员的最终效率评分,并将结果存储到目标表 t_dash_ppp_score_final
中。它是审单效率计算流程的最后一个步骤,基于前序步骤(如 ppp20
和 ppp30
)计算的标椎工时、折算率、实际审单数量和折算后审单数量,结合外部提供的用时比例和评分规则,生成最终的效率评分和排名。
计算最终效率:
vol_c
)和实际工时,计算每个人员的最终效率。vol_c_per_day
),用于评分。计算评分和排名:
t_dash_ppp_rank_score
表中的评分标准),计算每个人员的评分。存储结果:
t_dash_ppp_score_final
中。处理特殊情况:
v_ppp_month
(VARCHAR): 审单月份,用于标识数据的时间范围。以下是存储过程的主要逻辑分解:
t_dash_ppp_score_t
中的字段,例如:
ttl_t_weight
(总权重)与外部表 v_dash_ppp_nt_weight_ttl
的数据进行关联更新。ttl_a_days
(总分配天数)、days_weigh
(天数权重)等字段。t_dash_ppp_wl_v_s
和 t_dash_ppp_checker_std_v
表中的数据,计算每个人员的审单数量(vol_c_per_day
)和工时。vol_c_per_day
)和评分规则表(t_dash_ppp_rank_score
),计算每个人员的评分。ex_rate
)的影响。t_dash_ppp_score_final
中。ttl_hc_ck1
),并根据总分生成最终排名。以下是存储过程的关键代码段及其功能说明:
sql
CREATE DEFINER=`root`@`%` PROCEDURE `ofssc`.`ppp40`(IN `v_ppp_month` varchar(6))
BEGIN
-- 初始化目标表
UPDATE t_dash_ppp_score_t a
JOIN v_dash_ppp_nt_weight_ttl s
ON a.ppp_month = s.ppp_month AND a.pernr = s.pernr
SET a.ttl_t_weight = s.ttl_t_weight;
-- 更新审单人员的工作天数和权重
UPDATE t_dash_ppp_score_t a
JOIN v_dash_ppp_total_asign_days s
ON a.ppp_month = s.ppp_month AND a.pernr = s.pernr
SET
a.ttl_a_days = s.ttl_a_days,
a.days_weigh = IFNULL(a.asign_days, 0) / s.ttl_a_days,
a.ppp_weight = IFNULL(a.ttl_t_weight, 0) * IFNULL(a.asign_days, 0) / s.ttl_a_days,
a.weight_score = (IFNULL(a.score, 0) * (IFNULL(a.ttl_t_weight, 0) * IFNULL(a.asign_days, 0) / s.ttl_a_days)) / 100
WHERE s.ttl_a_days > 0 AND s.ppp_month = v_ppp_month;
-- 使用游标计算审单数量
DECLARE c CURSOR FOR
SELECT
pernr,
vol_c_per_day
FROM
t_dash_ppp_score_t
WHERE
ppp_month = v_ppp_month AND ppp_type = '初审' AND vol_c_per_day > 0
ORDER BY
vol_c_per_day;
-- 初始化变量
DECLARE v_ttl_hc_ck1 INT;
DECLARE v_ppp_type VARCHAR(100) DEFAULT '初审';
DECLARE v_delta_rank DECIMAL(18,5);
DECLARE v_pernr VARCHAR(20);
DECLARE v_rank_i INT;
DECLARE v_rank DECIMAL(18,5);
DECLARE v_score DECIMAL(18,5);
DECLARE done INT;
-- 获取总审单数量
SELECT COUNT(1) INTO v_ttl_hc_ck1
FROM t_dash_ppp_score_t
WHERE ppp_month = v_ppp_month AND ppp_type = v_ppp_type AND vol_c_per_day > 0;
-- 设置排名间隔
SET v_delta_rank = (10000000 / v_ttl_hc_ck1) / 100000;
SET v_rank_i = 0;
-- 打开游标并循环处理数据
OPEN c;
LOOPC1: LOOP
FETCH c INTO v_pernr, v_vol_c_per_day;
IF done THEN
LEAVE loopc1;
END IF;
-- 更新排名和评分
SET v_rank_i = v_rank_i + 1;
SET v_rank = v_rank_i * v_delta_rank;
SELECT score INTO v_score
FROM t_dash_ppp_rank_score
WHERE ppp_type = v_ppp_type AND v_vol_c_per_day >= rank_from_ex AND v_vol_c_per_day < rank_to_in;
UPDATE t_dash_ppp_score_t
SET score = v_score, rank = v_rank
WHERE ppp_month = v_ppp_month AND ppp_type = v_ppp_type AND pernr = v_pernr;
END LOOP;
CLOSE c;
-- 更新总分和排名
-- ...
END;
计算最终效率:
vol_c
)和实际工时,计算每个人员的最终效率。计算评分和排名:
存储结果:
t_dash_ppp_score_final
中。处理特殊情况:
执行 ppp40
后,目标表 t_dash_ppp_score_final
中会新增以下字段的数据:
ppp_type
: 审单类型(如 '初审'
)。ppp_month
: 审单月份。pernr
: 审单人员编号。score
: 评分。ppp_weight
: 权重。weight_score
: 权重评分。rank
: 排名。ppp40
存储过程的主要功能是计算审单人员的最终效率评分,并将结果存储到目标表 t_dash_ppp_score_final
中。它是审单效率计算流程的最后一个步骤,基于前序步骤的标椎工时、折算率和实际审单数量,结合评分规则,生成最终的评分和排名,为绩效评估和激励机制提供数据支持。