プロセスのボトルネック分析:実践ガイド
プロセスのボトルネック分析によって、プロセスマイニングのデータを業務改善の機会につなげる方法を学べます。パターンを調べ、ボトルネックを特定し、パフォーマンスを改善する方法をご紹介します。
学べること
このガイドでは、プロセスマイニングのイベントログをゼロから作成する方法を説明します。すべてのイベントログに必要な3つの必須列を確認し、実際の業務を想定した例を見ながら、ExcelとSQLの両方で最初のイベントログを作成する方法を紹介します。
関連情報:プロセス改善について詳しく知り、システム用のデータテンプレートを確認してください。また、シンプルなデータテンプレートを優先し、標準コネクターを使わない理由については、標準コネクターを使わない理由をご覧ください。
プロセスマイニングのイベントログは、業務プロセスで起きたことを記録する表です。ケースがシステム内を進む際の各ステップを追跡します。プロセスマイニングソフトウェアは、このデータを使って、プロセスが実際にどのように動いているかを示します。
すべてのイベントログには、次の3つの必須列が必要です。
| 列 | 意味 | 例 |
|---|---|---|
| ケースID | 関連するイベントをまとめる一意の識別子 | 注文 #12345 |
| タイムスタンプ | イベントが発生した日時 | 2025-01-15 09:30:00 |
| アクティビティ | 発生した内容 | “注文を登録” |
これだけです。この3列があれば、プロセスマイニングを始められます。顧客名、注文金額、従業員IDなど、それ以外の項目は任意です。こうした追加項目を「属性」と呼び、分析に背景情報を加えます。
先に進む前に、よくある混同を整理しておきます。
アクティビティは、「注文発送」や「支払い受領」のような行動の種類です。分類やラベルと考えると分かりやすいでしょう。
イベントは、そのアクティビティが具体的に発生したことを指します。注文#12345が1月15日午後2時30分に発送された場合、それがイベントです。
イベントログにはイベントが含まれ、各イベントにはアクティビティ名があります。実際には、これらの用語を同じ意味で使うことも多く、それ自体は問題ありません。アクティビティは「何を」を表し、イベントは「いつ、誰に起きたか」を表すと覚えておきます。
このガイドを実践的な内容にするため、架空のシステムを使います。オンライン注文システムを運営する地域のピザ店、Pizza Palaceを想像してください。顧客はウェブサイトから注文し、スタッフがピザを調理し、配達員が届けます。
Pizza Palaceのシステムには、注文プロセスのさまざまな部分を追跡するデータベーステーブルがあります。
目的は、注文受付から配達まで、各注文の一連の流れを示すイベントログを作成することです。
イベントログを作成すると、次の2種類のイベントを扱うことになります:
直接イベントは、システムに明示的に記録されます。誰かがボタンをクリックした、またはシステムが操作を記録した場合、データベースにはその時刻のタイムスタンプが保存されています。
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属性はケース全体、つまり注文について説明する項目です。同じケースに含まれるすべてのイベントで値が変わりません:
イベント属性は個々のイベントに適用されます:
**ポイント:**特定のイベントに該当しない属性であっても、すべての行に含めて問題ありません。たとえば、「注文受付」の行に空の「ドライバー名」列を含める方法です。こうすると、イベントログをシンプルなフラットテーブル形式で保てるため、プロセスマイニングツールで扱いやすくなります。
完成したイベントログは、1行につき1イベントを記録した単一のテーブルにします。Pizza Palaceのイベントログは次のようになります:
| Case ID | Timestamp | Activity | Customer | Order Value | Driver | Payment Method |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 注文受付 | John Smith | 45.99 | ||
| 1001 | 2025-01-15 18:30:15 | 支払い受領 | John Smith | 45.99 | Credit Card | |
| 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 | |
| … | … | … | … | … | … | … |
CustomerやOrder ValueなどのCase属性は、同じケースのすべてのイベントで繰り返されます。この重複は意図的なもので、データを扱いやすくするためのものです。
データをスプレッドシートにエクスポートできる場合は、イベントログを手作業で作成できます。小規模なデータセットに適しており、基本を学ぶのにも役立ちます。
アクティビティの種類ごとにワークシートを1つ作成します:
シート1:注文受付
| Case ID | Timestamp | Activity | Customer | Order Value |
|---|---|---|---|---|
| 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 | Timestamp | Activity | Customer | Order Value | Payment Method |
|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:15 | 支払い受領 | John Smith | 45.99 | Credit Card |
| 1002 | 2025-01-15 18:35:20 | 支払い受領 | Jane Doe | 28.50 | PayPal |
すべてのシートで、列の構成と順序を揃えます。必要に応じて空の列を追加します:
シート1:注文受付(更新後)
| Case ID | Timestamp | Activity | Customer | Order Value | Driver | Payment Method |
|---|---|---|---|---|---|---|
| 1001 | 2025-01-15 18:30:00 | 注文受付 | John Smith | 45.99 |
新しい「イベントログ」シートを作成します。各アクティビティシートのすべての行をコピーし、結合後のシートに順番に貼り付けます。
すべてのデータを選択し、次の順序で並べ替えます:
これにより、各ケース内のイベントが時系列に並び、注文ごとの進行を追跡できます。
結合したシートをCSVファイルとして保存します。この形式は、ほぼすべてのプロセスマイニングツールで利用できます。
Excelのヒント:
大規模なデータセットや定期的な抽出では、SQLのほうが効率的で再現性にも優れています。重要なテクニックは、UNION ALLを使って複数のクエリを1つの結果セットに結合することです。
UNION ALLは、複数のSELECT文の結果を積み重ねます。各SELECTが最終結果に行を追加します。すべてのSELECT文で、互換性のあるデータ型の列を同じ数だけ指定する必要があります。
Pizza Palaceのイベントログを作成するSQLクエリは次のとおりです:
-- 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' 必須の3列と、いくつかの主要なアクティビティから始めます。基本的なイベントログを作成してプロセスマイニングツールに読み込んだ後で、イベントや属性を追加できます。
分析を始める前に、イベントログに次のような一般的な問題がないか確認します:
次の項目を記録します:
この文書は、後からイベントログを更新したり、問題を調査したりする際に役立ちます。
抽出ごとにアクティビティ名を統一します:
複数のシステムや地域のデータを扱う場合は、すべてのタイムスタンプで同じタイムゾーンを使うようにします。一貫性を保つには、UTCが安全な選択肢になることが多いです。
イベントによっては、固有のタイムスタンプがない場合があります。たとえば、「注文承認」イベントがBooleanフラグだけで表されているケースです。
**解決策:**関連するタイムスタンプを探します。「approved_at」フィールドが見つかる場合もあれば、承認フラグが変更された時点の「modified_at」タイムスタンプを使える場合もあります。
数百万件のイベントがある場合、抽出クエリの実行に時間がかかったり、失敗したりすることがあります。
解決策:
イベントログをCSVファイルまたはデータベースのエクスポートとして作成したら、プロセスマイニングツールに読み込む準備は完了です。多くのツールでは、次のような手順で進めます:
プロセスマイニングのイベントログを作成するために、専門ツールや高度な技術知識は必ずしも必要ありません。基本的には、プロセスマイニングのデータを、3つの必須列であるCase ID、Timestamp、Activityを持つテーブルに整理します。
小規模なデータセットにはExcelを、大規模で複雑な抽出にはSQLを使う場合でも、基本的な考え方は同じです:
最も難しいのは、技術的な抽出作業ではありません。どのイベントが重要かを判断できるほど、自社の業務を理解することです。まずは注文受付や注文完了など、明確なイベントから始め、プロセスマイニングツールで得られる結果を見ながら詳細を追加します。
さらに詳しく知りたい場合は、継続的なプロセス改善のページをご覧ください。調達から支払いまで、受注から入金まで、買掛金管理など、主要なプロセスにおけるアクティビティとデータ要件を詳しく説明しています。SAP、Oracle、Microsoft Dynamicsなどの主要システム向けのデータテンプレートも掲載しているため、イベントログの作成を始めやすくなります。
今日から始める
完璧なイベントログを待つ必要はありません。手元にあるデータから始め、作成したプロセスマップから学び、改善を重ねます。基本的なアクティビティだけのシンプルなイベントログでも、実際のプロセスがどのように動いているかを示す有用な情報を得られます。
プロセスのボトルネック分析によって、プロセスマイニングのデータを業務改善の機会につなげる方法を学べます。パターンを調べ、ボトルネックを特定し、パフォーマンスを改善する方法をご紹介します。
プロセスマイニングのコネクタは、複雑さや遅延、ベンダーロックインを招くことがあります。データテンプレートによって、プロセスマイニングのデータ準備をシンプルにする方法をご紹介します。
DMAICプロセス、シックスシグマプロセス、リーンプロセス改善の手法を学び、測定可能な業務成果につなげます。
CelonisのプロセスマイニングとProcessMindを比較し、プロセス、予算、目的に合うソフトウェアを見つけます。
クレジットカード不要、待ち時間なしですぐに利用を開始できます。組織の業務の進め方を、明確でつながりのあるプロセス設計に変えます。
プロセスアーキテクチャを構築し、所有者と管理項目を定義して、あらゆる階層で役割と責任をそろえます。
無料トライアルを開始し、プロセスのガバナンス、管理、継続的改善を支える信頼できる基盤を1つ構築します。
Cookieを使用して、利用体験の改善、コンテンツのパーソナライズ、トラフィックの分析を行っています。「すべて受け入れる」をクリックすると、Cookieの使用に同意したものとみなされます。