流程瓶颈分析:实用指南
了解流程瓶颈分析如何将流程挖掘数据转化为业务改进机会。探索模式、识别瓶颈并提升绩效。
您将学到什么
本指南将介绍如何从零开始创建流程挖掘事件日志。我们将介绍每个事件日志都需要的三个必需列,讲解一个真实场景示例,并展示如何使用Excel和SQL创建您的第一个事件日志。
**相关内容:**进一步了解流程改进,并查找适用于您系统的数据模板。另请阅读我们为何不使用开箱即用的连接器,而选择简单的数据模板。
流程挖掘事件日志是一张记录业务流程中发生情况的表。它跟踪每个案例在系统中流转时经历的每个步骤。流程挖掘软件利用这些数据展示流程实际如何运行。
每个事件日志都需要三个必需列:
| 列 | 含义 | 示例 |
|---|---|---|
| 案例ID | 将相关事件归为一组的唯一标识符 | 订单 #12345 |
| 时间戳 | 事件发生的时间 | 2025-01-15 09:30:00 |
| 活动 | 发生了什么 | “已下单” |
就是这些。只要有这三列,您就可以开始进行流程挖掘。其他信息,例如客户姓名、订单金额或员工ID,都是可选的。这些额外字段称为“属性”,可以为分析提供更多背景。
继续之前,我们先澄清一个常见的疑问。
活动是一类操作,例如“已发货”或“已收到付款”。您可以将其理解为类别或标签。
事件是该活动的一次具体发生。例如,订单#12345在1月15日14:30发货,这就是一个事件。
您的事件日志包含事件,每个事件都有一个活动名称。在实际使用中,人们经常交替使用这两个术语,这没有问题。请记住:活动描述“做了什么”,事件描述“何时为谁发生”。
为了让本指南更实用,我们使用一个虚构系统作为示例。假设您管理Pizza Palace,这是一家拥有在线订餐系统的本地披萨店。客户通过网站下单,员工制作披萨,配送员负责送餐。
Pizza Palace系统包含多个数据库表,用于跟踪订单流程的不同部分:
您的目标是创建一份事件日志,展示每个订单从下单到配送完成的完整旅程。
创建事件日志时,您会遇到两类事件:
直接事件会明确记录在系统中。用户点击了按钮,或系统记录了一项操作,数据库中也会保存对应的时间戳。
Pizza Palace示例:
orders表)payments表)delivery_assignments表)推断事件没有自己的时间戳,但您可以根据其他数据确定其发生时间。
Pizza Palace示例:
delivery_assignments表中的created_at字段会显示分配时间两者的关键区别在于:直接事件会被明确记录,推断事件则需要您解读其他数据字段。两者都适用于流程挖掘,也都很有价值。
提取数据前,先确定要记录哪些事件。以Pizza Palace为例,我们跟踪以下活动:
对于每个事件,请确定:
以下是我们的映射:
| 活动 | 来源表 | 时间戳字段 | Case ID字段 |
|---|---|---|---|
| 已下单 | orders | created_at | id |
| 已收到付款 | payments | payment_time | order_id |
| 订单已发送至厨房 | kitchen_queue | queue_entry_time | order_id |
| 订单已备好 | kitchen_queue | completed_time | order_id |
| 已分配配送员 | delivery_assignments | assigned_at | order_id |
| 已完成配送 | delivery_assignments | delivered_at | order_id |
Case ID、Timestamp和Activity是必需字段。属性通过增加额外列提供上下文,让分析更有价值。
Case属性描述整个Case,即订单,并且在该Case的每个事件中保持不变:
事件属性适用于单个事件:
**实用提示:**即使某项属性不适用于特定事件,也可以在每一行中保留所有属性。例如,“已下单”这一行可以保留空白的“配送员姓名”列。这样可以让事件日志保持简单的扁平表格格式,便于流程挖掘工具处理。
最终的事件日志应为一张单表,每行对应一个事件。以下是Pizza Palace事件日志的示例:
| Case ID | 时间戳 | 活动 | 客户 | 订单金额 | 配送员 | 付款方式 |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 已下单 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:30:15 | 已收到付款 | John Smith | 45.99 | 信用卡 | |
| 1001 | 2025-01-15 18:31:00 | 订单已发送至厨房 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:45:00 | 订单已备好 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:46:00 | 已分配配送员 | John Smith | 45.99 | Maria Garcia | |
| 1001 | 2025-01-15 19:05:00 | 已完成配送 | John Smith | 45.99 | Maria Garcia | |
| 1002 | 2025-01-15 18:35:00 | 已下单 | Jane Doe | 28.50 | ||
| 1002 | 2025-01-15 18:35:20 | 已收到付款 | Jane Doe | 28.50 | PayPal | |
| … | … | … | … | … | … | … |
请注意,客户和订单金额等Case属性会在同一Case的每个事件中重复出现。这种重复是有意为之,可以让数据更易于处理。
如果您可以将数据导出到电子表格,就能手动创建事件日志。这种方法适合小型数据集,也有助于您掌握基础知识。
为每种活动类型创建一个工作表:
工作表1:已下单
| Case ID | 时间戳 | 活动 | 客户 | 订单金额 |
|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 已下单 | John Smith | 45.99 |
| 1002 | 2025-01-15 18:35:00 | 已下单 | Jane Doe | 28.50 |
工作表2:已收到付款
| Case ID | 时间戳 | 活动 | 客户 | 订单金额 | 付款方式 |
|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:15 | 已收到付款 | John Smith | 45.99 | 信用卡 |
| 1002 | 2025-01-15 18:35:20 | 已收到付款 | Jane Doe | 28.50 | PayPal |
确保每个工作表包含相同的列,且顺序一致。必要时添加空列:
工作表1:已下单(更新后)
| Case ID | 时间戳 | 活动 | 客户 | 订单金额 | 配送员 | 付款方式 |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 已下单 | John Smith | 45.99 |
创建一个新的“事件日志”工作表。将每个活动工作表中的所有行依次复制并粘贴到这个合并后的工作表中。
选中所有数据,然后按以下字段排序:
这样可以让每个Case中的事件按时间顺序排列,便于您跟踪每个订单的完整过程。
将合并后的工作表保存为CSV文件。这种格式几乎适用于所有流程挖掘工具。
Excel提示:
对于大型数据集或需要定期执行的提取任务,SQL更高效,也更易于重复执行。关键技术是使用UNION ALL,将多个查询合并为一个结果集。
UNION ALL会将多个SELECT语句的结果依次合并。每个SELECT都会向最终结果中添加行。所有SELECT语句必须包含相同数量的列,且数据类型兼容。
以下SQL查询会创建Pizza Palace事件日志:
-- Event Log Extraction for Pizza Palace
-- This query combines multiple event types into a single event log
-- Each SELECT block represents one activity type
-- Event 1: Order Placed
-- Source: orders table
-- This captures when customers submit their orders
SELECT
o.id AS case_id, -- The order ID is our case identifier
o.created_at AS timestamp, -- When the order was placed
'Order Placed' AS activity, -- The activity name (hardcoded)
o.customer_name AS customer, -- Case attribute: who ordered
o.total_amount AS order_value, -- Case attribute: order value
NULL AS driver, -- Not applicable for this event
NULL AS payment_method -- Not applicable for this event
FROM orders o
WHERE o.created_at >= '2025-01-01' -- Filter to your desired date range
UNION ALL
-- Event 2: Payment Received
-- Source: payments table
-- This captures successful payment processing
SELECT
p.order_id AS case_id,
p.payment_time AS timestamp,
'Payment Received' AS activity,
o.customer_name AS customer, -- Join to get case attributes
o.total_amount AS order_value,
NULL AS driver,
p.payment_method AS payment_method -- Event-specific attribute
FROM payments p
JOIN orders o ON p.order_id = o.id -- Join to get order details
WHERE p.payment_time >= '2025-01-01'
AND p.status = 'successful' -- Only include successful payments
UNION ALL
-- Event 3: Order Sent to Kitchen
-- Source: kitchen_queue table
-- This captures when the kitchen starts working on the order
SELECT
k.order_id AS case_id,
k.queue_entry_time AS timestamp,
'Order Sent to Kitchen' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
NULL AS driver,
NULL AS payment_method
FROM kitchen_queue k
JOIN orders o ON k.order_id = o.id
WHERE k.queue_entry_time >= '2025-01-01'
UNION ALL
-- Event 4: Order Ready
-- Source: kitchen_queue table (different timestamp field)
-- This is an inferred event based on when the kitchen marked it complete
SELECT
k.order_id AS case_id,
k.completed_time AS timestamp, -- Different timestamp than entry
'Order Ready' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
NULL AS driver,
NULL AS payment_method
FROM kitchen_queue k
JOIN orders o ON k.order_id = o.id
WHERE k.completed_time >= '2025-01-01'
AND k.completed_time IS NOT NULL -- Only include completed orders
UNION ALL
-- Event 5: Assigned to Driver
-- Source: delivery_assignments table
-- This captures when a driver is assigned to deliver the order
SELECT
d.order_id AS case_id,
d.assigned_at AS timestamp,
'Assigned to Driver' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver, -- Event-specific attribute
NULL AS payment_method
FROM delivery_assignments d
JOIN orders o ON d.order_id = o.id
WHERE d.assigned_at >= '2025-01-01'
UNION ALL
-- Event 6: Delivery Completed
-- Source: delivery_assignments table (different timestamp field)
-- This captures when the order was delivered to the customer
SELECT
d.order_id AS case_id,
d.delivered_at AS timestamp,
'Delivery Completed' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver,
NULL AS payment_method
FROM delivery_assignments d
JOIN orders o ON d.order_id = o.id
WHERE d.delivered_at >= '2025-01-01'
AND d.delivered_at IS NOT NULL -- Only include completed deliveries
-- Final ordering: by case, then by time
-- This makes the event log easy to read and follow
ORDER BY case_id, timestamp;如需向日志中添加更多事件:
例如,如需添加“尝试配送”事件:
UNION ALL
-- Event 7: Delivery Attempted
-- Add this to track failed delivery attempts
SELECT
d.order_id AS case_id,
d.attempt_time AS timestamp,
'Delivery Attempted' AS activity,
o.customer_name AS customer,
o.total_amount AS order_value,
d.driver_name AS driver,
NULL AS payment_method
FROM delivery_attempts d
JOIN orders o ON d.order_id = o.id
WHERE d.attempt_time >= '2025-01-01' 先从三个必需列和几个关键活动开始。创建基础事件日志并将其加载到流程挖掘工具后,您可以继续添加更多事件和属性。
开始分析前,请检查事件日志中是否存在以下常见问题:
请记录以下内容:
日后更新或排查事件日志时,这些记录会很有帮助。
确保不同提取任务中的活动名称保持一致:
如果数据来自多个系统或地区,请确保所有时间戳使用同一时区。为保持一致性,通常建议使用UTC。
有些事件可能没有自己的时间戳。例如,“订单已批准”事件可能只通过布尔标记表示。
**解决方案:**查找相关时间戳。您可能会找到“approved_at”字段,也可以使用批准标记发生变化时的“modified_at”时间戳。
如果事件数量达到数百万,提取查询可能运行缓慢,甚至失败。
解决方案:
将事件日志创建为CSV文件或数据库导出文件后,您就可以将其加载到流程挖掘工具中。大多数工具的操作流程类似:
像ProcessMind这样的现代流程挖掘工具可以简化这一过程。上传事件日志数据后,工具会自动将流程可视化,揭示瓶颈、变体和改进机会,帮助您降低成本、优化运营流程。
创建流程挖掘事件日志不需要专用工具或深厚的技术知识。其核心是将流程挖掘数据整理成一张包含三个必需列的表:Case ID、Timestamp和Activity。
无论是使用Excel处理较小的数据集,还是使用SQL处理更大、更复杂的提取任务,基本原则都相同:
最难的部分不是技术提取,而是充分了解业务运营,从而判断哪些事件真正重要。先从下单、订单完成等明显事件开始,再根据流程挖掘工具揭示的洞察逐步补充细节。
想进一步深入?请查看我们的持续流程改进页面,详细了解Purchase to Pay、Purchase to Pay、Order to Cash和Accounts Payable等常见流程的活动和数据要求。这些资源还提供SAP、Oracle和Microsoft Dynamics等知名系统的数据模板,帮助您更快创建事件日志。
立即开始
不要等待完美的事件日志。从现有数据开始,利用创建的流程图获取经验,并持续迭代。即使只有包含基础活动的简单事件日志,也能揭示流程的真实运行方式。
了解流程瓶颈分析如何将流程挖掘数据转化为业务改进机会。探索模式、识别瓶颈并提升绩效。
流程挖掘连接器可能带来复杂性、延迟和供应商锁定。了解数据模板如何简化流程挖掘的数据准备。
了解DMAIC流程、六西格玛流程和精益流程改进工具,推动业务取得可衡量的成果。
比较Celonis流程挖掘与ProcessMind,找到适合您流程、预算和目标的软件。
无需信用卡,无需等待,即可立即访问。将您组织的工作方式转化为清晰、互联的流程设计。
构建流程架构,定义所有权和控制措施,并在各个层级统一角色与职责。
开始免费试用,为流程治理、管理和持续改进建立可靠的统一基础。