Re-initialization of the Material Stocks/Movements cube (0IC_C03) with 2LIS_03_BF, 2LIS_03_BX and 2LIS_03_UM in BW 7.x
Introduction
Even though a lot of information is available with regard to setting up and initializing Material Stocks/Movements using the 2LIS_03_XX-datasources, I often found myself in the position that, for some reason, a re-initialization was required in a productive environment where the complete dataflow was already available. No need for information on how to install the business content or on how to check if the existing movement types are marked as ‘relevant to statistics’. What I needed was a step-by-step guide to make sure the stock information was available to the end-users as quickly as possible. That is why I decided to write this document: To explain the steps that have to be performed in order to successfully complete the re-initialization of the Material Stocks/Movements cube (0IC_C03) using the datasources 2LIS_03_BF, 2LIS_03_BX and 2LIS_03_UM.
Audience
This document explains how to re-initialize the Material Stocks/Movements in a productive environment using BI 7.x.
Table of Contents
Introduction
Audience
Table of Contents
1. Pre-requisites
2. Process Summary
2.1 Stock Initializations for Inventory Management (2LIS_03_BX)
2.2 Goods Movements From Inventory Management (2LIS_03_BF)
2.3 Revaluations (2LIS_03_UM)
2.4 The Marker update
3. Initialization: Preparation steps outside goods movements block time-window
3.1 Make sure to have sufficient authorization in the productive source system
3.2 Determine the time-window for re-initialization
3.3 Delete PSA-requests
3.4 Change the number range buffering for DIM ID’s
3.5 Determine the amount of historical data that is required by the business
4. Initialization: Preparation steps inside goods movements block time-window
4.1 Close the system
4.2 Stop the update program to the delta-queue.
4.3 Delete the existing queues
5. Initialization of the 2LIS_03_BX (Stock Initialization for Inventory Management)
6. Initialization of the 2LIS_03_BF (Goods Movements From Inventory Management)
7. Initialization of the 2LIS_03_UM (Revaluations)
8. Final check source system initialization
9. Extraction to BI: Preparation steps
9.1 Delete the contents of the Material Stocks/Movements (0IC_C03) cube
9.2 Delete index on the Material Stocks/Movements (0IC_C03) cube
9.3 Delete PSA-requests
10. Extraction to BI: Initialization 2LIS_03_BX (Opening Balance)
11. Extraction to BI: Initialization 2LIS_03_BF
12. Extraction to BI: Initialization 2LIS_03_UM
13. Extraction to BI: Post-processing steps
1. Pre-requisites
To successfully perform the steps that are described hereafter, it is required that the following (7.x) datasources are available and active:
- 2LIS_03_BX (Stock Initialization for Inventory Management) (Sap Help)
- 2LIS_03_BF (Goods Movements From Inventory Management) (Sap Help)
- 2LIS_03_UM (Revaluations) (Sap Help)
Furthermore, this document assumes that you have the 7.x business content installed with regard to DTP’s, transformations and the Material Stocks/Movements cube (0IC_C03).
2. Process Summary
It might be your first time, or you might have done it a long time ago. However, here is an explanation on the background of the three datasources just to refresh your memory.
2.1 Stock Initializations for Inventory Management (2LIS_03_BX)
The information contained in the stock initialization consists of a snap-shot of the current stock (see picture below). This information is generated in the source system by executing a specific transaction at a point in time where no material movements are taking place. When this data is loaded to BI, you would see only the stock positions for that particular point in time in any report. You would not see any (historical) goods movements because these are being generated using the 2LIS_03_BF (for quantities) and the 2LIS_03_UM (for values) datasources. The datasource 2LIS_03_BX is only used once.
2.2 Goods Movements From Inventory Management (2LIS_03_BF)
In order to see the various movements that have led to the stock positions from the 2LIS_03_BX load, you need to add these (historical) movements using the 2LIS_03_BF initialization. Similar to the 2LIS_03_BX, the initialization table for the goods movements is generated in the source system by executing a transaction that captures all the movements as of a user-defined date in the past. When the initial data load is executed in BI, this table is read and the non-cumulative values are added to the cube. Using this information, you would now be able to see yesterday’s stock positions as well by taking the information from the current snap-shot that is available through the 2LIS_03_BX data and deducting the goods movements that took place as of yesterday using the information from 2LIS_03_BF. Setting up the initialization table for the goods movements (2LIS_03_BF) will have to take place right after the initialization of the stock initialization (2LIS_03_BX) where no material movements are still allowed to preserve data consistency. Future goods movements will be picked up by the delta-load for this datasource. The delta-queue is filled by scheduling a job in the source system that transfers all the goods movements from the various tables in the source system to the delta-queue. The initial set-up table for the 2LIS_03_BF is no longer used.
2.3 Revaluations (2LIS_03_UM)
The initialization of the revaluations (2LIS_03_UM) is executed similar to the goods movements and follows the same principles.
After the initialization tables have been filled, material movements are allowed in the source system again. Any movements that take place after this point in time are captured in the delta-queue by means of job scheduling and can be transferred to BI with the next delta-load. In BI, the initialization tables are read by executing the initialization info-packages in BI. From that moment on, the initialization tables are no longer used (unless you want more historical data with regard to material movements that can be added to these tables and read to BI using the ‘full repair option’). The delta-load following the initialization-load in BI will read the delta queue.
2.4 The Marker update
Then there is this thing called “the marker”. The marker is used when the Material Stocks/Movements (0IC_C03) cube is being loaded and compressed. Remember that you start loading the cube with the initial stock status? You would then have to compress this first load using the marker update. Then you would load any historical goods movements that lead to the current stock (without updating the marker).With this information available, you would be able to see last month’s stock. This would be calculated by deducting all material movements that took place in the last month from the current stock (marker). Any future delta-loads would preferably be compressed using the marker update again. In this case, the current stock would always be available in the fastest way. This is because the marker is up-to-date and does not need to do any goods movement calculations anymore. In short, when I want to see today’s stock overview, the marker allows me to open a snap-shot of the current situation immediately. What would happen if I would not compress at all and do nothing about the marker update? Over time, the performance of the info-provider would deteriorate. The initial marker would still point to time X in the past, and as time passed by, it would lie further and further in the past and more goods movements would have taken place after X. Now if I would like to see today’s stock overview, the system would take point X in the past and add all the movements that have taken place afterwards until today to calculate today’s stock.
3. Initialization: Preparation steps outside goods movements block time-window
Since re-initializing the Material Stocks/Movements datasources in a productive environment requires that no goods movements are taking place, it is important that the time-window required for re-initialization is as short as possible. When well prepared, every task that can be executed outside the time-window will save time.
3.1 Make sure to have sufficient authorization in the productive source system
Too often does it happen that a dry-run in a sandbox or development system is successful but the re-initialization in production has to be postponed because, in the middle of the night, when the time-window was there, the person responsible for the re-initialization did not have sufficient authorization in the productive system.
3.2 Determine the time-window for re-initialization
Various options exist to determine the time-window for re-initialization in a productive environment. Overall, it is recommended to keep a one hour interval between the last goods movement posting and the execution of the actual re-initialization. This is because of the fact that some processes might not have finished yet and might trigger a goods movement after all.
Option 1: Create a time-window by closing the source system for all users
The first (and safest) option is to close the system for all users for a pre-defined time. Do not forget any EDI-interface users that might trigger a goods movement. And of course, make sure not to lock the users that will be involved in the re-initialization. This option requires collaboration with other functional teams and the business to make sure everybody is aware of the system not being available.
Option 2: Search for a time-window by analyzing the delta-queue update run
When a current extraction is already in place, you can use the job details of the program that transfers the goods movements to the delta-queue to determine a proper time window. However, this option requires the job to be scheduled every hour. If the job is scheduled only once a day, option 2 will not work for you. The following steps describe how to analyze the job log.
Step 1: Log on to the source system (R/3 or ECC) in which the initialization will take place.
Step 2: Execute transaction <LBWE>.
Step 3: Click <Job Control> for the logistics application “03 : Inventory Controlling”.
Step 4: Click <Job Overview>.
Step 5: Double-click the entries one by one to show the details of the jobs.
Step 6: Add the details of the jobs in Microsoft Excel (or any other spreadsheet you might use). Make sure to have data for at least two weeks to rely on.
With this information available, you can see at what hours zero LUW’s are being processed. Check to make sure that for every single day in your file zero LUW’s are being processed in the same time-window. If no time-window with zero LUW’s is consistently available, you will have to return to option 1.
In my case, when checking the job details for two consecutive weeks, I found that between 01:00 AM and 07:00 AM no material movements were taking place. As described in paragraph 5.2, a one hour safety limit should be taken into account between the last goods movement and the re-initialization. Thus, I would have to set the alarm to wake up at 02:00 AM to start the re-initialization.
3.3 Delete PSA-requests
Since you will be re-initializing the Material Stocks/Movements, you need to make sure that all the current existing PSA-entries in the 2LIS_03_BF, 2LIS_03_BX and 2LIS_03_UM datasources in BI are deleted. Even though you might need to repeat this step because between the preparation and the actual re-initialization another load might take place, it will still save you a lot of time if you only have to delete a single request instead of a couple of thousand requests from the PSA-tables during the time-window that you have available for re-initialization.
3.4 Change the number range buffering for DIM ID’s
The next task may be less obvious, but is still important. A while ago, when re-initializing the Material Stocks/Movements I felt happy about the fact that all went well; the initialization in the source system had finished successfully, the stock initialization (2LIS_03_BX) was available in the cube and I was just looking at the monitor to see the progress on the goods movements (2LIS_03_BF) datasource load to the cube. Unfortunately, it didn’t go. The job was running, no errors were showing in the system log, no short-dumps, all seemed okay. But no green requests. All requests remained yellow. The reason for this turned out to be the fact that no range buffering for DIM ID’s and SID’s was used. By default the database provides a SID (master-data) or DIM ID (cube) for every record that is loaded. If you buffer a range of these numbers so that not every single record retrieves its ID from the database, it might save you a lot of time.
The following steps describe how find the number ranges that are relevant for the Material Stocks/Movements cube (0IC_C03). After that, it is described how to enable the number range buffering.
Find the relevant number ranges:
Step 1: Log on to the BI-system.
Step 2: Execute transaction <SE37>, fill <RSD_CUBE_GET> and press <F8>.
Step 3: Enter the values as shown in the picture below and execute.
Step 4: Double-click the <E_T_DIME> to find the number ranges that are applicable to the Material Stocks/Movements cube (0IC_C03).
Step 5: Note down the values for the columns “Dimension” and “NOBJECT”. Remove the entry for the package dimension (0IC_C03P). This number range should not be buffered.
Buffer the relevant number ranges:
Step 6: Execute transaction <SNRO>.
Step 7: Fill out the first NOBJECT value from the list and click <Change>.
Step 8: Go to the tab <Customizing> and change the buffering from “No Buffering” to “Main Memory Buffering”.
Step 9: Save the changes.
Step 10: Repeat step 7 to 9 for the remaining buffer ranges (NOBJECT values).
3.5 Determine the amount of historical data that is required by the business
In some cases, the business requires much historical information on goods movement due to some KPI-reporting. In other cases, the business is only looking at current stock levels. It is a good thing to determine the amount of historical goods movements that should be initialized since the collection of this data takes more time when more historical information is required. Being backed-up by an official decision prior to starting the load will avoid nasty surprises afterwards.
4. Initialization: Preparation steps inside goods movements block time-window
The following steps describe how to re-initialize the datasources in the source system inside the goods movements blocked time-window.
4.1 Close the system
Step 1: If you make use of the option to close the source system for all users, do this now. If you have used the other option, go to step 2.
Step 2: If possible, wait for an hour to make sure the system has finished any post-processing of jobs that might lead to a goods movement.
4.2 Stop the update program to the delta-queue.
Step 3: Execute transaction <LBWE>
Step 4: Click <Job Control> for the logistics application “03 : Inventory Controlling”.
Step 4: Click <Job Overview> and copy the name of the job (which is most likely LIS-BW-VB_APPLICATION_03_101).
Step 5: Execute transaction <SM37> and find the job that is scheduled for the update of the queue.
Step 6: Delete the job.
4.3 Delete the existing queue’s
Step 7: Execute transaction <SMQ1> and delete the entry for “MCEX03”.
Step 8: Execute transaction <RSA7> and delete the 2LIS_03_XX-delta queues.
Step 9: Execute transaction <LBWG> and delete the setup data for application ’03’.
Result: The system is now ready for the re-initialization of the Material Stocks/Movements.
Important: Continuously check that no entry for MCEX03 is created using transaction <SMQ1> during the initialization. This would mean that goods movements have taken place and this should not be possible.
5. Initialization of the 2LIS_03_BX (Stock Initialization for Inventory Management)
Step 10: Execute transaction <MCNB> and fill out the various fields. Make sure the termination data is in the future.
Note: You can make restrictions to materials or plant, providing not all balances are relevant. This provides also the possibility to schedule the report several times. In such cases the data is added to the setup table MC03BX0SETUP.This run is not very time-intensive because the system does not read the individual documents from the very large MSEG table. Instead, it accesses the substantially smaller tables MARC, MARD and so on. Only if you use the option “Zero stock to be transferred” runtime increases rapidly. So use this option only if really necessary (see OSS notes 655798 and 728360 for this).
Step 11: Press <F9> to schedule the job in the background.
Step 12: Execute transaction <SM37> to check the status of job <RMCBINIT_BW>. Wait until status ‘complete’.
6. Initialization of the 2LIS_03_BF (Goods Movements From Inventory Management)
Step 13: Execute transaction <OLI1BW> and fill out the various fields. Make sure the end date is set to 31.12.2099. Also, make sure the termination data is in the future.
NOTE: This is where you can make use of the information that was gathered from the business in paragraph 5.5. Fill out the start-date for posting date according to this value. (Make sure it is still feasible. Collecting various years of goods movement is most likely not going to succeed in a single run.)
Step 14: Execute transaction <SM37> to check the status of the job <RMCBNEUA>. Wait until status ‘complete’.
NOTE: If this job fails for some reason, you do not need to use transaction <LBWG> to empty the complete set up data for both 2LIS_03_BX and 2LIS_03_BF and start all over again. You can empty the records from the table MC03BF0SETUP using transaction <se11><Utilities><Database utility> as shown in the picture below and start with step 13 again (see picture below).
7. Initialization of the 2LIS_03_UM (Revaluations)
Step 15: Execute transaction <OLIZBW> and fill out the various fields. Make sure the end date is set to 31.12.2099. Also, make sure the termination data is in the future. You will have to execute the transaction once for every company code.
NOTE: You can run the initialization of the 2LIS_03_BF and the 2LIS_03_UM in parallel.
Step 16: Execute transaction <SM37> to check the status of the jobs <RMCBNERP>. Wait until status ‘complete’.
8. Final check source system initialization
Step 17: Execute transaction <SMQ1> to make sure that no queue exists for “MCEX03” and thus no entries have been posted during your initialization.
If everything has been successful, you have finished the setup and the system is allowed to process goods movements again.
9. Extraction to BI: Preparation steps
The following steps describe how te prepare the BI-system for the initial loads of the various datasources.
9.1 Delete the contents of the Material Stocks/Movements (0IC_C03) cube
Step 1: Log on to the BI-system.
Step 2: Execute transaction <RSA11> and locate the Material Stocks/Movements (0IC_C03) cube.
Step 3: Right-click on the cube and select <Delete data>.
9.2 Delete index on the Material Stocks/Movements (0IC_C03) cube
Step 4: Right-click on the cube and select the tab <Performance>.
Step 5: Click <Delete DB Indexes (Now)>.
9.3 Delete PSA-requests
Since you will be re-initializing the Material Stocks/Movements, you need to make sure that all the current existing PSA-entries in the 2LIS_03_BF, 2LIS_03_BX and 2LIS_03_UM datasources in BI are deleted.
10. Extraction to BI: Initialization 2LIS_03_BX (Opening Balance)
Step 6: Execute an info-package for datasource 2LIS_03_BX for the initialization of the stock positions. The initialization reads table “MC03BX0SETUP”.
Step 7: Execute the Initialization DTP for the datasource 2LIS_03_BX. Make sure to use the “Initial Non-Cumulative for Non-Cumulative”-Extraction Mode.
Step 8: Compress (collapse) the request without using the “No Marker Update” (checkbox is empty).
11. Extraction to BI: Initialization 2LIS_03_BF
Step 9: Execute an info-package for datasource 2LIS_03_BF for the initialization of the stock movements. The initialization reads table “MC03BF0SETUP”.
Step 10: Execute the Initialization DTP for the datasource 2LIS_03_BF.
Step 11: Compress (collapse) the request using the “No Marker Update” (checkbox is checked).
12. Extraction to BI: Initialization 2LIS_03_UM
Step 12: Execute an info-package for datasource 2LIS_03_UM for the initialization of the stock revaluations.
Step 13: Execute the Initialization DTP for the datasource 2LIS_03_UM.
Step 14: Compress (collapse) the request using the “No Marker Update” (checkbox is checked).
13. Extraction to BI: Post-processing steps
Step 15: Schedule the update again which was stopped in paragraph 4.2 using transaction <LBWE> in the source system.
Step 16: Undo any changes to the buffer-ranges that was done in paragraph 3.4 using transaction <SNRO> in the BI system.
Step 17: Clear the marker <No Marker Update> in the tab “collapse” for the cube 0IC_C03. This check-box is not used anymore from now on.
Step 18: Schedule the delta-packages for the datasources 2LIS_03_BF and 2LIS_03_UM.
Dear Edo,
Nice document for those who are struggling with Inventory Cubes loading or new for the Inventory.
Good work.
Regards,
Sreedhar
super! very detailed explanation of the steps required
Thank you.
2lis extractors - is nightmare.
You must to stop ERP if you want to fill setup. It's sad.
For many industries ERP-system working 24x7, and you haven't any tech window for this.
This is a brilliant doc! Bookmarking it for when I need to work on Inventory.
Hi Edo,
This is a very useful document for a very common issue. Good work and thanks for sharing.
Cheers, Martijn
It is very helpful Blog i bookmarked it for the future purpose, any consultant may face this situation
Hoi Edo,
really good and useful blog. Especially when handling LO Cockpit Initialization not regular.
Thanks for sharing and Regards,
Daniel
Additionally the Blog of Ranjit can help:
http://scn.sap.com/people/ranjit.rout/blog/2009/06/14/10-important-points-to-consider-while-working-with-inventory-management
Very thorough and detailed information, thank you!
Excellent blog
Very usefull n Gr8 blog - very informative.
great explanation Edo, it will help people who are struggling with Inventory.
very useful, wonderful explanation!
Hi Edo,
What if the material stock has been done? Do we still need to do the init?
Thx,
HK
Dear Katpadi,
I am not sure if I understand your question. Could you perhaps clarify a bit more?
Kind regards,
Edo Meinema
Hi Edo,
I have a question,
in your blog, in Step 15: Schedule the update again which was stopped in paragraph 4.2 using transaction <LBWE> in the source system.
How can we schedule it back? in SM36 or directly schedule from job control, if from job control, the user shuold be only me, but for system i think it's better to use a background user,
B.R.
Lee Do
Hi Lee,
I would suggest scheduling it from job control. You can change the user that executed the job afterwards. (http://scn.sap.com/thread/3321318)
Kind regards,
Edo Meinema
Great presenation with snaps. More useful and helpful doc on inventory extraction. Thanks for making and sharing useful article.
Thanks
great work.....
I like that you mentioned the piece where you check on what times your ECC creates LUW's that is a help for those who don't understand you can't build it up during certain times 😉
Martin
Nice Info.Thanks for sharing and.
Regards,
AL
Well done, thanks a lot for sharing Edo !!
Great Information.
I just want to add two points. You need to make sure that following two settings have been performed on ECC Side before filling setup tables.
If Industry and BW/NDI is not set then you may end up with null values in TransferProcessKey column and Blank(NULL) key figures at cube level.
STEP1:
Select relevant industry according to your scenario.
TCode: SBIW
STEP2:
If its new system and its first time you are loading data extraction
1. Maintain NDI and BW as Active. It is mandatory.
Hello Gurus,
I have a question. Is it possible to re-inicializate several times the 2lis_03_bx? We do have 2 proyects, the first one is almost on go-live. This one will use a certain group of materials, however in 6 months, another project will go live with another group of materials, these materials are new ones, totally different to the first project materials. If I had to initialize new materials, what should I do?
I greatly appreciate your answer.
Regards,
John
Very useful document
Thanks
Ruk
This is very important for Inventory loads.
Great document!
Hi Everyone,
I have a problem to perfom Step 5:
Step 5: Note down the values for the columns "Dimension" and "NOBJECT". Remove the entry for the package dimension (0IC_C03P). This number range should not be buffered.
On that step i have to remove the dimension 0IC_C03P - NOBJECT ->BID0001426.
When I start the FM: RSD_CUBE_GET and go to E_T_DIME i see all values but I can`t remove noone of them.
The FM works at Display Mode ONLY.
Which is the right way to perfom step 5?
Well explained! Thank you for shared such a nice article.
Best Regards
Venkat...