<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
  <channel>
    <atom:link href="http://www.biportal.org/Content/RSS/blog.ashx?pageId=90410" rel="self" type="application/rss+xml" />
    <title>BI Portal SAP BW/BI Blog</title>
    <link>http://www.biportal.org/Default.aspx?pageId=90410</link>
    <description>BI Portal blog posts</description>
    <dc:creator>BI Portal</dc:creator>
    <generator>Wild Apricot web tools for non-profits</generator>
    <language>en</language>
    <pubDate>Sun, 05 Sep 2010 14:48:42 GMT</pubDate>
    <lastBuildDate>Sun, 05 Sep 2010 14:48:42 GMT</lastBuildDate>
    <item>
      <pubDate>Mon, 19 Jul 2010 12:49:23 GMT</pubDate>
      <title>BI Frontends for Mobile devices</title>
      <description>&lt;P&gt;In &lt;A href="http://en.sap.info/apps-ipad-citrix-office/35854" target=_blank&gt;the article by Frank Völkel&lt;/A&gt; here is a great insight on how mobile device BI frontends are evolving&lt;/P&gt;
&lt;P&gt;&lt;A href="http://en.sap.info/apps-ipad-citrix-office/35854" target=_blank&gt;&lt;IMG height=278 alt="" src="/Resources/Pictures/Best_iPad_Apps.jpeg" width=476 border=0&gt;&lt;/A&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=386121</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=386121</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Fri, 18 Jun 2010 14:47:29 GMT</pubDate>
      <title>Update Generic Extractor Parameters Directly</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Sometimes we face a need to adjust generic extractor parameters directly in the production environment. For instance Safety Interval Upper Limit can be technically adjusted in the source development system and then transported to all environments including production. However, when the generic extractor is used in production on a regular basis and if the table it is based on is constantly updated it becomes difficult to re-initialize the relevant datasource without a complete stop of the Production environment. In the case like this we need to have an option of adjusting extractor’s parameters directly without its reactivation. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Case Description &lt;/H3&gt;
&lt;P&gt;If the Safety Interval Upper Limit has to be increased, for instance, from 30 minutes to 60 minutes, according to the standard procedure we have to make the change in the Development environment (Transaction Code &lt;STRONG&gt;RSO2&lt;/STRONG&gt;), transport it all the way to production and re-initialize the delta process. &lt;/P&gt;
&lt;P&gt;Safety Interval Upper Limit may need to be increased when processing vast data volumes, specifically in cases when 30 minutes is not a sufficient time gap between the table record creation and the Commit performed in the database. When this setting is not high enough we may be losing delta records during extractions. &lt;/P&gt;
&lt;P&gt;However, re-initialization is not a good option in cases when the extractor’s underlying table is updated permanently with new entries. In such scenarios we risk either losing data or receiving duplicates. &lt;/P&gt;
&lt;P&gt;Of course, if business allows stopping Production environment for some time, we may be able transporting the change using a standard process. For that we need to do the following steps in the production source system when table update processes are inactive: &lt;/P&gt;
&lt;P&gt;1. Run appropriate delta extraction to empty the delta queue. &lt;/P&gt;
&lt;P&gt;2. Transport the extractor change.&lt;/P&gt;
&lt;P&gt;3. Empty the extractor’s underlying table. &lt;/P&gt;
&lt;P&gt;4. Re-initialize corresponding datasource. &lt;/P&gt;
&lt;P&gt;5. Resume production environment processes. &lt;/P&gt;
&lt;P&gt;However, in some production environments interruptions are not allowed even for a few minutes. &lt;/P&gt;
&lt;H3&gt;Solution to Apply in Production &lt;/H3&gt;
&lt;P&gt;Instead you may correct the safety intervals directly in production as follows: &lt;/P&gt;
&lt;P&gt;1. Use transaction SE16 to maintain the ROOSOURCE table. &lt;/P&gt;
&lt;P&gt;2. Select the entry with the relevant DataSource. &lt;/P&gt;
&lt;P&gt;3. Set the DELTASAFE2 field to 3600 instead of 1800. &lt;/P&gt;
&lt;P&gt;This procedure allows adjusting extractor parameters without interrupting transactional production environment. &lt;/P&gt;&lt;STRONG&gt;Please Note:&lt;/STRONG&gt; Not every parameter of an extractor can be adjusted directly like this without harming existing delta processes.</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=360773</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=360773</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Wed, 26 May 2010 16:49:42 GMT</pubDate>
      <title>A new version of SAP BI is expected?</title>
      <description>&lt;P&gt;Just a week ago in Sapphire SAP announced a new technology that may replace existing SAP BW with a more performing "in-memory database appliances". In fact boosted performance&amp;nbsp;becomes possible due to enhacing database&amp;nbsp;servers with Terabytes of RAM. If all&amp;nbsp;information is stored in the operating memory&amp;nbsp;as opposed to hard disks&amp;nbsp;the speed of data processing and query run time increases&amp;nbsp;dramatically (hundreds of times). And perhaps we should expect new BI Products from SAP?&lt;/P&gt;
&lt;P&gt;Here are a few links to the announcement:&amp;nbsp;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.pcworld.com/article/196664/sap_discusses_inmemory_appliance_plans.html?tk=rss_news" target=_blank&gt;http://www.pcworld.com/article/196664/sap_discusses_inmemory_appliance_plans.html?tk=rss_news&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.sap.com/about/newsroom/press-releases/press.epx?pressid=13293" target=_blank&gt;http://www.sap.com/about/newsroom/press-releases/press.epx?pressid=13293&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=349787</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=349787</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Fri, 07 May 2010 11:22:27 GMT</pubDate>
      <title>Select Data in DTP Dynamically</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Similarly to selecting parameters dynamically in the infopackage, as discussed in the previous post, we may need to select parameters dynamically in a DTP. In the post below I will review an example of how to make selections dynamically in the DTP. A practical application of this approach can be selection of records from a DSO by date range, say we want to select all records with Date From lower than [Today + 30 days] and Date To greater than [Today - 30 days]. &lt;/P&gt;
&lt;P&gt;In the Filter selections for the DTP we have to click on the “&lt;STRONG&gt;Routine create&lt;/STRONG&gt;” button for the infoobject we want to use: &lt;/P&gt;
&lt;P&gt;&lt;IMG title="" height=425 alt="" src="/Resources/Pictures/DTPimage002.jpg" width=597 border=0&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;As DTP selections are stored as a range we have to populate fields of the table &lt;STRONG&gt;l_t_range&lt;/STRONG&gt; with appropriate selection parameters. &lt;/P&gt;
&lt;P&gt;For the object “&lt;STRONG&gt;Date From&lt;/STRONG&gt;” the selection routine may look as follows (we select all records with the Date From before [Today + 30 days]): &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;form compute_RT_DATEF&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;tables l_t_range structure rssdlrange&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;using i_r_request type ref to IF_RSBK_REQUEST_ADMINTAB_VIEW&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;i_fieldnm type RSFIELDNM&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;changing p_subrc like sy-subrc.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;*&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Insert source code to current selection field&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;*$*$ begin of routine - insert your code only below this line&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;*-*&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;data: l_idx like sy-tabix.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;read table l_t_range with key&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;fieldname = 'RT_DATEF'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_idx = sy-tabix.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;*....&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;DATA: cd TYPE D.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;cd = sy-datum.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;cd = cd + 30.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_t_range-fieldname = 'RT_DATEF'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_t_range-sign = 'I'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_t_range-option = 'LE'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;l_t_range-low = cd.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;if l_idx &amp;lt;&amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;modify l_t_range index l_idx.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;else.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;append l_t_range.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;endif.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;p_subrc = 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;*$*$ end of routine - insert your code only before this line&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;*-*&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;endform.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=337087</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=337087</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Fri, 12 Mar 2010 10:22:54 GMT</pubDate>
      <title>Set Extractor Parameters Dynamically</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In some scenarios when we launch data extraction from BW we may want to have extractor selection parameters to be defined dynamically. For example, for a certain extraction we may want to select a particular Period and Versions based on data currently available in the source system. In the post below I will review an example of how to organize stock planning data load based on Period and Version submitted from the source system. I will describe a model for loading transactional data to BW and specify configuration required for automating data loads based on data availability in the source. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Business Task Description &lt;/H3&gt;
