Skip to main content

Celonis Product Documentation

Customizations for Analysts - Studio

User story: As a user of the OOP Application, I would like to see additional Inefficiencies so that I get further insights and can take appropriate measures to ensure fast processing of orders.

Business Impact / Added Value

High

Additional inefficiencies help to understand issues and reassign or prioritize orders.

Technical Complexity

Mediocre

- Data Integration: It might be necessary to add tables to the extractions or Data Model

- Studio: Add information to the Knowledge Model and create Skills

Impacted by Customizations

N/A

Notice

As all inefficiencies follow the same structure, we provide a general manual and explain the detailed adjustments for each example afterwards. For another example of how to add a new execution gap/inefficiency to your app, check out the Academy Training/Lesson 6: Apply Customizations - Expert - Create Own Execution Gap or the related solution guide.

Step-by-steg guide:
  1. Update extractions, transformations and data model

    • This section depends mostly on the inefficiency to be added. In general, most tables are included in the O2C Connector and only specific fields must be added. More details are provided with each inefficiency.

  2. Update knowledge model

    • Formula - Each inefficiency follows strict definitions that are built in the KPIs as FORMULA_[Inefficiency Name]_LEVEL

    • Filter - Create a filter that leverages the created formula

    • Flag - For the respective record in the KM that the task is created on there must be an indicator for each inefficiency as FLAG_[Inefficiency Name]

    • Anomaly - Add a KM entry for the new anomaly (i.e. Execution-Gap/Inefficiency)

    • Additionally - There might be other formulas that must contain the added inefficiency. This will be described in the last part.

  3. Create skill that generates the tasks for each order

    • Smart Sensor: Trigger the Skill to create tasks using inefficiency filter

    • Create Task: Add Create Task after sensor and name task according to inefficiency

    • Optional: Configure Actions for this inefficiency (See configured skills for examples)

      • Send Email: Add a new task action for sending an email

      • Update Task(s) after Action Execution

      • Execution Output to send predefined email template via Mailto://

        Hint: use https://mailtolinkgenerator.com/ to generate your custom email template.

User story: As a user of the Execution App I want to see orders that have a delivery already created but no goods issue recorded such that I can take relevant action to prevent late deliveries.

Tip

Condition: Compare LIKP.WADAT (Expected Goods issue Date) with Today()

  1. Update extractions, transformations and data model

    • To enable this inefficiency the LIKP table must be added to the extractions and transformations. The LIKP is connected in the data model to the LIPS table using the fields MANDT and VBELN. The necessary field to be added is LIKP.WADAT.

    • Caution: Some implementations have a different setup where the table LIPS is joined to VBAP directly compare

  2. Update knowledge model

    • Formula

       - id: FORMULA_OVERDUE_GOODS_ISSUE
         displayName: Overdue Goods Issue
         pql: >
           CASE WHEN PU_COUNT(VBAK,VBAP.POSNR,
           KPI(FORMULA_OVERDUE_GOODS_ISSUE_ITEM)  ='1' and ${VARIABLE_OPEN_ORDER_ITEM}
           ) > 0
           THEN '1'  ELSE '0' END
       - id: FORMULA_OVERDUE_GOODS_ISSUE_ITEM
         displayName: Overdue Goods Issue
         pql: >
           CASE WHEN
           --No Goods Issue
           PU_COUNT("VBAP", "_CEL_O2C_ACTIVITIES"."ACTIVITY_EN", "_CEL_O2C_ACTIVITIES"."ACTIVITY_EN" IN ($(VARIABLE_ACTIVITY_RECORD_GOODS_ISSUE)
      )) = 0
           AND
           --today is after the planned Goods issue date
           TODAY() >= PU_LAST(VBAP,BIND(VBFA,LIKP.WADAT), VBFA.VBTYP_N = 'J') THEN '1' ELSE '0' END
    • Filter

       - id: FILTER_OVERDUE_GOODS_ISSUE
         displayName: Overdue Goods Issue
         pql: FILTER CASE WHEN PU_COUNT ( "VBAK" , "VBAP"."VBELN" ,
           KPI(FORMULA_OVERDUE_GOODS_ISSUE)='1') > 0  THEN '1' ELSE '0' END = '1';
    • Flag (Record ORDER)

       - id: FLAG_OVERDUE_GOODS_ISSUE
         displayName: Overdue Goods Issue
         pql: KPI("FORMULA_OVERDUE_GOODS_ISSUE")='1'
    • Anomaly

       - id: GAP_OVERDUE_GOODS_ISSUE
         displayName: Orders with Overdue Goods Issue
         description: ""
         flag: FLAG_OVERDUE_GOODS_ISSUE
    • Additional

      Add to FORMULA_OVERDUE: OR  KPI("FORMULA_OVERDUE_GOODS_ISSUE")='1' 
      And assign priority in KPI PRIORITIZATION 
  3. Create a skill that generates task:

    • Follow the standard approach to create the task 'Overdue Goods Issue' using the following filters:

      • Open Orders (FILTER_OPEN_ORDERS)

      • Overdue Goods Issue (FILTER_OVERDUE_GOODS_ISSUE)

  4. Additional Steps

    • When implementing this inefficiency there can be overlaps between the Execution Gaps Overdue GI and Overdue Delivery. Thus the formula for overdue deliveries must be adjusted and exclude orders that have an delivery note created already. Add the following to FORMULA_[...]_OVERDUE_MISSING_DELIVERY

      AND PU_COUNT("VBAP","_CEL_O2C_ACTIVITIES"."EVENTTIME", "_CEL_O2C_ACTIVITIES"."ACTIVITY_EN" IN ('${VARIABLE_ACTIVITY_CREATE_DELIVERY}')) = 0
    • Furthermore, it is important that within the variable VARIABLE_DATE_DELIVERY_DATE neither the Goods Issue Date nor Conf. Delivery Date is used (i.e. not WADAT, EDATU) as these deadlines are after the newly added planned GI Date, hence the Overdue Delivery would always be overlapping the Overdue GI Execution Gap. If they are used, consider changing them to VBEP.MBDAT

