跳转到主要内容

泛微流程效率相关报表与操作统计

为什么要统计操作次数?
操作次数是衡量流程顺畅度更敏感的指标。

当统计【产生过特定操作的流程数量】

是为了衡量问题的影响广度。这个维度可以反映 “有多少流程出现了异常?” ,识别出流程体系中共性问题。 例如,如果发现超过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