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.
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.
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.
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()
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
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
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)
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 toVBEP.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
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
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...)
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 |
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
Create Skill to set category
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.
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.
Finally, also add an 'Execution Output' that indicated that a change occurred
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
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
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