General presentation
OTIF is sub function of Global Sales (analysis of all documents for sales handling costumers or transfer with plants and GBUs).
The term OTIF means On Time In Full, that is an analysis if the delivery was done in correct time and the quantity was delivered in exact time.
This sub function works with datal handled by Global Sales about sales order lines, scheduled lines, deliveries and invoices.
The load is done daily using the process chain scheduled with delta process.
List of contacts
- Functional Owner of this report: Jean-Baptiste Cercueil (SCE)
- IS Reporting Leader: Sandra Silveira (SBS IS)
- BW Coordinator: Guillaume Thevenet (SBS IS)
- BW Developer: Nestor Araujo (SBS IS) , Mathieu Lambert (SBS IS)
Objective of the application
- The main purpose is to have a detailed core report for all GBU's and also be the data source for SCE Dashboard in Qlikview.
- Analyze the behaviour of sales processes since the goods issue until the shipment end process.
- Understand the reasons why the process was not finished with OTIF
- One common & consolidated reporting space for the group
- Rationalization of the “live” solutions and reduction of evolutions requested
- Maintainable and sustainable solution.
- Enabler for productivity actions on OTIF process
- Drillable solution - allowing possibility to detect & analyse problems by showing the link from aggregated figures down to document in SAP.
- Few “core” queries/workbooks design for application (=> Use BW analysis functionalities and not just as extractor).
History
The OTIF analysis is generated in BI 4 with data based on PPS application just for Rhodia side and load QV application for SBS SCE (Supply Chain Excelence).
The OTIF for Solvay was created in 2016 in BW after OBAS implementation and it is the source for SBS SCE also.
Usage information
Around 300 users, worldwide with daily update
General Rules
Functional Specifications
Main Rules
SCE defines 6 different OTIF indicators: On Time Delivery in Full (Customer Request) : Concatenates In full Requested and OTD CR On Time Delivery in Full (1st Confirmed) : Concatenates In full Confirmed and OTD FC On Time Delivery in Full (Last Confirmed) : Concatenates In full Confirmed and OTD LC On Time Shipment in Full (Customer Request) : Concatenates In full Requested and OTS CR On Time Shipment in Full (1st Confirmed) : Concatenates In full Confirmed and OTS FC On Time Shipment in Full (Last Confirmed) : Concatenates In full Confirmed and OTS LC All calculation in this query is managed at Order line level. When several schedule lines matching with one same order lines we are considering sums for quantities and maximum for dates.
1 - Rules for OTIF Calculation (Solvay)
1.1 - On Time Delivery "On Time Delivery: it means that the calculation is based on date of arrival, they compare an achieved arrival date with a target arrival date. Achieved Delivery Date:
Achieved Delivery Date
=If([Transportation mode]="PICK UP" Or [Order Document Type Code]="KE";[V_Max Actual GI Date];If(IsNull([V_Max End of Shipment Calculated]);[V_Max Actual GI Date];[V_Max End of Shipment Calculated]))
For “PICK UP” transportation mode : Last transfer order confirmation date for the order line --> FIELD LTAP-QDATU else Last Good Issue date
For other transportation mode : The last “Actual Shipment end” if it exists else the last “ planned shipment end” if it exists else the last “Actual good Issue”
OTD CR: If Difference between Achieved delivery date and Order line requested delivery Date is lower than – Early tolerance then “EARLY” else if Difference between Achieved delivery date and Order line requested delivery Date is greater than Late tolerance then ""LATE"" else ""OTD""
=If([Transportation mode]="PICK UP";If(DaysBetween(Last Req Delivery];[Achieved Delivery Date])<0;0;DaysBetween(Last Req Delivery];[Achieved Delivery Date])))
OTD FC: If Difference between Achieved delivery date and Orderline 1st confirmed delivery Date is lower than – Early tolerance then “EARLY” else if Difference between Achieved delivery date and Order line 1st conf delivery Date is greater than Late tolerance then ""LATE"" else ""OTD""
=If([Transportation mode]="PICK UP";If(DaysBetween([V_Max 1st ATP];[Achieved Delivery Date])<0;0;DaysBetween([V_Max 1st ATP];[Achieved Delivery Date])))
OTD LC: If Difference between Achieved delivery date and Order line last confirmed delivery Date is lower than – Early tolerance then “EARLY” else if Difference between Achieved delivery date and Order line last conf delivery Date is greater than Late tolerance then ""LATE"" else ""OTD"" "
=If([Transportation mode]="PICK UP";If(DaysBetween([V_Max Last ATP];[Achieved Delivery Date])<0;0;DaysBetween([V_Max Last ATP];[Achieved Delivery Date])))
1.2 - On Time Shipment "On Time Shipment: it means that the calculation is based on date of good issue, they compare an achieved shipment date with a target shipment date (calculated in SAP from requested delivery date, 1confirmed delivery date and last confirmed delivery date). Achieved Shipment Date: For “PICK UP” transportation mode : Last transfer order confirmation date for the order line --> FIELD LTAP-QDATU else Last Good Issue date For other transportation mode : The last “Actual GI” date
Achieved Shipment Date
=If([Transportation mode]="PICK UP" Or [Order Document Type Code]="KE";[V_Max Actual GI Date])
OTS CR: If Difference between Achieved shipment date and Order line requested GI Date is lower than – Early tolerance then “EARLY” else if Difference between Achieved shipment date and Order line requested GI Date is greater than Late tolerance then ""LATE"" else OTS.
=If([Transportation mode]="PICK UP";If(DaysBetween([V_Max Last Req GI]; ";[V_Max Actual GI Date] )<0;0;DaysBetween([V_Max Last Req GI]; ";[V_Max Actual GI Date]
=iF([Transportation mode]="PICK UP";If(DaysBetween([V_Max 1st ATP GI]; ";[V_Max Actual GI Date] <0;0;DaysBetween([V_Max 1st ATP GI]; [V_Max Actual GI Date] )))
=iF([Transportation mode]="PICK UP";If(DaysBetween([V_Max 1st ATP GI]; ";[V_Max Actual GI Date] <0;0;DaysBetween([V_Max 1st ATP GI]; [V_Max Actual GI Date] )))
1.3 - Tolerances:
"Number of days based on Transportation Mode (Order Shipping Condition) OCEAN = 7 RAIL = 3 BARGE = 3 INTERMODAL = 2 ROAD = 1 AIR = 0 OTHER = 0 "
DAYS DELAY NET (APPLY THE TOLERANCE)
TOLERANCES by Shipping Conditions
AB";"AC";"AE";"AF => 7 days (ocean)
AJ => 1 day (LTL)
AK AH AI => 0 (FTL)
AU AP => 3 (Barge / Rail)
AV => 2 (multimodal)
“AL” “AW” “AX” => 0 999 days) (Pick Up)
=If([OTD CR - Delay Days]=999;999;If([OTD CR - Delay Days]=0;0;If(Abs([OTD CR - Delay Days])<=[Tolerance Days];0;If([OTD CR - Delay Days]<0;[Tolerance Days]+[OTD CR - Delay Days];[OTD CR - Delay Days]-[Tolerance Days]))))
1.4 - Exceptions:
"Customer Pick Up: uses Last transfer order confirmation date in calculation Customer Pick Up Early = OTIF Order Non OTIF Reason code starting with 7 = OTIF "
1.5 - IN FULL
IN FULL REQUESTED – IFR
(Order line qty – Sum Delivery quantity) + tolerance that comes from the sales order
IN FULL CONFIRMED – IFC
(Sum Scheduled Confirmed Qty by sales order item – Sum Delivery quantity) + tolerance that comes from the sales order
7 lead-times have been defined by SCE (to be challenged for rationalisation)
Leadtime 1 : The Lead-time is the difference, in days, between the customer PO Date (order line level - VBKD-BSTDK), and the requested material availability date (Max in the scheduled line level).
=DaysBetween([V_Max Cust PO];[V_Max Req Material Availability])
Leadtime 2 : The Lead-time is the difference, in days, between the customer PO Date (VBKD-BSTDK), and the achieved GI date
=DaysBetween([V_Max Cust PO];[Max Actual GI Date])
Leadtime 3 : The Lead-time is the difference, in days, between the customer PO Date, and the requested delivery date.
=DaysBetween([V_Max Cust PO];[V_Max Last Req Delivery])
Leadtime 4 : The Lead-time is the difference, in days, between the customer PO Date, and the achieved delivery date
=DaysBetween([V_Max Cust PO];[Achieved Delivery Date])
Leadtime 5 : The Lead-time is the difference, in days, between the creation date and the last customer req Goods Issue date
Leadtime 6 : The Lead-time is the difference, in days, between the creation date and the schedule line 1st ATP (confirmed) GI date
Leadtime 7 : The Lead-time is the difference, in days, between the creation date and the actual GI date
1.7 - DOCUMENTS TYPES
The document types to be considered are:
GCTA | Standard Order |
KE | Consig issue |
SB | SB Third-p.dir order |
SO | SO Rush Order |
TA | Standard Order |
TAF | Standard Order (FPl) |
TAM | Delivery Order |
TAV | Standard Order (VMI) |
TD | TD Standard Order |
TDIV | TDIV Misc Op |
TSA | Telesales |
ZITI | Sales Order ITI BR |
ZORB | Standard Order BR |
ZOUT | Other Outputs BR |
ZPVA | ZPVA Ord.immed.ship. |
ZVEX | Fut. Dely Invoice BR |
ZVEY | Fut. Dely Shipmnt BR |
PS: NOT CONSIDER NB TYPE - CAUSE THEY ARE IN THE PO'S PART
Also we do not have the NB types (purchase order) together in the same DSO because the data structure is different and we do now, with BW, a straight extraction!. Are you sure that is necessary measure the OTIF for the NB Orders? For information with Order Book, we have one for sales order and another for PO's.
1.8 - QUERY FILTER
1.8.1 – Flag Intra GBU = NO
1.8.2 – Reason for rejection: VBAP-ABGRU is null or equal 98
Roles and access
List of application role + menu role and explanation if we have several applications role with specials rules.
Role Code | Role Description | Explanation |
|---|---|---|
| ZR_RCS_CA_M49 | SD - Sales and Distribution | menu role |
NB: The role menu ZR_RCS_ALL_MENU "Role composite with all role Menu and perimeters" gives access to all role menu. When asking for a new role menu, do not forget it is added to that one.
Authorization objects
List of authorization objects mandatory for the application.
Authorization object | Explanation |
|---|---|
| ZRCSCAP05 | Global Business Unit (CPFCTR1_2) |
| ZTOUTCAP01 | Company Code (C_COMPCDE) |
| Sales Office (C_SAL_OFF) |
See also file maintained by Authorization team :
- BW Catalog of Roles: Authorization catalog
- BW Authorization: BW Authorizations
Statistics by infoproviders
| InfoProvider Used | Description / Calendar Year/Month | JAN 2017 | FEB 2017 | MAR 2017 | APR 2017 | MAY 2017 | JUN 2017 | JUL 2017 |
| MVSDSO10 | MP: Sales - OTIF (OBAS) | 570 | 679 | 722 | 604 | 539 | 591 | 404 |
| MVSDSO50 | MP: Sales - OTIF (Global Sales) | 12 | 27 | 5 | 19 | 9 | 20 | 31 |
| MVSDSO51 | MP: Sales & Transfer - OTIF (Global Sales) | |||||||
| MVSDSO52 | MP: Sales - OTIF with order book dates (Global Sales) | |||||||
| Overall Result |
PS: The providers marked in blue are important to be monitored, the other ones are referent to the old TR solution that should be desactivated soon.
Statistics by queries
| InfoProvider | Query | JAN 2016 | FEB 2016 | MAR 2016 | APR 2016 | MAY 2016 | JUN 2016 | JUL 2016 | |
| MVSDTR10 | BW_QRY_MVSDSO10_0001 | BW Sales - OTIF detais (core query) | 428 | 390 | 441 | 332 | 312 | 285 | 232 |
| MVSDTR10 | BW_QRY_MVSDSO10_0002 | BW Sales - OTIF dashboard (core query) | 75 | 133 | 156 | 159 | 131 | 155 | 73 |
| MVSDTR50 | BW_QRY_MVSDSO50_0001 | BW Sales - OTIF (core query) | |||||||
| MVSDTR50 | BW_QRY_MVSDSO50_0002 | BW Sales - OTIF dashboard (core query) | |||||||
| MVSDTR51 | BW_QRY_MVSDSO51_0001 | BW Transfer - OTIF details (core query) | |||||||
| MVSDTR52 | BW_QRY_MVSDSO52_0001 | BW Sales - OTIF & order book (core query) | |||||||
| MVSDTR52 | BW_QRY_MVSDSO52_0002 | BW Sales/Transfer - OTIF & order book (core query) | |||||||
| Result |
Dataflow overview
Multi Provider MVSDSO50 - OTIF Global
Details
Cubes
CRSDSO10 - Solvay
CRSDSO50 - Rhodia
Multi Provider MVSDSO51 - OTIF Transfer Global
This multi provider uses the same cubes for MP MVSDSO50 (OTIF Sales) + OTIF Transfer (CRSDSO24, CRSDSO54).
Cubes CRSDSO24 (Solvay) / CRSDSO54 (Rhodia) Structures
MVSDSO52 - MP Sales & Transfer for OTIF with Orderbook dates
This multi provider is based on DSO's due the several details inside them. The DSO's used here are: DBSDSO9A (OTIF Sales & order book Solvay), DBSDSO9B (OTIF Sales & order book Rhodia), DBSDSO9E (OTIF Transfer & order book Solvay), DBSDSO9FE (OTIF Transfer & order book Rhodia)
All DSO's have the same structure of fields below:
Functional and Technical rules on Workbench + Reporting
Rules & Explanations
Main documentation:
Preparation
Design
OTIF Specification for Rhodia (BI4)
Deployment
Rule to get the GBU code
For Rhodia
Using distribution channel and division from material, get the IECRA code in master data C_CDSA
Using IECRA code, get the sub-activity in master data g_cwwe01
For Solvay
using business area, get the technical business area in master data c_techba
The function above is used to fill zeros left
The code below takes the GBU code from master data sub-activity (g_cwwe01)
Rule to define picked good issue (PGI) If doc type is KE or incorterm is ERW or FCA
Calculation Rules
Rule to define other date types and ship end date variable according to the content of fields actual shipment, planned shipment of GI date
Rule to define the good issue date
Rule to redefine the good issue date when the order is a pickup, just for Rhodia
Rule to define the achieved delivery date and achieved shipment datte
Rule to determine In Full requested considering the lower and upper tolerance
Rule to generate the in full requested detailed with terms light, heavy or yes
Rule to determine In Full confirmed measure considering the lower and upper tolerance
Rule to generate the in full confirmed detailed with terms light, heavy or yes
Rule to determine the differences between delivery quantity and requested quantity
Rule to generate on time delivery customer request (OTD CR)
Rule to Consider special NON OTIF reasons as OTIF
Rule to generate group of delays for OTDCR
Rule to generate OTDCR delay days
The same rules are applied for OTDFC, OTDLC, OTSCR, OTSFC, OTSLC just changing the date to be considered, see below:
For OTDFC uses the dates → v_dif_date = v_fstatp - v_shp_eact (difference between max first ATP and shipment end date)
For OTDFC uses the dates → v_dif_date = v_lstatp - v_shp_eact (difference between max last ATP and shipment end date)
Rule to define the dates used in OTS CR (ON TIME SHIPMENT Customer request)
For OTSCR uses the dates → v_dif_date = v_lstrqgi - v_gi_date (difference between max actual GI date and last req delivery)
For OTSFC uses the dates → v_dif_date = v_firstgi - v_gi_date(difference between max actual GI date and first ATP GI)
For OTSLC uses the dates → v_dif_date = v_lastgi - v_gi_date (difference between max actual GI date and last ATP GI)
Rule to generate OTIF necessary codification
Rule to generate NON OTIF Type
Leadtime 6 : LeadTime FirstCommitted = Order line creation date - schedule line 1st ATP (confirmed) GI date
Leadtime 7 : LeadTime Actual = Order line creation date - actual GI date
Unit conversions
The Unit conversion is done in the Bex queries (Quantity Conversion Type), after user chooses the unit conversion on reports
Transactionnal data are stored in sales unit
if base unit / po unit is managed in dimension MASS, conversion within table T006 works well
if base unit / po unit is not managed in dimension MASS, conversions for KG/LB/TO have to be managed on ERP side (MM03 / Alternative Conversion).
There are many "special" units on Solvay ERP, ie: 1KG, 1TN, VKG, KRE,
Important :
Quantities are not converted when loading data, and are not store into cubes (The conversion is done when running the report)
So, if a conversion is missing for a material ask the material referent to
1- manage the conversion on ERP Side by managed the material master (MM03) / unit of measure tab
2- the day after, when the DSO UOMCMAT2 is filled, the conversion is applied in the reports. It applies to whole data without any reloading.
The conversion type created by Global Sales queries is QCT_MATNR4 (see below the setup for it).
BW Updated Qty Unit by Material
Dependencies with other applications
- It was created some master data in order to have the attributes shared with several applications: Ordeline (C_ITM_SD), PO Line (C_ITM_GS)
- Data is consumed by Qlikview dashboard. The loadings in QV are daily. It runs a fixed scheduled, the loadings must be finished when the next start.
- There is an integration with SPRINT (purchase schedule lines) in order to take the PO schedule lines and identify all the transfers
- There is a link with TIERS to store ths shipments/deliveries with overall status between 1 and 4 (planned - loaded)
Data loadings
Info providers and objects loaded
1 - Main Process Chain
This process chain is responsible to trigger and syncronize all Global Sales processes chains for Solvay and Rhodia. It is scheduled to run every workday inside the Daily process chain (RSP_DAILY) after general master data PC, around 3AM (French time) and TIERS.
2 - Propagation Layer
This process chain is responsible to run the loads between source system and first layer in BW.
3 - Business Layer
This process chain is responsible to load the second and third layers from propagation layer.
4 - Master data
This process chain is responsible to load all the master data attributes in BW.
5 - Text & maintenance
This process chain is responsible to load all the master data texts in BW.
Loading frequency
Daily inside the daily process chain
Average performance & monitoring
Daily process chain is loaded in 2 hours with around 30k lines in DELTA mode for a total of 10M lines in cubes.
See below an extract of 1 month of monitoring
Key Figure | Estimation |
|---|---|
| ~ Average Process Chain Runtime | 90 to 120 minutes |
| ~ Average nb of rows loaded per load | Sales Order: Solvay 6K, Rhodia 2K Sales order deliveries: Solvay 40K, Rhodia 10K Sales order invoices: Solvay 9K, Rhodia 4K 1.200K records (all providers) |
| ~ Total nb of rows loaded (if full) | Data is stored since 2014 Propagation Layer - Solvay 20.000K, Rhodia 10.000K Business Layer - Solvay 15.000K, Rhodia 8.000K Reporting - Solvay 15.000K, Rhodia 8.000K Master data - Solvay 11.000K, Rhodia 5.000K |
| ~ Average Runtime for 10k lines | 60 minutes |
For details about application load monitoring, click in following link: Application Monitoring
Record Keeping
User defined that 3 full years stored is enough to be maintained in BW.
There is no automatic process to remove historical data, so any request about historical deletion should be done by user using Freshdesk ticket.
Modeling
Info areas
Master Data
Propagation Layer
Business Layer
Reporting Layer
Virtual Layer
Multi provider
Data Flow
Dimensions
Key figures
2 - MVSDTR02 - TR Vir: Shipment Events (Solvay & Rhodia)
Data Flow
Dimensions
Key figures
Main KPI calculations
Main functionalities
Main datasources based on SAP tables
- 2lis_11_V_SSL – Sales order delivery
Main dimensions for the data
- C_ITM_SD – Order Line
C_ROUTE – Route
- C_SHIPNU2 – Shipment Number
- C_DELITM2 – Delivery Item
- C_SHIPCD2 – Shipping conditions
- 0TRZONE – Transportation Zone
- C_GBR11
- C_GBR12
- C_GBR13
- C_GBR14
- C_GBR15
- C_GBR20
- C_GBR21
- C_CUSTSAL
Reporting
Calculated & Restricted key figures
| Name | Description | Formula |
Main queries
Queries used to load QV applications
Broadcast
- None
Maintenance
Known bugs
- Sometimes the unit conversion is not done in query due the unit is not mapped correctly in table UOMCMAT2 by material.
Recurring procedure
- When the process chain fails, the process type must be analyzed and repeated if possible.
- Sometimes a full load by period is required by user in order to syncronize all global sales data.
Planned Evolution
- The Global Sales is deployment phase and sometimes the GBU key user requests additional informations to be added in project.
Useful transactions to be used for checking data
Transaction | Description | Corresponding table | Comments |
|---|---|---|---|
| VT03N | Shipments | VTTK, VTTS | in ERP |
| VI03 | Shipment Costs | VFKK, VFKP | in ERP |
| VL03N | Deliveries | LIKP, LIPS | in ERP |
| VA03 | Sales Orders | VBAK, VBAP | in ERP |
| ME23N | Purchase Orders | EKKO, EKPO, EKBE | in ERP |
| RSUOM | Unit conversion | T005 | in BW |
| RSCUR | Currency conversion | TCURR | in BW |
https://wiki.solvay.com/display/TECHREP/BW+Authorizations?src=contextnavpagetreemode











