User story: As a user of the OOP Application, I would like to remove inefficiencies that don't reflect our business logic so that I only see relevant information and tasks.

Business Impact / Added Value

High

Some inefficiencies might not be applicable to your business logic. Removing them increases the effectiveness of using the OOP application.

Technical Complexity

Low

Studio: Remove information from the Knowledge Model, delete Skills and adjust Views

Impacted by Customizations

N/A

Example MISSING_WEIGHT

Step-by-steg guide:
  1. Disable filter in User View

    • In the configuration of the user view, edit the filter bar and adjust the code to disable the specific filter

      components
          - id: quickfilter-ex-gaps
            type: quick-filters
            settings:
              filters:
                - id: filter-missing-weight
                  scope: disabled
  2. Disable and remove the Inefficiency from the Knowledge Model

    • Disable Anomaly

      anomalies
          - id: GAP_MISSING_WEIGHT
            scope: disable
    • Disable Filter

        - id: FILTER_MISSING_WEIGHT
          displayName: Missing Weight
          pql: FILTER  KPI("FORMULA_MISSING_WEIGHT")='1' ;
          global: false
          scope: disabled
    • Disable Flag

        - id: FLAG_MISSING_WEIGHT
          scope: disabled
    • Remove all occurrences of FORMULA_MISSING_WEIGHT in other KPIs (e.g. FORMULA_MISSING_INFO, PRIORITIZATION...)

  3. Delete the skills that create tasks for this inefficiency

    • Missing Weight & Missing Weight - Position

User story

As a user of the OOP Application, I want to manually cluster orders into different categories so that I can highlight relationships between orders (e.g. combined shipment).

Business Impact / Added Value

Medium

Being able to manually assign individual orders to specific categories and filter them accordingly

Technical Complexity

Low

Studio: Adjust Knowledge Model, create Skills and Action Flows

Impacted by Customizations

Low

Changes are only applied in Celonis. No dependency to source tables

Order_Table_AugmAttribute.png
Step-by-step guide:
  1. Create augmented attribute in Knowledge Model

    • For the preferred categorization level - either Order or Sales Order - create the augmented attribute with a set of possible values

            - id: CATEGORY
              displayName: Cat
              possibleValues:
                - ""
                - A
                - B
                - C
              columnType: STRING
              type: AUGMENTED_ATTRIBUTE
  2. Create Skill to set category

    Skill_Augmented_Attribute.png
    • Add a manual sensor with two custom inputs, first the order number as text and a dropdown with one entry for each possible value of the augmented attribute. Optionally also add the item number if you wish to categorize on item level.

      Manual_Sensor_SetAugmAttr.png
    • Select 'Update Augmented Attribute' as next step. Select the identifier order if the categorization is on order level and the augmented attribute 'CATEGORY'. Also enter the record identifier and the selected category from the previous step.

      Set_AugmAttr.png
    • Finally, also add an 'Execution Output' that indicated that a change occurred

  3. Create Skill to delete category

    • Follow the steps for the set category skill but exclude the dropdown input and leave the category empty when updating the augmented attribute

      Manual_Sensor_RemoveAugmAttr.png
      Remove_AugmAttr.png
  4. Add the manual sensors to the knowledge model

      - id: ACTION_UPDATE_CATEGORY
        displayName: Update categroy
        customAttributes:
          ownerIds:
            - sales-orders-table
            - sales-order-items-table
          options:
            icon: pencil
            iconPosition: left
            hideLabel: false
            tooltip: Update category
            tooltipPosition: below
            buttonVariant: neutral
        skillKey: update-category
        records:
          - ORDER
        filters: []
        inputs:
          - name: Order Nr
            attribute: ORDER_NUMBER
        type: ACTION
      - id: ACTION_REMOVE_CATEGORY
        displayName: Remove category
        customAttributes:
          ownerIds:
            - sales-orders-table
            - sales-order-items-table
          options:
            icon: reset
            iconPosition: left
            hideLabel: false
            tooltip: Remove category
            tooltipPosition: below
            buttonVariant: neutral
        skillKey: remove-category
        records:
          - ORDER
        filters: []
        inputs:
          - name: Order Nr
            attribute: ORDER_NUMBER
        type: ACTION
  5. Add a column to the Sales Order (Item) table to display the attribute

          - field: ORDER.AUGMENTED_CATEGORY
            id: 6b9c616e-254e-415d-b80f-217f09c12f6d
            order: 4500
            displayContentRule: CONTENT_RULE_COLOR_CATEGORY
            onEdit:
              updateAugmentedAttribute: true