&lt;P&gt;Several times per month business users generate stock planning versions in the source system for certain stock categories. This information can be gathered via a generic extractor with selection parameters (Period, Version). Unfortunately, the extractor is working in a FULL mode only and BW does not know when to extract data and which version to extract. On the other hand, users maintain a table in the source system (ZCONTROL) where they specify parameters for new planning versions that have been generated. Therefore by reading entries in this table we can identify what needs to be loaded in BW. &lt;/P&gt;
&lt;P&gt;Our goal is to build a solution in SAP BW that would automate loads of Stock Planning Versions and will eliminate manual involvement. &lt;/P&gt;
&lt;H3&gt;Extract Selection Parameters &lt;/H3&gt;
&lt;P&gt;As a first step we want to load Stock version selection parameters to BW. This is possible to do in a delta mode, as there is a “Modified On” (AEDAT) field available in the table ZCONTROL. &lt;/P&gt;
&lt;P&gt;We have to create a generic extractor &lt;STRONG&gt;ZAG_CONTR&lt;/STRONG&gt; (Transaction Code: &lt;STRONG&gt;RSO2&lt;/STRONG&gt;) based on the table ZCONTROL. In the Generic Delta screen we specify field AEDAT as Delta specific field, and check “Calendar Day” in the selections: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image002.jpg alt=image002.jpg src="/Content/Pictures/Picture.ashx?PicId=251215" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;After the replication of datasources in BW our newly created datasource (&lt;STRONG&gt;ZAG_CONTR&lt;/STRONG&gt;) can be connected to a DSO (&lt;STRONG&gt;O_SELP&lt;/STRONG&gt;). I suggest having three fields in this DSO:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Period&lt;/LI&gt;
&lt;LI&gt;Version&lt;/LI&gt;
&lt;LI&gt;Calendar Day – filled in the transformation with the date of the load. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The following data flow can be used for this model: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image004.jpg alt=image004.jpg src="/Content/Pictures/Picture.ashx?PicId=251216&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Load Stock Planning Versions with Dynamic Selections &lt;/H3&gt;
&lt;P&gt;In the next step we have to select data in the Transactional datasource (Z_STVERS) based on the delta records received in the “Selection Parameters” DSO. This can be done by comparing the value of the Calendar Day field to the Current date. &lt;/P&gt;
&lt;P&gt;We have to specify ABAP routines in the Infopackage Data Selection screen. This should be done both for Period and Version selection objects: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image006.jpg alt=image006.jpg src="/Content/Pictures/Picture.ashx?PicId=251217" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;I suggest using the following code in the &lt;STRONG&gt;Period selection&lt;/STRONG&gt; ABAP Routine: &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;DATA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;:&amp;nbsp;selt&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;STANDARD&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff size=2&gt;OF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00.&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;FIELD&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;-SYMBOLS:&amp;nbsp;&amp;lt;selt&amp;gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;INTO&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;selt&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;CALDAY&amp;nbsp;=&amp;nbsp;sy-datum.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;DATA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;:&amp;nbsp;cper&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/OIZPERD.&amp;nbsp;cper&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT color=#4da619&gt;'&amp;nbsp;'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;IF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;sy-subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;p_subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;LOOP&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;AT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;selt&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;ASSIGNING&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;lt;selt&amp;gt;.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s311&gt;&lt;SPAN&gt;&lt;EM&gt;&lt;FONT face="Courier New" color=#808080&gt;*&amp;nbsp;Fill&amp;nbsp;Period&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;read&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;table&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_t_range&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;with&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff size=2&gt;key&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldname&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#4da619 size=2&gt;'POSTING_DATE'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l_idx&amp;nbsp;=&amp;nbsp;sy-tabix.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l_t_range-LOW&amp;nbsp;=&amp;nbsp;&amp;lt;selt&amp;gt;-/BIC/ZPERD.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;modify&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_t_range&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;index&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_idx.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;IF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;cper&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT color=#4da619&gt;'&amp;nbsp;'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cper&amp;nbsp;=&amp;nbsp;&amp;lt;selt&amp;gt;-/BIC/ZPERD.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ELSEIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;cper&amp;nbsp;&amp;lt;&amp;gt;&amp;nbsp;&amp;lt;selt&amp;gt;-/BIC/ZPERD.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;p_subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;2&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;exit&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ENDIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ENDLOOP&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ELSE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;p_subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;1&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ENDIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;/SPAN&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the code above we check if there are two different periods arriving with Delta from the Control table. If this is the case we identify it as an error and stop further processing. This is done because according to business rules during the same day we can get multiple Stock Plan versions for the same Period, not for multiple periods. &lt;/P&gt;
&lt;P&gt;For the &lt;STRONG&gt;Version selection&lt;/STRONG&gt; I suggest applying the following ABAP code: &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;DATA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;:&amp;nbsp;selt&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;STANDARD&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff size=2&gt;OF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00.&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;FIELD&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;-SYMBOLS:&amp;nbsp;&amp;lt;selt&amp;gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;SELECT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;*&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;FROM&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;/BIC/AO_SELP00&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;INTO&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;selt&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;WHERE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;CALDAY&amp;nbsp;=&amp;nbsp;sy-datum.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;DATA&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;:&amp;nbsp;mv&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TYPE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;C&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&amp;nbsp;mv&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT color=#4da619&gt;'n'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;IF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;sy-subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;LOOP&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;AT&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;selt&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;ASSIGNING&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;lt;selt&amp;gt;.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s311&gt;&lt;SPAN&gt;&lt;EM&gt;&lt;FONT face="Courier New" color=#808080&gt;*&amp;nbsp;Fill&amp;nbsp;version&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;read&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;table&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_t_range&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;with&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff size=2&gt;key&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;fieldname&amp;nbsp;=&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#4da619 size=2&gt;'VERSION'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l_idx&amp;nbsp;=&amp;nbsp;sy-tabix.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;l_t_range-LOW&amp;nbsp;=&amp;nbsp;&amp;lt;selt&amp;gt;-/BIC/ZVERS.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;IF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;mv&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT color=#4da619&gt;'n'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;modify&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_t_range&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;index&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_idx.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;mv&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#4da619&gt;'y'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ELSE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;append&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;l_t_range.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ENDIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ENDLOOP&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;p_subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#3399ff&gt;0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ELSE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;p_subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT color=#3399ff&gt;1&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN&gt; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;ENDIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt; &lt;/P&gt;
&lt;P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;The dynamically generated output for the infopackage selections can look as follows: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image008.jpg alt=image008.jpg src="/Content/Pictures/Picture.ashx?PicId=251218" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Entire process automation will be done by running DELTA loads for “Selection Parameters” DSO daily, and subsequently running a FULL extraction of the stock planned versions (extractor Z_STVERS) with the dynamic parameter selection as described above. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=307395</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=307395</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Fri, 18 Dec 2009 12:13:47 GMT</pubDate>
      <title>How to Implement Query based Authorizations</title>
      <description>&lt;P&gt;Some end user queries may require complex authorizations to be implemented based on user hierarchy tables defined in the source system. Let us take a case where we have a group of end users that do not have rights to modify queries. They should be able to run a set of queries and see results only relevant to their profiles. If user access profiles are not maintained in the source system using hierarchies it is challenging to set up proper BI Authorizations without involving substantial manual effort. This is especially true if these profiles change frequently and differ from query to query. In the post below I will review a scenario where we set up Query authorizations (filters) based on product categories assigned to users and groups of users in the source system. I will describe ways on how to download and store authorization definitions in BW, as well as set up queries that use them. &lt;/P&gt;
&lt;P&gt;To read full post &lt;A href="/Query_based_auth"&gt;click here&lt;/A&gt;.&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=258466</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=258466</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Thu, 19 Nov 2009 15:02:31 GMT</pubDate>
      <title>Using BOM for Vendor Split</title>
      <description>&lt;P&gt;Bill of Materials can play a crucial role in identifying relevant vendors for articles sold in retail. Let us imagine we are selling a product that is assembled or produced in the shop or in the warehouse. A typical example can be steak sold in a supermarket. It is obvious a steak is not purchased from vendors in the packaging it is sold. From a technical point of view it may be challenging assigning steak sales to vendors. To solve this we have to use Bill Of Materials (BOM). In the post below I will give examples how BOM for product articles can be extracted from SAP Retail and how it can be used in the vendor split logic for Vendor P&amp;amp;L reporting. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Vendor Split for Fresh Food &lt;/H3&gt;
