泛微流程效率相关报表与操作统计
为什么要统计操作次数?
操作次数是衡量流程顺畅度更敏感的指标。当统计【产生过特定操作的流程数量】
是为了衡量问题的影响广度。这个维度可以反映 “有多少流程出现了异常?” ,识别出流程体系中共性问题。 例如,如果发现超过30%的流程都存在“退回”操作,说明流程填写规范或制度培训可能存在问题。
当统计【特定操作行为的发生总次数】
是为了衡量问题的严重深度与发生频率。这个维度可以反映 “流程异常发生的频率有多高?问题的复杂程度如何?” 例如:同一流程多次退回,可能是不同环节或不同性质的问题,如第一次退回是“信息填写不全”,第二次是“附件缺失”。
表结构解析
- 操作记录是记录在workflow_requestoperatelog【流程操作记录日志主表】。
- 流程删除后,会同时在实例表workflow_requestbase【工作流请求基本信息表】和workflow_requestlog【工作流请求签字日志表】删除对应requestid的记录。而workflow_requestoperatelog【流程操作记录日志主表】里的不会被删除。因此统计次数时使用workflow_requestoperatelog会更加精准。
- 因此针对先对审批流产生操作(退回、干预等)再删除的场景,导出流程退回/转发等操作清单时,行数量是可能少于报表统计的操作记录数的。
一、流程操作统计
从宏观层面了解各类流程的操作情况。以下SQL统计了按流程分类和流程类型分组的所有关键操作次数,包括提交、退回、干预等,提供整体视角。
此查询展示各类操作的发生频次,可以协助分析人员快速识别操作密集的流程类型。
--统计OA流程在固定日期内的操作记录次数(近一年)
WITH
active_workflow AS (
SELECT
id AS workflowid,
COALESCE(activeVersionID, id) AS activeVersionID
FROM workflow_base
),
operation_stats AS (
SELECT
COALESCE(NULLIF(d.typename, ''), '已删除的流程') as typename,
COALESCE(NULLIF(c.workflowname, ''), '已删除的流程') as workflowname,
COUNT(DISTINCT a.requestid) as '涉及流程数',
SUM(CASE WHEN a.operatetype = 'submit' THEN 1 ELSE 0 END) as '提交次数',
SUM(CASE WHEN a.operatetype = 'reject' THEN 1 ELSE 0 END) as '退回次数',
SUM(CASE WHEN a.operatetype = 'intervenor' THEN 1 ELSE 0 END) as '干预次数',
SUM(CASE WHEN a.operatetype = 'forceover' THEN 1 ELSE 0 END) as '强制归档次数',
SUM(CASE WHEN a.operatetype = 'forward' THEN 1 ELSE 0 END) as '转发次数',
SUM(CASE WHEN a.operatetype = 'trans' THEN 1 ELSE 0 END) as '转办次数',
SUM(CASE WHEN a.operatetype = 'take' THEN 1 ELSE 0 END) as '意见征询次数'
FROM workflow_requestoperatelog a
LEFT JOIN workflow_requestbase b ON a.requestid = b.requestid
LEFT JOIN active_workflow aw ON b.workflowid = aw.workflowid
LEFT JOIN workflow_base c ON aw.activeVersionID = c.id
LEFT JOIN workflow_type d ON c.workflowtype = d.id
WHERE a.operatedate >= DATEADD(YEAR, -1, GETDATE())
GROUP BY
COALESCE(NULLIF(d.typename, ''), '已删除的流程'),
COALESCE(NULLIF(c.workflowname, ''), '已删除的流程')
)SELECT
CAST(YEAR(DATEADD(YEAR, -1, GETDATE())) AS VARCHAR) + '-' + CAST(YEAR(GETDATE()) AS VARCHAR) AS 年份,
CASE
WHEN os.typename = '已删除的流程' THEN '已删除的流程'
ELSE COALESCE(NULLIF(dbo.convToCN(os.typename), ''), os.typename) END as '流程分类',
CASE
WHEN os.workflowname = '已删除的流程' THEN '已删除的流程'
ELSE COALESCE(NULLIF(dbo.convToCN(os.workflowname), ''), os.workflowname)
END as '流程类型名称',
os.涉及流程数,
os.提交次数,
os.退回次数,
os.干预次数,
os.强制归档次数,
os.转发次数,
os.转办次数,
os.意见征询次数
FROM operation_stats os
ORDER BY typename asc, workflowname asc
二、操作明细分析
--查询产生过退回操作的流程清单及次数
SELECT
COALESCE(NULLIF(b.requestname,''),'已删除的流程') as '审批流名称',
b.requestid '流程id',
COUNT(a.requestid) as '退回次数',
COALESCE(NULLIF(d.typename, ''), '已删除的流程') as '所属流程分类',
COALESCE(NULLIF(c.workflowname, ''), '已删除的流程') as '所属流程类型名称'
FROM workflow_requestoperatelog a
LEFT JOIN workflow_requestbase b ON a.requestid = b.requestid
LEFT JOIN workflow_base c ON b.workflowid = c.id
LEFT JOIN workflow_type d ON c.workflowtype = d.id
WHERE a.operatetype = 'reject'
AND a.operatedate >= DATEADD(YEAR, -1, GETDATE())
GROUP BY d.typename, c.workflowname, b.requestname, b.requestid,c.workflowtype,c.id
ORDER BY c.workflowtype ASC,c.id ASC,b.requestid ASC
其中,您可以替换【WHERE a.operatetype = 'reject'】中的reject来查询其它操作的清单。
提交 submit
退回 reject
干预 intervenor
转办 trans
意见征询 tak
转发 forward
强制归档 forceover
三、节点级退回分析
识别出高频退回的流程后,我们需要进一步定位具体在哪个环节容易出现问题。以下查询展示每条流程的退回操作发生在哪些审批节点,协助精准定位流程瓶颈:
SELECT
c.typename, a.workflowid, b.workflowname, d.requestid, d.requestname,
d.createdate, e.nodename, h.lastname, a.remark
FROM
workflow_requestlog a, workflow_base b, workflow_type c,
workflow_requestbase d, workflow_nodebase e, hrmresource h
WHERE
a.logtype = '3'
AND a.workflowid = b.id
AND a.requestid = d.requestid
AND a.nodeid = e.id
AND a.operator = h.id
AND b.workflowtype = c.id
AND d.createdate >= DATEADD(YEAR, -1, GETDATE())
其中,您可以替换【WHERE a.logtype = '3' 】中的reject来查询其它操作的清单。
0:批准
1:保存
2:提交
3:退回
7:转发
9:批注
a:意见征询
e:强制归档
h:转办
i:干预
t:抄送