Skip to main content

Celonis Product Documentation

BPMN_CONFORMS
Description

BPMN_CONFORMS provides a way for simple binary yes/no conformance checking on a BPMN model to distinguish fitting traces from non-fitting traces.

Syntax
 BPMN_CONFORMS ( flattened_events_table.column , bpmn_model )
  • flattened_events_table.column: Used as the input column of the operator. Should be a column of a (flattened) event table. Its values are mapped to the referred events and returned as the result column.

BPMN model description syntax
 [<vertices>], [<edges>]
  • vertices: A whitespace separated list of all vertices in the BPMN model. The vertices are encoded in the following way:

       [<vertex_id> <vertex_type>]
      
       [<vertex_id> BPMN_TASK '<task_name>']
      
    • vertex_id: Denotes a unique integer number used as the vertex identifier.

    • vertex_type: BPMN_START | BPMN_END | BPMN_EXCLUSIVE_CHOICE | BPMN_PARALLEL

      • BPMN_START: The start vertex of the BPMN model. Each model description should contain exactly one start vertex.

      • BPMN_END: The end vertex of the BPMN model. Each model description should contain exactly one end vertex.

      • BPMN_EXCLUSIVE_CHOICE: An exclusive choice gateway.

      • BPMN_PARALLEL: A parallel gateway.

    • task_name: Only used in combination with a vertex of type BPMN_TASK. Denotes the name of the task vertex, which should correspond to the activity name in the (flattened) event table. Must be a non-null STRING.

  • edges: A whitespace separated list of all edges in the BPMN model. An edge is encoded in the following way:

       [<start_vertex> <end_vertex>]
      
    • start_vertex: the vertex ID corresponding to the start vertex of this edge.

    • end_vertex: the vertex ID corresponding to the end vertex of this edge.

Examples

[1]

An example with a simple BPMN model: SEQUENCE("Create Order", EXCLUSIVE_CHOICE( "Process Order", "Cancel Order")). The event table contains four events, one fitting trace and one non-fitting trace.

Query

Column1

         BPMN_CONFORMS ( "ActivityTable"."ACTIVITY" , [ [ 0 BPMN_START ] [ 1 BPMN_END ] [ 2 BPMN_TASK 'Create Order' ] [ 3 BPMN_EXCLUSIVE_CHOICE ] [ 4 BPMN_TASK 'Process Order' ] [ 5 BPMN_TASK 'Cancel Order' ] [ 6 BPMN_EXCLUSIVE_CHOICE ] ] , [ [ 0 2 ] [ 2 3 ] [ 3 4 ] [ 3 5 ] [ 4 6 ] [ 5 6 ] [ 6 1 ] ] )
        

Input

Output

ActivityTable

OBJECT_ID : string

ACTIVITY : string

TIMESTAMP : date

'001'

'Create Order'

Sat Jan 01 2022 00:00:00.000

'001'

'Cancel Order'

Sun Jan 02 2022 00:00:00.000

'002'

'Create Order'

Tue Feb 01 2022 00:00:00.000

'002'

'Create Order'

Wed Feb 02 2022 00:00:00.000

ObjectTable

OBJECT_ID : string

'001'

'002'

Foreign Keys

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

Result

Column1 : int

1

0

[2]

This example computes the BPMN_CONFORMS operator on a more complex BPMN model containing both an exclusive and a parallel path: SEQUENCE ("A", EXCLUSIVE_CHOICE("B", PARALLEL("C", "D")), "E"). The event table contains three traces that all conform to the model.

Query

Column1

         BPMN_CONFORMS ( "ActivityTable"."ACTIVITY" , [ [ 0 BPMN_START ] [ 1 BPMN_END ] [ 2 BPMN_TASK 'A' ] [ 3 BPMN_TASK 'B' ] [ 4 BPMN_TASK 'C' ] [ 5 BPMN_TASK 'D' ] [ 6 BPMN_TASK 'E' ] [ 7 BPMN_EXCLUSIVE_CHOICE ] [ 8 BPMN_EXCLUSIVE_CHOICE ] [ 9 BPMN_PARALLEL ] [ 10 BPMN_PARALLEL ] ] , [ [ 0 2 ] [ 2 7 ] [ 7 3 ] [ 7 9 ] [ 9 4 ] [ 9 5 ] [ 4 10 ] [ 5 10 ] [ 3 8 ] [ 10 8 ] [ 8 6 ] [ 6 1 ] ] )
        

