Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Creating an object‑centric event log (OCEL) involves translating a real‑world process into a structured dataset that accurately reflects the relationships between events and business objects. Unlike traditional case‑centric logs, this approach captures the complexity of scenarios where multiple objects interact within the same event. The goal is to produce a clean, consistent, and analysis‑ready log that supports object‑centric process mining without unnecessary complexity.
The following sections outline best practices and a practical workflow to help you build such a log efficiently.
Object‑centric process mining (OCPM) uses some general terms. If you're unfamiliar with a term, check out the Glossary section in this article.
Note
The current version supports data ingestion from a CSV file stored in Azure Data Lake or OneLake or delta table stored in the Fabric Lakehouse. Ensure your final log is exported to one of these locations before proceeding with ingestion.
Target schema
The following columns are required:
Activity: Human‑readable event name (for example, Create Order, Pay Invoice).Timestamp: Event time inyyyy-MM-dd HH:mm:ss(24h) or ISO‑8601.Actor: Person or system executing the event.- One column per object type used in your process (for example,
Order,Invoice,Payment, …).- If an event touches multiple objects of the same type, separate them with
|(for example,O1|O2).
- If an event touches multiple objects of the same type, separate them with
- Object‑type attributes (optional but recommended): Columns that hold attributes of an object referenced by the event (for example,
PaymentAmountfor aPaymentpresent in the row).
Modeling rules and naming conventions
The OECL uses the following modeling rules and naming conventions:
- One row = one event, even if it relates to multiple objects.
- Stable, opaque object IDs across the log (for example,
O1,I1,P1); don't reuse IDs. - Multi‑object delimiter: Use
|inside object columns (for example,O1|O2). - Avoid attribute duplication: Keep object attributes (for example,
PaymentAmount) once per event row if that object is present. If multiple same‑type objects must carry different attribute values, split them into separate events. - Activity labels: Concise, consistent, and controlled. Avoid embedding high‑cardinality details directly in
Activity; keep them as attributes. - Timestamps: Single time zone or UTC; ensure logical ordering across lifecycle events.
- Sparsity is fine: Leave object columns blank when not relevant to the event.
General step‑by‑step construction workflow
Use the following steps to create your OECL:
- Define scope and object types
Choose the minimal set of object types (for example,Order,Invoice,Payment; optionallySupplierOrder). - Inventory source events
Identify upstream event sources (tables, logs, or status changes) and map each source record toActivity,Timestamp,Actor, target object columns, and any needed attributes. - Map objects to events
Populate object IDs for each event; use|when an event touches multiple same‑type objects. - Normalize attributes
Standardize timestamps, user IDs, currencies, and units; keep attributes only if they’re analytically useful. - Emit CSV
Use a stable column order (see header template), UTF‑8 encoding, and quote fields containing commas.
Example of event log construction
The following steps outline the process narrative:
- A customer places two orders (
O1,O2). - The store raises two supplier orders (
SO1,SO2) to restock items. - One supplier order arrives and is unpacked; the other requires an update.
- The store issues two invoices (
I1,I2). One invoice is updated. - Policy says, "ship the second customer order only after invoices are paid."
- After payment (
P1) is received, the second order is shipped.
Steps in the process
The following steps 1 through 4 describe the process.
1. Identify object types
- Order (customer orders):
O1,O2 - SupplierOrder (stock replenishment):
SO1,SO2 - Invoice (billing):
I1,I2 - Payment:
P1
Keep this list minimal. Extend it only if more objects materially change your analysis.
2. Gather relevant events for each object (event streams before merging)
- Order
Create Order(O1),Create Order(O2)Ship Order(O2) — subject to “paid‑before‑ship” policy
- SupplierOrder
Raise Supplier Order(SO1),Raise Supplier Order(SO2)Receive Supplier Order(SO1),Unpack Supplier Order(SO1)Update Supplier Order(SO2)
- Invoice
Issue Invoice(I1forO1)Issue Invoice(I2forO2)Update Invoice(I2)
- Payment
Pay Invoice(P1forI1) withPaymentAmount=1000
At this stage, keep each stream separate (one CSV per object type) or use staging tables or views.
3. Identify cross‑object events and update object references
Some events naturally touch multiple objects:
- Issue Invoice links the Invoice to the relevant Order.
- Example (one‑to‑one):
Issue Invoice … Order=O1, Invoice=I1 - Example (consolidated billing):
Issue/Receive Invoice … Order=O1|O2, Invoice=I1
- Example (one‑to‑one):
- Pay Invoice links the Payment to the Invoice (and indirectly to the Order through billing).
- Example:
Pay Invoice … Invoice=I1, Payment=P1, PaymentAmount=1000
- Example:
Update the event rows so that the object columns reflect these relationships. Use | if an event touches multiple same‑type objects.
4. Merge the event streams into final log
Concatenate all event rows and retain the shared column set. The following sections describe three variants:
4.1 Minimal variant (objects: Order, Invoice, Payment)
Activity,Timestamp,Actor,Order,Invoice,Payment,PaymentAmount
Create Order,2025-01-01 12:35:00,John,O1,,,
Create Order,2025-01-01 12:36:00,Anna,O2,,,
Issue Invoice,2025-01-01 12:37:00,Mary,O1,I1,,
Issue Invoice,2025-01-01 12:37:30,Mary,O2,I2,,
Update Invoice,2025-01-01 12:37:45,Mary,,I2,,
Receive Payment,2025-01-01 12:38:00,John,,I1,P1,1000
Ship Order,2025-01-01 12:39:00,LogOps,O2,,,
4.2 Alternate variant demonstrating multi‑order invoice
If one invoice references both orders, record both Order IDs with |:
Activity,Timestamp,Actor,Order,Invoice,Payment,PaymentAmount
Create Order,2025-01-01 12:35:00,John,O1,,,
Create Order,2025-01-01 12:36:00,Anna,O2,,,
Receive Invoice,2025-01-01 12:37:00,Mary,O1|O2,I1,,
Receive Payment,2025-01-01 12:38:00,John,,I1,P1,1000
Ship Order,2025-01-01 12:39:00,LogOps,O2,,,
4.3 Extended variant including SupplierOrder, single payment for both invoices, and shipment of both orders in one go
(Add a SupplierOrder column to the header.)
Activity,Timestamp,Actor,Order,Invoice,Payment,PaymentAmount,SupplierOrder
Create Order,2025-01-01 12:35:00,John,O1,,,,
Create Order,2025-01-01 12:36:00,Anna,O2,,,,
Raise Supplier Order,2025-01-01 12:36:30,ProcBot,,,,,,SO1
Raise Supplier Order,2025-01-01 12:36:45,ProcBot,,,,,,SO2
Receive Supplier Order,2025-01-01 12:37:10,Warehouse,,,,,,SO1
Unpack Supplier Order,2025-01-01 12:37:20,Warehouse,,,,,,SO1
Update Supplier Order,2025-01-01 12:37:25,ProcBot,,,,,,SO2
Issue Invoice,2025-01-01 12:37:30,Mary,O1,I1,,,
Issue Invoice,2025-01-01 12:37:40,Mary,O2,I2,,,
Update Invoice,2025-01-01 12:37:45,Mary,,I2,,,
Receive Payment,2025-01-01 12:38:00,John,,I1|I2,P1,1000,
Ship Order,2025-01-01 12:39:00,LogOps,O1|O2,,,,
Glossary
- Event‑level attribute: An attribute that describes the event itself (for example, Activity, Timestamp, Actor).
- Object: A specific instance of an object type (for example, Order
O1). - Object‑level attribute: An attribute that describes an object (for example, PaymentAmount for Payment
P1). You can repeat these attributes at event time when the event references that object. - Object type: A category or class of business entities (for example, Order, Invoice, Payment, SupplierOrder).