&lt;P&gt;There are numerous ways for assigning vendor codes to sales and stock movements. When we want to construct a Profit &amp;amp; Loss Statement by vendor we have to have business logic on how to allocate sales by vendor. For example we may want to use the following logic for fresh food products: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Look up for purchases for the article during last 2 months&amp;nbsp; 
&lt;LI&gt;If not found look up all parent articles in BOM&amp;nbsp; 
&lt;LI&gt;Look up for purchases for all parent articles during last 2 months 
&lt;LI&gt;Look up for purchases for the article during last 3 months&amp;nbsp; 
&lt;LI&gt;&amp;nbsp;…&amp;nbsp; 
&lt;LI&gt;Look up for purchases for the article during last 12 months&amp;nbsp; 
&lt;LI&gt;If not found look up for purchases for all parent articles during last 12 months&amp;nbsp; 
&lt;LI&gt;If no purchases found apply Main vendor &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Here is a data flow example where BOM may be used in the vendor split logic: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image001.jpg alt=image001.jpg src="/Content/Pictures/Picture.ashx?PicId=196432" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Extract BOM from Retail &lt;/H3&gt;
&lt;P&gt;Bill of Material is stored in three tables in SAP Retail: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;MAST&amp;nbsp; 
&lt;LI&gt;STAS&amp;nbsp; 
&lt;LI&gt;STPO &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;We can design a database view (Transaction SE11) where these three tables are linked. The link between MAST &amp;amp; STAS: stlnr+stlal; the link between STAS &amp;amp; STPO : stlty+stlnr+stlkn. If we want to extract BOM for articles only we have to apply filter: STPO-STLTY = ‘M’. &lt;/P&gt;
&lt;P&gt;The view may have the following fields (columns): &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;MATNR CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;18&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Article Number&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;IDNRK&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;18&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BOM component&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;MANDT CLNT&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Client&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;WERKS CHAR&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;4&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Site&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STLAN&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BOM Usage&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STLNR&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;8&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Bill of material&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STLAL&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Alternative BOM&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STLTY&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;CHAR&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BOM category&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STLKN&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;NUMC&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;8&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;BOM item node number&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;STPOZ&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;NUMC&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;8&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;Internal counter&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;P&gt;It is a matter of just a few button clicks for designing a generic extractor based on the view defined above (Transaction RSO2). Selection fields for the extractor can be Article Number and BOM component. &lt;/P&gt;
&lt;P&gt;Masterdata tables used in the view usually contain a few hundred thousand records or less, therefore running full load for the complete BOM should not pose performance issues. &lt;/P&gt;
&lt;H3&gt;Apply BOM in Vendor Split &lt;/H3&gt;
&lt;P&gt;We have to store article BOM in BW in order to access it from a transformation. I suggest using a DSO with two key fields: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Article Parent 
&lt;LI&gt;Article Child &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;With this we can identify parent articles for a child and apply vendor split for children based on parent article purchases. &lt;/P&gt;
&lt;P&gt;We can use a full load to the DSO containing BOM: O_ARTBOM. Therefore, BOM relationships can be used in other transformations containing vendor split logic. &lt;/P&gt;
&lt;P&gt;Below is an ABAP code example in the start routine of a transformation connecting source and the “P&amp;amp;L by vendor” DSO: &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;REFRESH et_target.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;LOOP AT SOURCE_PACKAGE ASSIGNING &amp;lt;ls&amp;gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;REFRESH vspl.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN&gt;&lt;FONT size=2&gt;&lt;FONT face=Arial&gt;…&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;READ TABLE vspl_all WITH TABLE KEY MATERIAL =&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/CHARTICLE&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CALMONTH = pto TRANSPORTING NO FIELDS.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;READ TABLE vspl_all WITH TABLE KEY MATERIAL =&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/CHARTICLE&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CALMONTH = pfr TRANSPORTING NO FIELDS.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;*&lt;SPAN&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;--- Find last period with purchases for this product &amp;amp; BOM&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;DATA: tmon TYPE n length 3. tmon = '11'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;TYPES: t_bom TYPE /BIC/AO_ARTBOM00, tsbom TYPE STANDARD TABLE OF t_bom.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;FIELD-SYMBOLS: &amp;lt;bom&amp;gt; TYPE t_bom.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;DATA : tab_bom TYPE tsbom, tb2 TYPE tsbom.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* --- If purchases not found Build list of articles from BOM&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT * FROM /BIC/AO_ARTBOM00 INTO TABLE tab_bom&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE MATERIAL = &amp;lt;ls&amp;gt;-/BIC/CHARTICLE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LOOP AT tab_bom ASSIGNING &amp;lt;bom&amp;gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT * FROM /BIC/AO_ARTBOM00 INTO TABLE tb2&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE MATERIAL = &amp;lt;bom&amp;gt;-/BIC/CHARTICLE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0. APPEND LINES OF tb2 TO tab_bom. ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;found_vs = 'm'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHILE ( found_vs = 'n' OR found_vs = 'm' ) AND tmon &amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF found_vs &amp;lt;&amp;gt; 'm'. " If there is BOM&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT * FROM /BIC/AO_VENSPL00&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;INTO CORRESPONDING FIELDS OF TABLE vspl&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FOR ALL ENTRIES IN tab_bom WHERE&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MATERIAL = tab_bom-/BIC/CHARTICLE AND&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CALMONTH &amp;gt;= pfr AND CALMONTH &amp;lt;= pto.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0. found_vs = 'b'. ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF found_vs &amp;lt;&amp;gt; 'b'. " Check for original article&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;pfr = pfr - 1.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;IF pfr+4(2) = '00'. pfr = pfr(4) - 1.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CONCATENATE pfr+2(4) '12' INTO pfr.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;READ TABLE vspl_all WITH TABLE KEY MATERIAL =&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/CHARTICLE&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;CALMONTH = pfr TRANSPORTING NO FIELDS.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0. found_vs = 'y'. ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;tmon = tmon - 1.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDWHILE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;found_vs = 'y'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;…&lt;/SPAN&gt; &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* Select all relevant purchases for vendor split&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF found_vs = 'n' OR found_vs = 'y'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LOOP AT vspl_all ASSIGNING &amp;lt;vs&amp;gt; WHERE MATERIAL =&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/CHARTICLE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF &amp;lt;vs&amp;gt;-CALMONTH &amp;gt;= pfr AND &amp;lt;vs&amp;gt;-CALMONTH &amp;lt;= pto.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;APPEND &amp;lt;vs&amp;gt; TO vspl.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;found_vs = 'y'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;…&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF found_vs = 'y' OR found_vs = 'b'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* Calculate total article purchased AND Group by vendor&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;tot = vtot = 0. curv = 'uno'. REFRESH vs_comp.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SORT vspl BY VENDOR ASCENDING.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LOOP AT vspl INTO cvl.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF cvl-VENDOR &amp;lt;&amp;gt; curv AND curv &amp;lt;&amp;gt; 'uno'.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;lastv-/BIC/KFQTRCUB = vtot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;APPEND lastv TO vs_comp.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;vtot = 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;lastv = cvl.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;curv = cvl-VENDOR.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;vtot = vtot + cvl-/BIC/KFQTRCUB.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;tot = tot + cvl-/BIC/KFQTRCUB.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;lastv-/BIC/KFQTRCUB = vtot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;APPEND lastv TO vs_comp.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* Distribute value in proportion to Qty purchased&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;DATA: t1 TYPE /BIC/OIKFVALSTCK, t2 TYPE /BIC/OIKFVALSTQ.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;t1 = &amp;lt;ls&amp;gt;-/BIC/KFVALSTCK.&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;t2 = &amp;lt;ls&amp;gt;-/BIC/KFVALSTQ.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LOOP AT vs_comp ASSIGNING &amp;lt;vs&amp;gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-VENDOR = &amp;lt;vs&amp;gt;-VENDOR.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF tot &amp;lt;&amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/KFVALSTCK = t1 * &amp;lt;vs&amp;gt;-/BIC/KFQTRCUB / tot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt;-/BIC/KFVALSTQ = t2 * &amp;lt;vs&amp;gt;-/BIC/KFQTRCUB / tot.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;APPEND &amp;lt;ls&amp;gt; TO et_target.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN class=l1s311&gt;&lt;SPAN&gt;&lt;EM&gt;&lt;FONT face="Courier New" color=#808080 size=2&gt;*&amp;nbsp;If&amp;nbsp;no&amp;nbsp;relevant&amp;nbsp;articles&amp;nbsp;purchased&amp;nbsp;assign&amp;nbsp;main&amp;nbsp;vendor&lt;/FONT&gt;&lt;/EM&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;FONT size=2&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;READ&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;art&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;WITH&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TABLE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff size=2&gt;KEY&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;&lt;FONT size=2&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;/BIC/CHARTICLE&amp;nbsp;=&amp;nbsp;&amp;lt;ls&amp;gt;-/BIC/CHARTICLE&amp;nbsp;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff size=2&gt;ASSIGNING&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;lt;art&amp;gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;IF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;sy-subrc&amp;nbsp;=&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s321&gt;&lt;SPAN&gt;&lt;FONT color=#3399ff&gt;0&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&amp;nbsp;&amp;lt;ls&amp;gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;VENDOR&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt; =&amp;nbsp;&amp;lt;art&amp;gt;-vendor.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT face="Courier New" color=#0000ff&gt;ELSE&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&amp;nbsp;&amp;lt;ls&amp;gt;-&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;VENDOR&lt;/SPAN&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt; =&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s331&gt;&lt;SPAN&gt;&lt;FONT color=#4da619&gt;'&amp;nbsp;'&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;ENDIF&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;FONT size=2&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;.&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;&lt;FONT face="Courier New"&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;APPEND&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;&amp;lt;ls&amp;gt;&amp;nbsp;&lt;/SPAN&gt;&lt;SPAN class=l1s521&gt;&lt;SPAN&gt;&lt;FONT color=#0000ff&gt;TO&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;SPAN style="BACKGROUND: white; COLOR: black; FONT-FAMILY: 'Courier New'"&gt;&amp;nbsp;et_target.&lt;/SPAN&gt; &lt;/FONT&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;
&lt;H3&gt;Focus On Performance &lt;/H3&gt;
&lt;P&gt;In order to address performance we have to make sure we process only records required in the business process: In P&amp;amp;L processing filter out balance GL accounts and all non P&amp;amp;L entries. When we process relevant entries the most time consuming operation is SELECT statement from external database tables (DSOs). We should minimize usage of SELECT statements in the loops and use internal tables wherever possible. However, if we do have to read database tables in the loops in order to improve performance we have to read data using key fields in the proper order sequence (Read more in the post: &lt;A href="/Default.aspx?pageId=90410&amp;amp;mode=PostView&amp;amp;bmi=185560"&gt;Key Fields Order Does Matter&lt;/FONT&gt;&lt;/A&gt;&lt;FONT color=#000000&gt; &lt;/FONT&gt;). &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=246913</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=246913</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Tue, 04 Aug 2009 15:00:00 GMT</pubDate>
      <title>Using Hierarchies for Data Selection</title>
      <description>&lt;P&gt;When processing transactions one may have a need for selecting records belonging to certain hierarchy nodes or levels. For example, if we are processing transaction lines for Profit and Loss statements we want to select only those Cost Elements that belong to a certain hierarchy node. There is no standard way in SAP BW for selecting records in the DTP or in the ABAP start routine based on infoobject hierarchies. However, if we design a query based on the hierarchy masterdata we can save query results to a Direct Update DSO. Later we can use records from this DSO as a filter. Below I will go through the steps one has to follow in order to implement this approach. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Create Master Data Query with Relevant Filters &lt;/H3&gt;
&lt;P&gt;In SAP BW it is only in the query we can do selections by hierarchy nodes. If we set a filter by Cost Element hierarchy node we can load query result to a DSO. Let’s say we have to select all nodes for Cost Element node Z922X-270 with some Cost Elements to be used as exceptions. Here is how query filter will look like: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image007.jpg alt=image007.jpg src="/Content/Pictures/Picture.ashx?PicId=148280" border=0&gt;&lt;/P&gt;
&lt;H3&gt;Create Direct Update DSO with an APD for Hierarchy Nodes &lt;/H3&gt;
&lt;P&gt;DSO for master data elements derived from the hierarchy may contain only one infoobject. In the case of cost element here is an example: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image008.jpg alt=image008.jpg src="/Content/Pictures/Picture.ashx?PicId=148281" border=0&gt;&lt;/P&gt;
&lt;P&gt;As soon as Cost Element hierarchy is refreshed we have to update the filter in the corresponding DSO: P&amp;amp;L Cost Elements. This can be automated with an APD. Analysis Process Designer may be very simple: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image009.jpg alt=image009.jpg src="/Content/Pictures/Picture.ashx?PicId=148282" border=0&gt;&lt;/P&gt;
&lt;H3&gt;Apply Filter in the Start Routine &lt;/H3&gt;
&lt;P&gt;The following code can be used in the start routine of a transformation in order to filter out records by Cost Element hierarchy nodes: &lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;FIELD-SYMBOLS:&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;ls&amp;gt; TYPE _ty_s_SC_1.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;TYPES: t_ce TYPE /BIC/AO_CEPNL00.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;DATA: ce TYPE HASHED TABLE OF t_ce WITH UNIQUE KEY COSTELMNT.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* Load list of Valid Cost Elements&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;SELECT * FROM /BIC/AO_CEPNL00 INTO TABLE ce.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;* Filter by Cost Element - leave only CE hierarchy node 270&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;LOOP AT SOURCE_PACKAGE ASSIGNING &amp;lt;ls&amp;gt;.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;READ TABLE ce WITH TABLE KEY COSTELMNT = &amp;lt;ls&amp;gt;-COSTELMNT TRANSPORTING&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt; &lt;/SPAN&gt;NO FIELDS.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc &amp;lt;&amp;gt; 0.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DELETE SOURCE_PACKAGE.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align=left&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0cm 0cm 0pt; TEXT-ALIGN: left" align=left&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'"&gt;&lt;SPAN&gt;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP.&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=203080</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=203080</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Sun, 14 Jun 2009 14:06:39 GMT</pubDate>
      <title>Key Fields Order Does Matter</title>
      <description>&lt;P style="MARGIN: 0in 0in 0pt" class=MsoBodyText&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;It is sometimes questioned by consultants whether key fields order is important in standard DSOs. Practice shows that SELECT statements from standard DSO active tables use primary key database table indexes only in cases when first few fields from the key field list are used in the WHERE clause. In the following example SELECT statement populates internal table &lt;B style="mso-bidi-font-weight: normal"&gt;cond&lt;/B&gt; with relevant records (conditions) from the DSO &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: black"&gt;O_EKBZM&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="COLOR: black"&gt; &lt;/SPAN&gt;(table &lt;SPAN style="COLOR: black"&gt;/BIC/AO_EKBZM00). &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="COLOR: black"&gt;In case source DSO contains millions of records SQL statement below may perform poorly:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT * FROM /BIC/AO_EKBZM00 INTO TABLE cond&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE CALMONTH = &amp;lt;RESULT_FIELDS&amp;gt;-CALMONTH AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MATERIAL = &amp;lt;RESULT_FIELDS&amp;gt;-/BIC/CHARTICLE AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;VENDOR = &amp;lt;RESULT_FIELDS&amp;gt;-VENDOR AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PLANT = &amp;lt;RESULT_FIELDS&amp;gt;-PLANT AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;/BIC/CHPSTMON = &amp;lt;RESULT_FIELDS&amp;gt;-/BIC/CHPSTMON AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;STOR_LOC = &amp;lt;RESULT_FIELDS&amp;gt;-STOR_LOC AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none" class=MsoNormal&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;RT_VENDP = &amp;lt;RESULT_FIELDS&amp;gt;-RT_VENDP AND&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-FAMILY: 'Arial monospaced for SAP'; COLOR: black; FONT-SIZE: 9pt; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;PUR_GROUP = &amp;lt;RESULT_FIELDS&amp;gt;-PUR_GROUP.&lt;/SPAN&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;Performance very much depends on how DSO &lt;B style="mso-bidi-font-weight: normal"&gt;&lt;SPAN style="COLOR: black"&gt;O_EKBZM&lt;/SPAN&gt;&lt;/B&gt;&lt;SPAN style="COLOR: black"&gt; is defined. In the SELECT statement example WHERE clause does not contain the full key from the DSO:&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="COLOR: black"&gt;&lt;IMG title=image001.jpg border=0 alt=image001.jpg src="/Content/Pictures/Picture.ashx?PicId=129650"&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="COLOR: black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;Therefore, if the SELECT statement uses first few fields from the key field list for selections primary key database index is applied. Performance of the SELECT statement is very good.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P style="TEXT-ALIGN: left; MARGIN: 0in 0in 0pt" class=MsoBodyText align=left&gt;&lt;SPAN style="FONT-SIZE: 11pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;On the other hand if the same key fields were defined in the DSO in a different order the primary key database index would not have been used. The same SELECT statement’s performance is poor on high data volumes. See example, where “Condition Type” field is placed in between the other key fields:&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;IMG title=image003.jpg border=0 alt=image003.jpg src="/Content/Pictures/Picture.ashx?PicId=129651"&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=185560</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=185560</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Sun, 17 May 2009 14:12:38 GMT</pubDate>
      <title>Use BI Tools to Design Income Statements by Vendor</title>
      <description>&lt;P&gt;There are a number of special requirements for P&amp;amp;L reporting in the retail industry. One of them is delivering margin and income statements by product and vendor. These kinds of statements bring management benefits in developing vendor relationships during yearly contract negotiations and new vendor selections. Producing Income statements by vendor is rather complex due to the fact that sales in retail are not allocated by vendor, as well as damaged and aged products usually do not have vendor level of detail. In the post below I will review BI modeling options for providing this level of granularity and distributing sales, damages and other stock related values by vendor and other analysis codes. &lt;/P&gt;
&lt;P&gt;&lt;A href="/Default.aspx?pageId=347484"&gt;Read Full Article here&lt;/A&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=175866</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=175866</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Tue, 12 May 2009 11:54:52 GMT</pubDate>
      <title>A Few More Tips on Write Optimized DSO</title>
      <description>&lt;H3&gt;Delta Mechanism&lt;/H3&gt;
&lt;P&gt;Write-Optimized DataStore does not support the image based delta, it supports request level delta, and you will get &lt;B&gt;brand new delta request for each data load&lt;/B&gt;. &lt;BR&gt;&lt;BR&gt;Since write-optimized DataStore objects do not have a change log, the system does not create delta (in the sense of a before image and an after image). When you update data into the connected InfoProviders, the system only updates the requests that have not yet been posted. &lt;BR&gt;&lt;BR&gt;Write-Optimized Data Store &lt;B&gt;supports request level delta&lt;/B&gt;. In order to capture before and after image delta, you must have to post latest request into further targets like Standard DataStore or Infocubes. &lt;BR&gt;&lt;/P&gt;
&lt;H3&gt;Archiving not possible&lt;/H3&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Using the data archiving process, you can archive and store transaction data from InfoCubes and DataStore objects. &lt;U&gt;This function is NOT available for write-optimized DataStore objects.&lt;/U&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;The data archiving process consists of three main steps:&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Creating the archive file/near-line object&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Storing the archive file in an archiving object (ADK-based) or near-line storage&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US; mso-fareast-font-family: Arial"&gt;&lt;SPAN style="mso-list: Ignore"&gt;&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;3.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Deleting the archived data from the database&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;A data archiving process is always assigned to one specific InfoProvider and has the same name as this InfoProvider. It can be created retrospectively for an existing InfoProvider that is already filled with data.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;In ADK archiving, an archiving object is created for each InfoProvider.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;As with the role of the archiving object during ADK archiving, the near-line object addresses the connected near-line storage solution during near-line storage. It is also generated from the data archiving process for an InfoProvider. Near-line objects consist of various near-line segments that reflect different views of the respective InfoProviders and can also reflect the different versions of an InfoProvider.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=171598</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=171598</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Mon, 16 Feb 2009 20:26:11 GMT</pubDate>
      <title>Write-Optimized DSO</title>
      <description>&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;The objective of &lt;B&gt;Write-Optimised DSO&lt;/B&gt; is to save data as efficiently as possible to further process it without any activation, additional effort of generating SIDs, aggregation and data-record based delta. This is a staging DataStore used for a faster upload. &lt;BR&gt;&lt;BR&gt;Write-Optimized DSO has been primarily designed to be the initial staging of the source system data from where the data could be transferred to the Standard DSO or the InfoCube. &lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0cm" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The data is saved in the write-optimized Data Store object quickly. Data is stored in at most granular form. Document headers and items are extracted using a DataSource and stored in the DataStore.&lt;BR style="mso-special-character: line-break"&gt;&lt;BR style="mso-special-character: line-break"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; COLOR: black; mso-list: l0 level1 lfo1; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; FONT-FAMILY: Arial"&gt;The data is then immediately written to the further data targets in the architected data mart layer for optimized multidimensional analysis. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;BR&gt;The key benefit of using write-optimized DataStore object is that the data is immediately available for further processing in active version. YOU SAVE ACTIVATION TIME across the landscape. The system does not generate SIDs for write-optimized DataStore objects to achive faster upload. Reporting is also possible on the basis of these DataStore objects. However, SAP recommends to use Write-Optimized DataStore as a EDW inbound layer, and update the data into further targets such as standard DataStore objects or InfoCubes. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;When is it recommended to use Write-Optimized DataStore&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Here are the Scenarios for Write-Optimized DataStore. &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL style="MARGIN-TOP: 0cm" type=disc&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Fast EDW inbound layer.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;SAP recommends Write-Optimized DSO to be used as the first layer. It is called Enterprise Data Warehouse layer. As not all business content come with this DSO layer, you may need to build your own. You may check in table RSDODSO for version D and type "Write-Optimized".&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;There is always the need for faster data load. DSOs can be configured to be Write optimized. Thus, the data load happens faster and the load window is shorter.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Used where fast loads are essential. Example: multiple loads per day (or) short source system access times (world wide system landscapes).&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;If the DataSource is not delta enabled. In this case, you would want to have a Write-Optimized DataStore to be the first stage in BI and then pull the Delta request to a cube.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Write-optimized DataStore object is used as a temporary storage area for large sets of data when executing complex transformations for this data before it is written to the DataStore object. Subsequently, the data can be updated to further InfoProviders. You only have to create the complex transformations once for all incoming data.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Write-optimized DataStore objects can be the staging layer for saving data. Business rules are only applied when the data is updated to additional InfoProviders.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;If you want to retain history at request level. In this case you may not need to have PSA archive; instead you can use Write-Optimized DataStore.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;If a multi dimensional analysis is not required and you want to have operational reports, you might want to use Write Optimized DataStore first, and then feed data into Standard Datastore. &lt;BR&gt;&lt;B&gt;&lt;/B&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;B&gt;Functionality of Write-Optimized DataStore&lt;/B&gt; &lt;BR&gt;&lt;BR&gt;Only active data table (DSO key: request ID, Packet No, and Record No):&lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;No change log table and no activation queue.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Size of the DataStore is maintainable.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Technical key is unique.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Every record has a new technical key, only inserts. &lt;/SPAN&gt;
&lt;LI&gt;
&lt;DIV class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Data is stored at request level like PSA table.&lt;/SPAN&gt;&lt;/DIV&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;No SID generation:&lt;/SPAN&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Reporting is possible(but not optimized performance)&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;BEx Reporting is switched off.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Can be included in InfoSet or Multiprovider. &lt;/SPAN&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Performence improvement during dataload.&lt;BR&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Fully integrated in data flow: &lt;/SPAN&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Used as data source and data target&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Export into info providers via request delta &lt;/SPAN&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Can be included in Process chain without activation step.&lt;/SPAN&gt;&lt;FONT face=Verdana&gt; &lt;/FONT&gt;&lt;/SPAN&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Partitioned on request ID (automatic).&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Allows parallel load.&lt;BR&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Uniqueness of Data:&lt;/SPAN&gt; &lt;/P&gt;
&lt;UL&gt;
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;Checkbox “Do not check Uniqueness of data”.&lt;/SPAN&gt; 
&lt;LI class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;If this indicator is set, the active table of the DataStore object could contain several records with the same key.&amp;nbsp;&lt;BR&gt;&lt;/SPAN&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;BR&gt;&amp;nbsp;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;You cannot use reclustering for write-optimized DataStore objects since this DataStore data is not meant for querying. You can only use reclustering for standard DataStore objects and the DataStore objects for direct update. &lt;BR&gt;Write-Optimized DataStore is partitioned on request ID (automatic), you may not need to create additional partition manually on active table. Optimized Write performance has been achieved by request level insertions, similarly like F table in InfoCube. As we are aware, F fact table is write-optimized while the E fact table is read optimized. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Understanding Write-Optimized DataStore keys:&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Since data is written into Write-optimized DataStore active-table directly, you may not need to activate the request as is necessary with the standard DataStore object. The loaded data is not aggregated; the history of the data is retained at request level. . If two data records with the same logical key are extracted from the source, both records are saved in the DataStore object. The record mode responsible for aggregation remains, however, the aggregation of data can take place later in standard DataStore objects. &lt;BR&gt;The system generates a unique &lt;STRONG&gt;&lt;EM&gt;technical key&lt;/EM&gt;&lt;/STRONG&gt; for the write-optimized DataStore object. The technical key consists of the Request GUID field (0REQUEST), the Data Package field (0DATAPAKID) and the Data Record Number field (0RECORD). Only new data records are loaded to this key. &lt;BR&gt;&lt;BR&gt;The standard key fields are not necessary with this type of DataStore object. Also you can define Write-Optimized DataStore without standard key. If standard key fields exist anyway, they are called semantic keys so that they can be distinguished from the technical key.&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;&lt;BR&gt;&lt;STRONG&gt;&lt;EM&gt;Semantic Keys&lt;/EM&gt;&lt;/STRONG&gt; can be defined as standard keys in further target Data Store. The purpose of the semantic key is to identify error in the incoming records or duplicate records. All subsequent data records with same key are written to error stack along with the incorrect data records. These are not updated to data targets; these are updated to error stack. A maximum of 16 key fields and 749 data fields are permitted. Semantic Keys protect the data quality. Semantic keys won’t appear in database level. In order to process error records or duplicate records, you must have to define Semantic group in DTP (data transfer process) that is used to define a key for evaluation. If you assume that there are no incoming duplicates or error records, there is no need to define semantic group, it’s not mandatory. &lt;BR&gt;&lt;/P&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;The semantic key determines which records should be detained when processing. For example, if you define "order number" and “item” as the key, if you have one erroneous record with an order number 123456 item 7, then any other records received in that same request or subsequent requests with order number 123456 item 7 will also be detained. This is applicable for duplicate records as well.&lt;BR&gt;&lt;BR&gt;Semantic key definition integrates the write-optimized DataStore and the error stack through the semantic group in DTP. With SAP NetWeaver 2004s BI SPS10, the write-optimized DataStore object is fully connected to the DTP error stack function.&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Arial"&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;BR&gt;If you want to use write-optimized DataStore object in BEx queries, it is recommend that you define semantic key and that you run a check to ensure that the data is unique. In this case, the write-optimized DataStore object behaves like a standard DataStore object. If the DataStore object does not have these properties, unexpected results may be produced when the data is aggregated in the query. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Delta Administration:&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;Data that is loaded into Write-Optimized Data Store objects is available immediately for further processing. The activation step that has been necessary up to now is no longer required. Note here that the loaded data is not aggregated. If two data records with the same logical key are extracted from the source, both records are saved in the Data Store object, since the technical key for the both records not unique. The record mode (0RECORDMODE) responsible for aggregation remains, however, the aggregation of data can take place at a later time in standard Data Store objects. Write-Optimized DataStore does not support the image based delta, it supports request level delta, and you will get brand new delta request for each data load. &lt;/P&gt;&lt;FONT face=Arial&gt;&lt;/FONT&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;BR&gt;Since write-optimized DataStore objects do not have a change log, the system does not create delta (in the sense of a before image and an after image). When you update data into the connected InfoProviders, the system only updates the requests that have not yet been posted. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;BR&gt;Write-Optimized Data Store supports request level delta. In order to capture before and after image delta, you must have to post latest request into further targets like Standard DataStore or Infocubes. &lt;BR&gt;&lt;BR&gt;&lt;B&gt;Reporting Write-Optimized DataStore Data:&lt;/B&gt;&lt;BR&gt;&lt;BR&gt;For performance reasons, SID values are not created for the characteristics that are loaded. The data is still available for BEx queries. However, in comparison to standard DataStore objects, you can expect slightly worse performance because the SID values have to be created during reporting. However, it is recommended that you use them as a consolidation layer, and update the data to standard DataStore objects or InfoCubes. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;BR&gt;OLAP BEx query perspective, there is no big difference between Write-Optimized DataStore and Standard DataStore, the technical key is not visible for reporting, so the look and feel is just like regular DataStore. If you want to use write-optimized DataStore object in BEx queries, it is recommended that they have a semantic key and that you run a check to ensure that the data is unique. In this case, the write-optimized DataStore object behaves like a standard DataStore object. If the DataStore object does not have these properties, unexpected results may be produced when the data is aggregated in the query. &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;BR&gt;In a nut shell, Write Optimized DSO is not for reporting purpose, it’s a staging DataStore used for faster upload. The direct reporting on this object is also possible without activation but keeping in mind the performance perspective you can use an infoset or multi-provider.&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0cm 0cm 0pt; mso-list: l1 level1 lfo2; tab-stops: list 36.0pt"&gt;&lt;EM&gt;(Content of this post is based on SAP SDN and SAP Help materials).&lt;/EM&gt;&lt;/SPAN&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=116408</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=116408</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Wed, 21 Jan 2009 22:39:15 GMT</pubDate>
      <title>Financial Dimension in Stock Reporting</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;Some business scenarios require a financial dimension for stock reporting, allowing inventory movement analysis by GL Account and Cost Center. This enables controllers producing stock movement and balance reports together with income statements by sold article, location and time period. In this post I will review a design option in SAP BI for stock reporting with the financial dimension.&amp;nbsp;As a datasource example I will use a standard table in SAP Retail, containing stock movements with GL account split. The approach described below has been implemented for a leading retailer with several hundred outlet stores. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Regular stock reporting View &lt;/H3&gt;
&lt;P&gt;The following chart represents a regular view on a stock reporting multiprovider based on a number of infoproviders (usually infocubes). With the regular view we can provide inventory reporting by product, organization, supplier and document type. By choosing either a non-cumulative or a snapshot model we can accumulate stock movements with a daily or monthly detail. (See also &lt;A href="/Default.aspx?pageId=90410&amp;amp;mode=PostView&amp;amp;bmi=72222"&gt;previous post&lt;/A&gt; ) &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image002.jpg alt=image002.jpg src="/Content/Pictures/Picture.ashx?PicId=81538&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;H3&gt;Stock Reporting with a Financial Dimension &lt;/H3&gt;
&lt;P&gt;When we add a financial dimension to the reporting multiprovider we should realize that this increases number of records stored in the cubes and extends data granularity (10M records per day vs. 2M records for stock movements only). At the same time daily stock reporting usually does not require financial details. Therefore, in order to keep database size within a reasonable range we can add the financial dimension only to the monthly snapshot reporting infocube: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image007.jpg alt=image007.jpg src="/Content/Pictures/Picture.ashx?PicId=81540&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;H3&gt;Source for transactional data &lt;/H3&gt;
&lt;P&gt;In SAP Retail 5 GL lines are generated on average for every stock movement. If we want to capture these lines we have to activate line generation for ACCTIT, a special database table in SAP Retail. ACCTIT table has hundreds of fields. When building a view on it (ZV_ACCTIT) we have to select only those fields that need to be processed in reporting. &lt;/P&gt;
&lt;P&gt;ACCTIT table keeps stock movements together with corresponding FIGL lines. Therefore, the flow delivered by standard Material Movements extractor can be replaced by the flow from ACCTIT. In addition to stock movements delivered by 2LIS_03_BF ACCTIT contains relevant P&amp;amp;L and stock revaluation entries that are used for stock financial reporting. &lt;/P&gt;
&lt;P&gt;The same dataflow as described in the &lt;A href="/Default.aspx?pageId=90410&amp;amp;mode=PostView&amp;amp;bmi=72222"&gt;previous post&lt;/A&gt; can be used for stock financial reporting. Stock daily cube contains only daily stock movements and balances. On the other hand stock monthly cube keeps related GL lines in addition to stock movements aggregated by month. With such approach the size of the infocubes stays manageable. Retention policy should be based on actual data volumes, for instance, 6 months for daily data and 13 months for monthly. &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image004.jpg alt=image004.jpg src="/Content/Pictures/Picture.ashx?PicId=81539&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;H3&gt;Build generic datasource for GL stock movements &lt;/H3&gt;
&lt;P&gt;When building a generic datasource we have to take into account that we are processing 10 – 20 million delta records per day. In case we need to reload several days extraction may become an impossible task. I suggest building a generic delta-enabled extractor based on a timestamp. For this purpose ACCTIT table should be enriched with a timestamp field (TS), populated at the moment when an ACCTIT record is created. It is important that the timestamp value is from the same time zone as the delta queue timestamp value (transaction code RSA7). &lt;/P&gt;
&lt;P&gt;In the transaction code RSO2 we define a generic datasource (ZST_Movements), using a timestamp field (TS) for delta management with upper safety limit of 1800 seconds (30 minutes). &lt;/P&gt;
&lt;H3&gt;Apply necessary filters &lt;/H3&gt;
&lt;P&gt;When processing data from ACCTIT it is important to separate stock movement lines from GL lines. Stock Daily infocube contains only stock movements, therefore, an appropriate filter has to be applied to all ACCTIT lines: KOART = “M”. &lt;/P&gt;
&lt;P&gt;Both daily and monthly infocubes should have correct stock quantities, therefore revaluation transactions should have empty Quantity amounts. ACCTIT delivered quantity should be set to 0 for revaluation transactions where Movement Type is blank (BWART=‘ ‘) OR Document Type is ‘PR’ (BLART=‘PR’). &lt;/P&gt;
&lt;H3&gt;Data Load Statistics &lt;/H3&gt;
&lt;P&gt;The approach outlined above has been tested at a retailer with over 700 outlet stores and 2 million stock movements per day. The actual number of lines produced is 10M per day (stock movements with FIGL breakdown). &lt;/P&gt;
&lt;P&gt;Daily load to the infocube of 10M records takes approximately 4 hours, while updating snapshot DSO, which runs in parallel, takes about 1 hour longer. Weekly or monthly upload to the monthly cube (FULL load of 50M snapshot lines) takes about 7 hours. &lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=86349</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=86349</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Sat, 29 Nov 2008 23:05:15 GMT</pubDate>
      <title>Implementing an Optimal Stock Reporting Model</title>
      <description>&lt;P&gt;Addressing performance issues is extremely important when selecting and implementing BI data model with high volume of stock movements. When dealing with millions of movements per day, collecting, aggregating, and reporting on this detail becomes a challenging task. In the post below I will compare a non-cumulative vs. a snapshot model for inventory management reporting. I will review reporting capabilities of each model, and will give some practical tips on implementing them in SAP BI. Special emphasis in the post is given to data load and query runtime performance. The post can be used as a practical illustration to the “&lt;A href="http://sap.seo-gym.com/inventory.pdf" target=_blank&gt;&lt;FONT face="Times New Roman" color=#0000ff&gt;How to…Handle Inventory Management Scenarios in BW Guide&lt;/FONT&gt;&lt;/A&gt; provided by SAP.&lt;/FONT&gt;&lt;/P&gt;
&lt;P&gt;&lt;FONT face="Times New Roman"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;&amp;nbsp;&lt;/H3&gt;
&lt;H3&gt;Address performance in the design&amp;nbsp;&amp;nbsp;&lt;/H3&gt;
&lt;P&gt;Let’s imagine we are loading 5M stock movements per day. They may be arriving in SAP BI via a standard extractor 2LIS_03_BF or via a set of generic extractors. Reporting on daily stock movements and stock balances becomes a technically challenging task as we have to store movements in the database for several months and process millions of movements per day. &lt;/P&gt;
&lt;P&gt;Let us imagine we have 1M product articles and 100 plant/storage location combinations. In order to be able to design reports on daily stock balances we are facing two options: &lt;/P&gt;
&lt;P&gt;1. Store stock balances for each article code per day in the database &lt;/P&gt;
&lt;P&gt;2. Store opening balance per article and all movements per article in the database. Recalculate balances for every day at the query run time. &lt;/P&gt;
&lt;P&gt;If we choose option 1 (store daily balances) we have an issue related to unnecessary data volume processing, because we would have to store 1M balances per day for each plant and storage location. If we have 100 plant/storage location combinations we end up with over 100M records per day. Needless to say this volume is vast for processing on a daily basis. &lt;/P&gt;
&lt;P&gt;In the second scenario (keep opening balances and movements) we would have to load opening balances once, and store daily movements (5M records per day). This is more practical from a data volume point of view. However, as balances are recalculated at report run time, we may have an issue with query performance. &lt;/P&gt;
&lt;P&gt;The second option is known as a non-cumulative model, as we have to use non-cumulative key figures and special non-cumulative infocube functionality in SAP BI. &lt;/P&gt;
&lt;H3&gt;How to choose data model &lt;/H3&gt;
&lt;P&gt;Depending on reporting requirements we have to select an appropriate data model, taking into account data volumes to be processed. If business needs require monthly reports by article and movement type we should be implementing a monthly snapshot infocube. In this case we would have to store article balances for each month. In the case of 13 months of data retention our database size should stay manageable. &lt;/P&gt;
&lt;P&gt;On the other hand if business requirements include daily reporting for the last few months on goods issued/received, we may want to select a daily stock model with a set of non-cumulative key figures. The daily cube may have higher data granularity, however data retention should be limited to address query performance run-time. &lt;/P&gt;
&lt;P&gt;In the case of combined reporting requirements we have to consider implementing both models: a non-cumulative daily together with a monthly snapshot as proposed in the figure below: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image004.jpg alt=image004.jpg src="/Content/Pictures/Picture.ashx?PicId=81539&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;All queries based on the reporting multiprovider should be pointing to either daily or monthly infocube depending on type of reporting. &lt;/P&gt;
&lt;H3&gt;Use of non-cumulative key figures in the daily stock model &lt;/H3&gt;
&lt;P&gt;When implementing a daily stock infocube with non-cumulative key figures one has to specify over which characteristics non-cumulative approach applies. The point is that we have to tell the infocube if stock levels are not supposed to cumulate only over calendar days or some other characteristics as well. An example of a second non-cumulative characteristic would be 0PLANT in case cumulating stock over plants does not make business sense. &lt;/P&gt;
&lt;P&gt;To set this setting in the infocube change mode go to: Extras – Maintain non-cumulative values: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image003.jpg alt=image003.jpg src="/Content/Pictures/Picture.ashx?PicId=69870" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;The Snapshot&amp;nbsp;view &lt;/H3&gt;
&lt;P&gt;Monthly snapshot view produces a total for movements for a month. This reduces the size of data stored in the database dramatically, as all records with the same movement type, storage location and article are aggregated into one line. At the same time we have a calculated monthly balance for each article stored in the cube. Therefore, query run-time performance is better when reporting on stock balances as opposed to the non-cumulative model. &lt;/P&gt;
&lt;P&gt;In order to properly process transactions for future and prior periods in the transformations we should know which period is current. I suggest introducing a new characteristic ZCURPER for storing current period’s value. This can be a 6 character infoobject storing current period in the format YYYYMM. &lt;/P&gt;
&lt;P&gt;Transactions for prior period (if any) should be updating stock balances directly in the monthly infocube. This is necessary as in the current month stock balances for prior periods have been calculated in the snapshot DSO and posted to the cube. Therefore if prior period transactions are arriving in the current month we need to make adjustments for prior periods in the infocube directly. &lt;/P&gt;
&lt;H3&gt;Period closing steps for the snapshot view &lt;/H3&gt;
&lt;P&gt;In the end of the month we have to run a period closing process chain that would copy data from the snapshot DSO to the monthly cube, and generate stock opening balances for the next period. This can be achieved with the following steps: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Copy all accumulated movements + balances for the month (DSO -&amp;gt; Cube) 
&lt;LI&gt;Empty snapshot DSO 
&lt;LI&gt;Copy balances for current period to opening balances of the next period (Cube -&amp;gt; DSO) 
&lt;LI&gt;Assign next period value to the characteristic containing current period (ZCURPER). &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;IMG title=image005.jpg alt=image005.jpg src="/Content/Pictures/Picture.ashx?PicId=69871&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When copying balances for current period back to the snapshot DSO we want to keep only needed granularity. Usually we just need to know stock balances at the end of the period by article, storage location and plant. &lt;/P&gt;
&lt;P&gt;The following code can be applied in the start routine of the transformation connecting monthly infocube with the DSO: &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;LOOP AT SOURCE_PACKAGE ASSIGNING &amp;lt;SOURCE_FIELDS&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;IF &amp;lt;SOURCE_FIELDS&amp;gt;-CALMONTH &amp;lt;&amp;gt; curper OR &lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&amp;lt;SOURCE_FIELDS&amp;gt;-/BIC/ZSTQBAL = 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;* Remove records for Prior &amp;amp; Future periods&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;* Current Period – remove entries without balances&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;DELETE SOURCE_PACKAGE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;* Current Period - copy stock balances to Period All&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;SOURCE_FIELDS&amp;gt;-CALMONTH = '999912'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;* Collapse breakdown by movement type&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;SOURCE_FIELDS&amp;gt;-MOVETYPE = ' '.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoBodyText style="MARGIN: 0in 0in 0pt; TEXT-ALIGN: left" align=left&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;ENDLOOP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H3&gt;Example of a Reporting Multiprovider &lt;/H3&gt;
&lt;P&gt;The following key figures can be used in the multiprovider for inventory management reporting: 
&lt;UL&gt;
&lt;LI&gt;Value Received 
&lt;LI&gt;Value Issued 
&lt;LI&gt;Quantity Received 
&lt;LI&gt;Quantity Issued 
&lt;LI&gt;Closing Balance Quantity Daily (non-cumulative) 
&lt;LI&gt;Closing Balance Value Daily (non-cumulative) 
&lt;LI&gt;Closing Balance Quantity Monthly 
&lt;LI&gt;Closing Balance Value Monthly &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;Dimensions in the reporting multiprovider may look as in the figure below. There are two reporting views in this model: Product Category Managers view vs. Controllers view. They correspond to the Daily and Monthly infocubes described above: 
&lt;P&gt;&lt;IMG title=image007.jpg alt=image007.jpg src="/Content/Pictures/Picture.ashx?PicId=69875&amp;amp;Size=L" border=0&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Keeping infocubes performing &lt;/H3&gt;
&lt;P&gt;Both daily and monthly infocubes should have reasonable number of records in order to deliver better performing queries. The number of records is based on data retention policy for each cube. In case we can set a limit to a few hundred million records (specifically less than 200M) we can count on a reasonable query runtime performance. In addition to that the following points have to be addressed to improve query runtime: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;compress requests in the cube 
&lt;LI&gt;implement aggregates based on statistics of frequently executed queries &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;In order to keep intended data volume in each infocube we have to maintain clean up procedures. Ways on how to design and implement such procedures will be discussed in the further posts. &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=72222</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=72222</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Wed, 16 Jul 2008 14:08:48 GMT</pubDate>
      <title>A Few Tips on Integrating CRM and BI</title>
      <description>&lt;P&gt;It is more and more common to see SAP BI tools to be used for statistical and operational reporting on top of SAP CRM. CRM is one of the transactional data modules in SAP Netweaver providing Customer Relationship Management capabilities. One of the benefits of using SAP BI together with CRM is that integrating the two is a relatively easy task considering the range of integration components delivered by SAP Business Content. At the same time BI 7 is a proven datawarehousing and reporting tool. In the post below I will review an example of SAP BI / CRM architecture, as well as go through a few practical tips on critical implementation and performance related issues. &lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.biportal.org/Default.aspx?pageId=169770"&gt;Read full article...&lt;/A&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=44464</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=44464</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Mon, 19 May 2008 12:33:39 GMT</pubDate>
      <title>Use Virtual Characteristics and query input parameters for dynamic calculations</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;It is a common requirement in BI reporting to do certain calculations “on the fly” at query run time. Sometimes these calculations have to be based on query input parameters. Usually formulas and virtual characteristics are used for calculating values dynamically. In this post I will look at an example where we have to produce a calculation for each report line, using query lines as an input parameter together with query variable values.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Business Case &lt;?xml:namespace prefix = o /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/H3&gt;Let’s look at a business case where we are dealing with a vast volume of customers signing up for service contracts with an organization. When we analyze customer contracts one of the analysis objects in BI reporting is customer’s age. As contracts usually last for several years customer’s age has to be defined as of a certain date. 
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Let us imagine we want to build statistical reports for valid service contracts. End user may wish to run these reports for any validity periods, and customer’s age should be defined based on the start date of the period selected at run time. With this approach the same customer and same contract may be reported under a different customer age, depending on the start date value.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Define virtual characteristic for customer’s age&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/H3&gt;
&lt;P&gt;&lt;/P&gt;The following objects are used in the code below: &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;
&lt;P&gt;&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;ZCUST – customer infoobject – a reference characteristic to 0BPARTNER with an attribute containing date of birth (Datebirth) 
&lt;LI&gt;ZAGE – Virtual characteristic populated with customer’s age at query run time. We should create a new infoobject ZAGE with type N length 3. We have to add this infoobject to the target infoprovider and reporting multiprovider (ZSOIMP). This object should have an initial value assigned in the corresponding transformation.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;LI&gt;ZREP_X - query that requires customer age calculation&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;LI&gt;ZSOIMP- reporting multiprovider for the query &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Populate internal variables at query run time&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/H3&gt;In the first step we have to populate an internal variable with the value entered by end user in the query selections: Startdate ABAP variable should be declared in the include ZXRSRTOP. The code below ensures that the value for startdate entered by a user in the query selections can be used further in the query result calculations (include ZXRSZZZ).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 style="MARGIN: 12pt 0in 3pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Include&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ZXRSRU01&lt;SPAN style="COLOR: black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;* Populate start date entered in the variable for age calculation&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=SV style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;IF I_STEP = 3.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;LOOP AT i_t_var_range into wa_t_var_range&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE vnam = 'VAR_STDATE'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;startdate = wa_t_var_range-low.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;SPAN lang=SV style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;ENDLOOP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN lang=SV style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 style="MARGIN: 12pt 0in 3pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Include&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ZXRSRTOP&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;DATA: startdate type c Length 8.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Calculate customer’s age based on date of birth and start date&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/H3&gt;The following include (ZXRSRU02) is used for virtual characteristics declarations. Customer (ZCUST) is declared below as an input parameter and Age (ZAGE) as an output.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;H4 style="MARGIN: 12pt 0in 3pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Include&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ZXRSRU02&lt;SPAN style="COLOR: black"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;*&amp;nbsp;VC Declarations for Customer's age &lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_s_chanm-chanm&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;= 'ZCUST'. " Customer&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_s_chanm-mode&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;= rrke_c_mode-read.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;append l_s_chanm to e_t_chanm.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_s_chanm-chanm = 'ZAGE'. " Customer's age&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;l_s_chanm-mode&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;= rrke_c_mode-no_selection.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;append l_s_chanm to e_t_chanm.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;In the code below ZAGE virtual characteristic is populated with the calculated age of the customer based on startdate and customer’s date of birth defined in the 0BPARTNER characteristic. &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&lt;/P&gt;It is extremely important to know that the code in this include (ZXRSRZZZ) is executed for all queries. In order to address query performance issues we have to check that the code is executed only for those queries where age calculation is required.&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&amp;nbsp;&lt;/P&gt;
&lt;H4 style="MARGIN: 12pt 0in 3pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;Include ZXRSRZZZ&lt;/SPAN&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/H4&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;* Calculate Customer's age for Contract&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;IF i_s_rkb1d-COMPID = 'ZREP_X'. “Execute this only for query ZREP_X&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;assign component g_pos_ZSOIMP_ZAGE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;of structure c_s_data to &amp;lt;age&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;assign component g_pos_ZSOIMP_ZCUST&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;of structure c_s_data to &amp;lt;customer&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;SELECT SINGLE DATEBIRTH into dob&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;FROM /BI0/PBPARTNER WHERE BPARTNER = &amp;lt;customer&amp;gt;.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: blue; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;* Calculate Age&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF dob &amp;lt; '18000101' OR startdate &amp;lt; dob.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;a = 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ELSE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;a = startdate(4). a = a - DOB(4).&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF startdate+4(4) &amp;lt; DOB+4(4). a = a - 1. ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;age&amp;gt; = a.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; mso-layout-grid-align: none"&gt;&lt;SPAN style="FONT-SIZE: 9pt; COLOR: black; FONT-FAMILY: 'Arial monospaced for SAP'; mso-ansi-language: EN-US; mso-bidi-font-family: 'Arial monospaced for SAP'"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;Solution Output&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/H3&gt;
&lt;H1&gt;&lt;/H1&gt;
&lt;H4&gt;1. Selections &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/H4&gt;
&lt;P&gt;&lt;/P&gt;Startdate = 15 Jan 2000&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; 
&lt;P&gt;&lt;/P&gt;
&lt;H4&gt;1. Query Result&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt; &lt;/H4&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Customer A Age 20&lt;/P&gt;
&lt;P&gt;Customer B Age 22&lt;/P&gt;
&lt;P&gt;Customer C Age 32&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;
&lt;H4&gt;2. Selections &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt;&lt;/H4&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;Startdate = 15 Jan 2003&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;H4&gt;2. Query Result&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/B&gt; &lt;/H4&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;Customer A Age 23&lt;/P&gt;
&lt;P&gt;Customer B Age 25&lt;/P&gt;
&lt;P&gt;Customer C Age 35&lt;/P&gt;&lt;/o:p&gt;&lt;/SPAN&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;SPAN style="mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman" size=3&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt; 
&lt;P&gt;&lt;/P&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/FONT&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=32429</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=32429</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Mon, 28 Apr 2008 22:18:43 GMT</pubDate>
      <title>How to implement CRM hierarchy in BI7</title>
      <description>&lt;P&gt;When integrating CRM with BI 7 one can notice that Organization structure hierarchy cannot be easily uploaded to BI. Unfortunately, Business Content&amp;nbsp;does not provide a&amp;nbsp;standard solution&amp;nbsp;for integrating CRM organization hierarchy. In this post I outline steps on how to implement a solution for loading organization hierarchy from CRM to BI. This approach has been implemented and tested with SAP CRM 5.2 and SAP BI 7.0. &lt;/P&gt;
&lt;P&gt;As an introduction to hierarchy table structures and related concepts I suggest first looking at an earlier post on the topic: “&lt;A href="http://www.biportal.org/Default.aspx?pageId=90410&amp;amp;mode=PostView&amp;amp;bmi=7413"&gt;Use master data Update Rules for Generating Hierarchies Automatically&lt;/A&gt;”. The approach described below is not limited to CRM only. It can be used in generating hierarchies dynamically for various data sources. &lt;/P&gt;
&lt;H3&gt;1. Clarify requirements &lt;/H3&gt;
&lt;P&gt;Let us imagine we have a business case where organization hierarchy is structured as follows: Total Organization – Region – Unit – Position – Employee (business partner). See an example from CRM (transaction code PPOMA_CRM): &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image001.png alt=image001.png src="http://www.biportal.org/Content/Pictures/PictureHandler.ashx?PicId=30524" border=0&gt;&lt;/P&gt;
&lt;P&gt;In order to keep the task simple we intend to design a solution that displays the hierarchy exactly as it is in the source system. If there are any changes in the organization structure we want to see the latest organization structure hierarchy in BI. That is, if an employee moves to another department his/her sales will move with them and will be reported under the new department. Another requirement is to process only English versions of node names. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Note:&lt;/STRONG&gt; &lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;It is possible to slightly adjust code’s logic described below in order to accommodate time dependant hierarchies. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;One more requirement is related to the fact that some reports have to display Region and Unit next to employee’s code. In order to provide this capability we will add Region and Unit as attributes of the Employee infoobject, and populate them with appropriate values from the organization structure. &lt;/P&gt;
&lt;H3&gt;2. Create extractors &lt;/H3&gt;
&lt;P&gt;As business content does not provide a solution for extracting organization hierarchy, we have to build generic extractors. They have to be based on the following tables: HRP_1001 (nodes) and HRP_1000 (texts). &lt;/P&gt;
&lt;P&gt;It is recommended to design database views on top of the tables and use them for building extractors: Z_HRP_1001 and Z_HRP_1000. If organization structure does not contain vast amount of nodes we can refresh hierarchy from CRM using a daily full refresh. &lt;/P&gt;
&lt;H3&gt;3. Create infoobjects in BI &lt;/H3&gt;
&lt;P&gt;Next we have to build objects in BI that would be updated by the extractors. We can use two infoobjects: one for organization structure (employee) attributes and hierarchy (ZORGSTR), and another one for texts (ZORGTXT). &lt;/P&gt;
&lt;P&gt;Infoobject ZORGSTR has to have navigation attributes ZREGION and ZUNIT in order to link employees with corresponding region and units. I suggest using the following data flow: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image002.png alt=image002.png src="http://www.biportal.org/Content/Pictures/PictureHandler.ashx?PicId=30521" border=0&gt;&lt;/P&gt;
&lt;H3&gt;4. Implement attribute transformation to construct the hierarchy &lt;/H3&gt;
&lt;P&gt;The magic happens on the way from the extractor to the infoobject attributes (ZORGSTR). First we have to set both of the newly created infoobjects (ZORGSTR and ZORGTXT) as data targets in BI. The next step is to create a transformation for ZORGSTR and add some ABAP code in the start routine of the transformation. &lt;/P&gt;
&lt;P&gt;In the transformation mapping screen three objects have to be mapped to the target fields of ZORGSTR:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;SOBID -&amp;gt; ZORGSTR 
&lt;LI&gt;ADATANR -&amp;gt; ZREGION 
&lt;LI&gt;SHORT -&amp;gt; ZUNIT &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;The idea is to process all nodes coming from CRM with the extractor Z_HRP1001 and generate appropriate hierarchy nodes together with assigning proper attributes for Region and Unit. Below you will find guidelines and some ABAP code that can be used in the transformation start routine of the ZORGSTR infoobject: &lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Select existing root node in the hierarchy&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;SELECT SINGLE * FROM /BIC/HZORGSTR INTO node&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;WHERE TLEVEL = '01'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Completely refresh hierarchy table&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;DELETE FROM /BIC/ HZORGSTR.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Leave only current Plan entries in the hierarchy&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;DELETE SOURCE_PACKAGE WHERE PLVAR &amp;lt;&amp;gt; '01'. " OR ENDDA &amp;lt;&amp;gt; '99991231'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Populate texts from characteristic ZORGTXT&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;LOOP AT SOURCE_PACKAGE INTO sp.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;curid = sp-OBJID.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;SELECT SINGLE txtsh txtlg INTO (sp-mc_short, sp-stext)&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;FROM /BIC/TZORGTXT WHERE /BIC/ZORGTXT = curid. " AND LANGU = 'EN'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;MODIFY SOURCE_PACKAGE from sp.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;ENDLOOP.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Root node for internal organization is called 'ROOT'&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;READ TABLE SOURCE_PACKAGE&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;WITH KEY mc_short = 'ROOT' INTO sp.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;curnode = '1'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Prepare internal table for BP codes&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;CLEAR resp. rwa = sp.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Form Level 1 of the hierarchy -----------------------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;node-NODENAME = sp-STEXT.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;TRANSLATE node-NODENAME TO UPPER CASE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;curnode = curnode + 1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;node-CHILDID = curnode.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;INSERT INTO /BIC/ HZORGSTR VALUES node.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Form Level 2 of the hierarchy ---- Region ----------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;*Browse through all nodes belonging to current root ----------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;lastnode2 = '0'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;LOOP AT SOURCE_PACKAGE INTO sp2&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE OBJID = sp-OBJID AND SUBTY(1) = 'B' AND SCLAS = 'O'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;*Find child record&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;childnode = sp2-SOBID.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;READ TABLE SOURCE_PACKAGE WITH KEY OBJID = childnode INTO sp3a.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-tab-count: 1"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&amp;lt;… ABAP code …-&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;assign fields for the new hierarchy node &amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;lastnode2 = curnode.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;curnode = curnode + 1.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;node-CHILDID = '0'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;INSERT INTO /BIC/HZTVFKORG VALUES node.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Form Level 3 of the hierarchy ---- Unit ----------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&amp;lt;… ABAP code …&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Form Level 4 of the hierarchy ---- Position ----------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&amp;lt;… ABAP code …&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Form Level 5 of the hierarchy ---- Employee ----------------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;lastnode6 = '0'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;LOOP AT SOURCE_PACKAGE INTO sp6&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;WHERE OBJID = sp6a-OBJID AND SCLAS = 'CP'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;*Find child record&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;childnode = sp6-SOBID.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;READ TABLE SOURCE_PACKAGE WITH KEY OBJID = childnode&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;OTYPE = 'CP' SCLAS = 'BP' INTO sp7a.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;IF sy-subrc = 0.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt; TEXT-INDENT: 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;*Add new BP record if it is found in the structure&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&amp;lt;… ABAP code …&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Add BP code &amp;amp; attributes &lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rwa-sobid = node-NODENAME.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rwa-ADATANR = sp3a-mc_short. " Region&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;rwa-SHORT = sp4a-mc_short. " Unit&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;INSERT rwa INTO TABLE resp.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&amp;lt;… ABAP code …&amp;gt;&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDIF.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/SPAN&gt;ENDLOOP. " Level 5--------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP. " Level 4--------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;ENDLOOP. " Level 3------&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;ENDLOOP. " Level 2-----&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;o:p&gt;&lt;FONT face="Times New Roman"&gt;&amp;nbsp;&lt;/FONT&gt;&lt;/o:p&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Populate source package from resp&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;DELETE SOURCE_PACKAGE WHERE PLVAR = '01'.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;APPEND LINES OF resp TO SOURCE_PACKAGE.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;* Remove duplicates&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;SORT SOURCE_PACKAGE BY SOBID.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt 0.5in"&gt;&lt;SPAN style="FONT-SIZE: 7pt; mso-ansi-language: EN-US"&gt;&lt;FONT face="Times New Roman"&gt;DELETE ADJACENT DUPLICATES FROM SOURCE_PACKAGE COMPARING SOBID.&lt;o:p&gt;&lt;/o:p&gt;&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;5. Outcome &lt;/H3&gt;
&lt;P&gt;Data loads should be done in the following order: &lt;/P&gt;
&lt;UL dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;LI&gt;Run extractor Z_HRP1000 to update characteristic ZORGTXT with texts for hierarchy nodes and attributes. 
&lt;LI&gt;Run extractor Z_HRP1001 to update attributes of ZORGSTR. &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;When the transformation script is executed a new organization hierarchy is generated based on current organization model in CRM. At the same time ZORGSTR is populated with employee codes together with Region and Unit attributes. &lt;/P&gt;
&lt;P&gt;Below is an example of the hierarchy generated in SAP BI dynamically: &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image003.png alt=image003.png src="http://www.biportal.org/Content/Pictures/PictureHandler.ashx?PicId=30522" border=0&gt;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=22716</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=22716</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Thu, 27 Mar 2008 22:34:38 GMT</pubDate>
      <title>Write Optimized DSOs and Business Content</title>
      <description>&lt;P&gt;Those who work with BI7 got introduced to a concept of ”write optimized DataStore objects” together with “direct update DSOs”. In this post I will review an example of how BI7 objects, such as write optimized DSOs, can be used together with 3.x business content objects in the same dataflow. &lt;/P&gt;
&lt;P&gt;By definition write optimized DSOs do not have three relational tables as standard DSOs (formerly known as ODSes). Instead, they only have an active table. It is clear, loading data from source to the write optimized DSO takes less time, and requires less disk space. In write optimized DSOs, however, we do not have an option for generating SIDs (formerly known as a “BEx reporting” option). Therefore, data loads go quicker, but running queries on write optimized DSOs is not a very good idea. &lt;/P&gt;
&lt;P&gt;I would recommend using write optimized DSOs at the first level in the BI data model, when extracting data from the source system. Further processing can be done to either another write optimized DSO, standard DSO or an infoprovider. However, I discovered a few issues when using BW 3.x business content objects together with write optimized DSOs. &lt;/P&gt;
&lt;P&gt;Let us imagine we do not want to migrate 3.x datasources to version 7 due to project restrictions. All business content objects installed for BW 3.x will work properly only within the framework of the 3.x content objects. For example, if we install a set of objects extracting CRM service orders and service contracts we get a set of DataStore Objects coming with the 3.x content. These objects are standard DSOs (or 3.x ODSes). &lt;/P&gt;
&lt;P&gt;If we decide to migrate them to 7.0 write optimized DSOs, the set of objects installed with business content will not function correctly. This is due to the fact that we mix version 7 with version 3.5 objects within the same flow. In order to keep extractors working we have to use standard DSOs at the 1st level. &lt;/P&gt;
&lt;P&gt;On the other hand, if we want to use transformations with start routines, end routines or expert routines within the same data flow, we can set up BI 7 DSOs for further processing (2nd level): &lt;/P&gt;
&lt;P&gt;&lt;IMG title=image002.jpg alt=image002.jpg src="http://www.biportal.org/Content/Pictures/PictureHandler.ashx?PicId=26797" border=0&gt;&lt;/P&gt;
&lt;P&gt;This kind of setup would allow us using existing 3.x business content functionality as well as data modeling capabilities from BI7 within the same data flow. &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=17541</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=17541</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Tue, 04 Mar 2008 16:26:55 GMT</pubDate>
      <title>Use of Analysis Process Designer in BI7</title>
      <description>Everyone who worked with BI 7.0 knows that Analysis Process Designer (APD) is a workbench for creating, executing, and monitoring analysis processes.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The analysis process is primarily based on data that was consolidated in the Data Warehouse and that exists in InfoProviders. One of the applications of APDs from a technical point of view would be feeding query results into a DataStore object or an attribute of a characteristic. In this post I review a few examples on how consultants may use APDs for addressing particular analysis tasks.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.biportal.org/Default.aspx?pageId=107155"&gt;Read Full Article&lt;/A&gt; in the member only section.&lt;/SPAN&gt;&lt;/FONT&gt;&lt;/FONT&gt;&lt;/P&gt;
&lt;P class=MsoNormal style="MARGIN: 0in 0in 0pt"&gt;&lt;FONT size=3&gt;&lt;FONT face="Times New Roman"&gt;&lt;/FONT&gt;&lt;/FONT&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=14297</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=14297</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
    <item>
      <pubDate>Thu, 14 Feb 2008 11:58:07 GMT</pubDate>
      <title>Processing Delta Records in Accounts Payable</title>
      <description>&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;P&gt;When scheduling delta runs in the process chains one has to pay attention to job dependencies and sequence of processes in the chain. It may be critical that certain records are loaded prior to other ones, and, in some cases, simultaneous delta extraction is required. This article gives an example of a business case when delta extractions from source system and further processing are dependent on each other, and discusses ways how to address complex data load and scheduling issues in BW.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;&lt;SPAN&gt;1.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;Dependency between AP and FIGL data loads&lt;/H3&gt;
&lt;P&gt;When we process Accounts payable data in BW we have to apply certain business logic at each processing step in order to deliver on particular reporting requirements. Let us assume we extract data from R/3 using standard extractors 0FI_AP_4 and 0FI_GL_4. &lt;/P&gt;
&lt;P&gt;Another assumption is that first level DataStore objects (AP lines, FIGL Lines) contain all details delivered from R/3. When we move data to the infocubes we have to apply certain filters and look up for values that are delivered with another extractor:&lt;/P&gt;
&lt;P&gt;&lt;IMG title="AP data flow.jpg" alt="AP data flow.jpg" src="http://www.biportal.org/Content/Pictures/PictureHandler.ashx?PicId=21374" border=0&gt;&lt;/P&gt;
&lt;P&gt;The business logic in this model implies that AP lines have to be split over corresponding FIGL lines in order to provide a profit center breakdown. Matching documents are looked up by document number, company code and fiscal year. On the other hand, FIGL lines need to look up for vendor details (vendor codes and other relevant details) in the corresponding AP documents. Depending on whether the vendor code is found in the corresponding AP document the FIGL line either gets filtered out or an appropriate vendor code is assigned.&lt;/P&gt;
&lt;P&gt;When these filters are properly applied the AP_C02 and AP_GLC infocubes contain records relevant for financial reporting, and particularly Accounts Payable reporting.&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;&lt;SPAN&gt;2.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;Challenges with data load Sequence &lt;/H3&gt;
&lt;P&gt;When processing AP delta lines we look up for values in the corresponding FIGL documents. In the production environment we usually get hundreds of AP and GL lines generated every second. The extractors delivering records from R/3 bring those delta records that are sitting in the delta queue at the time of extraction. It is obvious we cannot guarantee that extractions would start at exactly the same moment for both AP and FIGL lines.&lt;/P&gt;
&lt;P&gt;Therefore, it becomes extremely important that all relevant delta records for FIGL are delivered to BW before AP lines are processed. We may be able to ensure this by first loading AP delta from R/3 and then subsequently FIGL delta records. This approach guarantees that all AP delta records we extract will definitely have corresponding FIGL records extracted further on in the process chain.&lt;/P&gt;
&lt;P&gt;However, we are facing another challenge here with such approach: the delta records delivered from FIGL will not necessarily have matching AP records as they were extracted later. And our data model assumes that we are supposed to have all relevant AP records for FIGL data processing. The main reason is that for each FIGL document we need to look up a vendor code from a corresponding AP document. If AP delta records are extracted from R/3 earlier than FIGL delta records we may face a situation when not all relevant AP entries are available for the lookups at the point of FIGL delta processing.&lt;/P&gt;
&lt;H3&gt;&lt;SPAN&gt;&lt;SPAN&gt;3.&lt;SPAN style="FONT: 7pt 'Times New Roman'"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;How to implement the right processing sequence&lt;/H3&gt;
&lt;P&gt;So how do we tackle this sort of data processing issue, when several extractors have to deliver identical data sets with deltas? The way to solve it would be by using a “pseudo delta” approach. While we process AP records in the traditional delta mode, further processing of FIGL records can be done using so called “pseudo deltas” or full refreshes for current and previous fiscal periods. This is possible for FIGL records because we can be sure that with every delta run we are getting records from current and last fiscal periods only. If the fiscal period is closed we do not get FIGL records extracted from R/3.&lt;/P&gt;
&lt;P&gt;The sequence of the processing steps will be as follows:&lt;/P&gt;
&lt;BLOCKQUOTE dir=ltr style="MARGIN-RIGHT: 0px"&gt;
&lt;P&gt;1. Load AP lines delta records to the first level DSO (AP lines)&lt;/P&gt;
&lt;P&gt;2. Load FIGL delta to the first level DSO (FIGL lines) &lt;/P&gt;
&lt;P&gt;3. Run further processing of AP delta records from “AP Lines” DSO to the cube AP_C02&lt;/P&gt;
&lt;P&gt;4. Run pseudo delta (2 full requests) from “FIGL lines” DSO to the cube AP_GLC for current and previous fiscal periods&lt;/P&gt;
&lt;P&gt;5. Delete overlapping full requests from the AP_GLC cube. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;With such approach we guarantee that when processing AP delta records we have all corresponding FIGL records available for the lookup. At the same time, when processing FIGL records we refresh Full requests for current and previous periods. Therefore, all FIGL records that had AP data missing will be reprocessed later and populated to the cube with the proper vendor codes.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <link>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=9403</link>
      <guid>http://www.biportal.org/Default.aspx?pageId=90410&amp;mode=PostView&amp;bmi=9403</guid>
      <dc:creator>Sergei Peleshuk</dc:creator>
    </item>
  </channel>
</rss>