Input

Output

ActivityTable

OBJECT_ID : string

ACTIVITY : string

TIMESTAMP : date

'001'

'A'

Sat Jan 01 2022 00:00:00.000

'001'

'B'

Mon Jan 03 2022 00:00:00.000

'002'

'A'

Wed Jan 05 2022 00:00:00.000

'001'

'E'

Fri Jan 07 2022 00:00:00.000

'002'

'C'

Thu Jan 06 2022 00:00:00.000

'002'

'D'

Fri Jan 07 2022 00:00:00.000

'002'

'E'

Sun Jan 09 2022 00:00:00.000

'003'

'A'

Mon Jan 10 2022 00:00:00.000

'003'

'D'

Sat Jan 15 2022 00:00:00.000

'003'

'C'

Mon Jan 17 2022 00:00:00.000

'003'

'E'

Wed Jan 19 2022 00:00:00.000

ObjectTable

OBJECT_ID : string

'001'

'002'

'003'

Foreign Keys

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

Result

Column1 : int

1

1

1

[3]

This example computes the BPMN_CONFORMS operator for a BPMN model with a redo loop on a flattened MO table: SEQUENCE (TASK(C),TASK(B),TASK(E) ). The flattened event table over O_Obj2 contains two traces, with object 'X' conforming to the model and 'Y' not conforming.

Query

Column1

         BPMN_CONFORMS ( MO_FLATTEN_EVENTS("o_celonis_obj_2")."ACTIVITY" , [ [ 0 BPMN_START ] [ 1 BPMN_TASK 'B' ] [ 2 BPMN_TASK 'C' ] [ 3 BPMN_TASK 'D' ] [ 4 BPMN_END ] ] , [ [ 0 1 ] [ 1 2 ] [ 2 2 ] [ 2 3 ] [ 3 4 ] ] )
        

Input

Output

e_celonis_event_A

ID : string

TIME : date

'0'

Sat Jan 01 2022 00:00:00.000

'1'

Tue Jan 04 2022 00:00:00.000

'2'

Thu Jan 06 2022 00:00:00.000

e_celonis_event_B

ID : string

TIME : date

OBJECT_ID : string

'005'

Sun Jan 09 2022 00:00:00.000

'X'

e_celonis_event_C

ID : string

TIME : date

OBJECT_ID : string

'007'

Fri Jan 07 2022 00:00:00.000

'Y'

e_celonis_event_E

ID : string

TIME : date

OBJECT_ID : string

'006'

Mon Jan 10 2022 00:00:00.000

'X'

e_celonis_mixed_event_B

ID : string

TIME : date

PHONE : string

'001'

Sun Jan 02 2022 00:00:00.000

null

'002'

Mon Jan 03 2022 00:00:00.000

'01768'

'004'

Tue Jan 11 2022 00:00:00.000

'01273'

e_celonis_mixed_event_C

ID : string

TIME : date

PHONE : string

'003'

Wed Jan 05 2022 00:00:00.000

'01273'

e_celonis_mixed_event_D

ID : string

TIME : date

PHONE : string

'020'

Sat Jan 08 2022 00:00:00.000

null

o_celonis_obj_1

ID : int

Data : string

Obj2_ID : string

0

'foo'

'X'

1

'bar'

'X'

2

'This is a longer string'

'Y'

o_celonis_obj_2

ID : string

Value : int

'X'

100

'Y'

250

r_e_celonis_obj_1_event_A

OBJECT_ID : int

ID : string

0

'0'

0

'1'

1

'0'

r_e_celonis_obj_1_mixed_events_B

OBJECT_ID : int

ID : string

2

'004'

r_e_celonis_obj_1_mixed_events_C

OBJECT_ID : int

ID : string

0

'003'

r_e_celonis_obj_1_mixed_events_D

OBJECT_ID : int

ID : string

2

'020'

r_e_celonis_obj_2_mixed_events_B

OBJECT_ID : string

ID : string

'Y'

'001'

r_e_celonis_obj_2_mixed_events_C

OBJECT_ID : string

ID : string

'Y'

'003'

'X'

'003'

r_e_celonis_obj_2_mixed_events_D

OBJECT_ID : string

ID : string

'Y'

'020'

Foreign Keys

o_celonis_obj_2.ID

o_celonis_obj_1.Obj2_ID

o_celonis_obj_2.ID

e_celonis_event_B.OBJECT_ID

o_celonis_obj_2.ID

e_celonis_event_E.OBJECT_ID

o_celonis_obj_2.ID

e_celonis_event_C.OBJECT_ID

e_celonis_event_A.ID

r_e_celonis_obj_1_event_A.ID

o_celonis_obj_1.ID

r_e_celonis_obj_1_event_A.OBJECT_ID

e_celonis_mixed_event_C.ID

r_e_celonis_obj_1_mixed_events_C.ID

o_celonis_obj_1.ID

r_e_celonis_obj_1_mixed_events_C.OBJECT_ID

e_celonis_mixed_event_B.ID

r_e_celonis_obj_1_mixed_events_B.ID

o_celonis_obj_1.ID

r_e_celonis_obj_1_mixed_events_B.OBJECT_ID

e_celonis_mixed_event_D.ID

r_e_celonis_obj_1_mixed_events_D.ID

o_celonis_obj_1.ID

r_e_celonis_obj_1_mixed_events_D.OBJECT_ID

e_celonis_mixed_event_B.ID

r_e_celonis_obj_2_mixed_events_B.ID

o_celonis_obj_2.ID

r_e_celonis_obj_2_mixed_events_B.OBJECT_ID

e_celonis_mixed_event_C.ID

r_e_celonis_obj_2_mixed_events_C.ID

o_celonis_obj_2.ID

r_e_celonis_obj_2_mixed_events_C.OBJECT_ID

e_celonis_mixed_event_D.ID

r_e_celonis_obj_2_mixed_events_D.ID

o_celonis_obj_2.ID

r_e_celonis_obj_2_mixed_events_D.OBJECT_ID

Result

Column1 : int

0

0

[4]

This example computes the BPMN_CONFORMS operator on a more complex BPMN model containing both an exclusive and a parallel path: SEQUENCE ("A", EXCLUSIVE_CHOICE("B", PARALLEL("C", "D")), "E"). The event table contains three traces that all conform to the model.

Query

Column1

         BPMN_CONFORMS ( "ActivityTable"."ACTIVITY" , [ [ 0 BPMN_START ] [ 1 BPMN_END ] [ 2 BPMN_TASK 'A' ] [ 3 BPMN_TASK 'B' ] [ 4 BPMN_TASK 'C' ] [ 5 BPMN_TASK 'D' ] [ 6 BPMN_TASK 'E' ] [ 7 BPMN_EXCLUSIVE_CHOICE ] [ 8 BPMN_EXCLUSIVE_CHOICE ] [ 9 BPMN_PARALLEL ] [ 10 BPMN_PARALLEL ] ] , [ [ 0 2 ] [ 2 7 ] [ 7 3 ] [ 7 9 ] [ 9 4 ] [ 9 5 ] [ 4 10 ] [ 5 10 ] [ 3 8 ] [ 10 8 ] [ 8 6 ] [ 6 1 ] ] )
        

Input

Output

ActivityTable

OBJECT_ID : string

ACTIVITY : string

TIMESTAMP : date

'001'

'A'

Sat Jan 01 2022 00:00:00.000

'001'

'B'

Mon Jan 03 2022 00:00:00.000

'002'

'A'

Wed Jan 05 2022 00:00:00.000

'001'

'E'

Fri Jan 07 2022 00:00:00.000

'002'

'C'

Thu Jan 06 2022 00:00:00.000

'002'

'D'

Fri Jan 07 2022 00:00:00.000

'002'

'E'

Sun Jan 09 2022 00:00:00.000

'003'

'A'

Mon Jan 10 2022 00:00:00.000

'003'

'D'

Sat Jan 15 2022 00:00:00.000

'003'

'C'

Mon Jan 17 2022 00:00:00.000

'003'

'E'

Wed Jan 19 2022 00:00:00.000

ObjectTable

OBJECT_ID : string

'001'

'002'

'003'

Foreign Keys

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

ObjectTable.OBJECT_ID

ActivityTable.OBJECT_ID

Result

Column1 : int

1

1

1