Sep 16, 2014

10 Golden Rules for SAP BW on HANA Migrations

Via Content in SCN

This blog is the third in a sequence of blogs. It starts with Licensing, Sizing and Architecting BW on HANA and moves onto 10 Golden Rules for SAP HANA Project Managers. In this piece, I'm going to discuss some tips for making a migration a success from a technical perspective.

1) Create benchmarks

Always benchmark before and af ter. Make sure they are business-relevant, and are run in a place that excludes network and PC problems - the same place each time. Get the query variants and teach the technical team how to run and time the queries. Create an Excel workbook which has queries on the rows and query runs on the columns and run it every day after the migration. Now you can track project success.

2) Exclude unnecessary risks

I've seen so many projects that include unnecessary risks. Here are some examples

- Not doing full backups that allow proper restore points
- Putting installation files on network shares
- Having application servers on different networks to database servers

Find ways to remove these risks, you don't need them in your project.

3) Get your landscape in sync

Your landscape needs to be synchronized. Check your BW versions are part of a proper Support Package Stack and they aren't on wrong revisions.

On the HANA side, make sure you are on the latest revision of HANA. Yes, that means database and client and DBSL. A landscape that is not in sync is a landscape which is likely to fail.

4) Run an independent check of your HANA system

Unfortunately, hardware vendors sometimes mess up HANA installation and configuration. SAP have Note 1943937 which has details and ther e is an IBM-specific tool which checks for GPFS issues too.

Whilst you're there, check the trace folder of your HANA system. If it has a lot of logs, crashes or dumps then you have a problem. Get someone to resolve it before continuing.

5) Get the latest table sizing and table redistribution notes

There are SAP notes that apply fixes for table sizing and redistribution and these need applying prior to the export process. Search for the latest version and then implement them before exporting.

Specifically, check SAP Note 1921023 for SMIGR_CREATE_DDL and 1908075 for Landscape Redistribution. Also make sure you download the latest row store list from SAP Note 1659383 .

6) Get everything completely up to date

This is the #1 reason why I see problems in HANA migrations. You have to get everything up to date, especially SWPM, kernel, disp+work and r3load software. It requires manual work and you have to repackage the SWPM kernel files at times so you get the latest version. If you skip this or cut corners, you will pay for it later in the upgrade project.

7) Include the latest patches and notes

There is a common wisdom on SAP projects where people go to patch level N-1. This isn't the case with HANA, and you need to make sure you are on the latest patch during your project lifecycle. In addition, you need to search OSS for notes which need applying. One useful tip here is to use the SAP Note Search "Restrict by Product Components" --> SAP_BW --> Release 740 to 740 -> SAPKW74005 (for BW 7.40 SP05). You will now only see notes that relate to BW 7.40 SP05, which is neat.

Make sure you check SAP Note 1908075.

It's well worth spending time doing this analysis when you have some spare moments and noting the SAP Notes that you need to apply after the migration. If you don't do this then you will need to do it when you are tired, immediately after the migraiton.

8) Check the Important Notes list

The master note for BW 7.4 is SAP Note 1949273 and for BW 7.3.1 it is 1846493. You need to check and apply the corrections (and connected corrections) in these notes.
9) Follow post-processing steps

There are a number of post-processing steps detailed in the master upgrade guide. Amongst those, you should ensure you run ABAP Report RSDU_TABLE_CONSISTENCY to check for any problems, and refer to SAP Note 1695112 for more details.

10) Don't cut corners

You can't cut corners in a migration - you need to spend the time to get it right. I've been thinking lately, and SAP could really help make migration projects more successful by automating the above process. In the meantime, you need to be methodical and read all the available information and pay attention to the details. If you want your project to be a success then don't cut corners.

Final Words

The migration to SAP HANA can be a very smooth and simple process, if the technical team pay attention to the details. Every BW on HANA project I have seen in trouble has been either because of governance problems mentioned in my blog 10 Golden Rules for SAP HANA Project Managers, because of poorly architected hardware as per my blog Licensing, Sizing and Architecting BW on HANA or because of a te chnical team that didn't pay attention to the detail.

Sometimes you can get away with skipping some of the detail, but usually, you cannot.

Sep 10, 2014

Posted by Thomas Zurek 

This is yet another question that I get from all angles, partners, customers but even colleagues. BW has been the spearhead SAP application to run on HANA. Actually, it is also one of the top drivers for HANA revenue. We've created the picture in figure 1 to describe - on a high level - what has happened. I believe that this not only tells a story on BW's evolution but underlines the overall HANA strategy of becoming not only a super-fast DBMS but an overall, compelling and powerful platform.

Fig. 1: High level comparison between a classic BW and the two versions of BW-on-HANA. Here as PPT.

Classic BW
Classic BW (7.3ff) follows the classic architecture with a central DBMS server with one or more application servers attached. The latter communicate with the DBMS in SQL via the DBSL layer. Features and functions of BW - the red boxes in the left-most picture of fig. 1 - are (mostly) implemented in ABAP on the application server.

BW 7.3 on HANA
At SAPPHIRE Madrid in November 2011, BW 7.3 was the first version to be released on HANA as a DBMS. There, the focus was (a) to enable HANA as a DBMS underneath BW and (b) to provide a few dedicated and extremely valuable performance improvements by pushing the run-time of certain BW features to the HANA server. The latter is shown in the centre of fig. 1 by moving some of the red boxes from the application server into the HANA server. As the BW features and functions are still parameterised, defined, orchestrated from within the BW code in application server, they are still represented as striped boxes in the application server. Actually, customers and their users do not note a difference in usage other than better performance. Examples are: faster query processing, planning performance (PAK), DSO activation. Frequently, these features have been implemented in HANA using specialised HANA engines (most prominently the calculation and planning engines) or libraries that go well beyond a SQL scope. The latter are core components of the HANA platform and are accessed via proprietary, optimised protocols.

BW 7.4 on HANA
The next step in the evolution of BW has been the 7.4 release on HANA. Beyond additional functions being pushed down into HANA, there has been a number of features (pictured as dark blue boxes in fig. 1) that extent the classic BW scope and allow to do things that were not possible before. The HANA analytic process (e.g. using PAL or R) and the reworked modeling environment with new Eclpise-based UIs that smoothly integrate with (native) HANA modeling UIs andconcepts leading also to a reduced set of infoprovider types that are necessary to create the data warehouse. Especially the latter have triggered comments like
"This is not BW."
"Unbelievable but BW has been completely renewed."
"7.4 doesn't do justice to the product! You should have given it a different name!"

It is especially those dark blue boxes that surprise many, both inside and outside SAP. It is the essence that makes dual approaches, like within the HANA EDW, possible, which, in turn, leads to a simplified environment for a customer.

This blog has been cross-published here. You can follow me on Twitter via @tfxz.

Sep 2, 2014

Concepts on BW,Understanding Connections



I have gone through a lot of articles on SCN which speak extensively about integration with BO-BW however, I could not find a document that consolidated and spoke about UNX on Multiprovider SSO manually setup, BICS on BEX issue and the concepts on BW. In case if there are issues how do we troubleshoot to get to the root of the cause.
Concepts on BW:
Before we begin on how we integrate BO with BW, we must be aware of some of the basic concepts of BW.
  1. Multiprovider: A multi-cube is a union of basic cubes. The multi-cube itself does not contai n any data; rather, data reside in the basic cubes. To a user, the multi-cube is similar to a basic cube. When creating a query, the user can select characteristics and key figures from different basic cubes.
  2. Infocube: An InfoCube is a fact table and its associated dimension tables in the star schema. The maximum number of characters allowed for the technical name is 30.
  3. Info Object: In BW, key figures and characteristics are collectively called Info Objects.
  4. DSO: A Data Store object serves as a storage location for consolidated and cleansed transaction data or master data on a document (atomic) level. This data can be evaluated using a BEx query.
  5. Bex: Short for Business Explorer. It includes following tools to present the reports to end user: Analyzer, Query Designer, Web Application Designer (WAD), Report Designer and Web Analyzer.
  6. Key Figure: Key figures are numeric values or quantities, such as Per Unit Sales Price, Quantity Sold, and Sales Revenue. The maximum number of characters allowed for the technical name is 9. Reference Characteristic.

Understanding Connections:
In order to proceed further into development ways we must first understand the mode of connection with the BW system.
  1. OLAP Universe: before 4.0 had set in the market in 3.1 we connected through the unv universe .This was the traditional way to connect to the BW environment through BW Info cubes or Bex Queries.  In this process the MDX parser is used to co nnect to Bex and the output comes in a flat structure. The RFC executes the MDX parser which executes a query.

  1. Relational Universes through Data Federator: Currently in 4.0 and higher versions we are using the unx universe, the leverage or advantage of this universe is that the data federator allows to create a single as well as multiple connection to connect to a BW source. So for example to can have a multiprovider as one source and one or more DSO's in the same universe.
Note: This connection type too flattens the hierarchy.
This method connects through the SAP JCO/ Java Connector to connect to the BW data source.
Also through this method we cannot connect to the BEX Query.

  1. BICS Connection: The last connection method is the BICS connection / BI Consumer Services which connects directly to the Bex Query in BW. No universe is needed here and the hierarchies do not come in the flattened structure. Also connecting to BW through this mechanism brings in better performance and faster access to BW data.

Connecting to Multiprovider, Infocube through UNX:
While working on my current project, we connected to the Multiprovider, Info cubes, DSO's through the multisource capability of the under lying Data Federator connecting to the BW environment.
To establish connecti vity to connect through the SAP JCO/Java Connector.
When we speak of JCO it is very important that while setting up of connectivity with the BO and BW we ensure that the JCO connection is setup. This process can be a manual process and an automatic. We explain below the necessary steps to create a JCO connection manually.
  1. Logon to SAP logon screen. Enter t-code SE37 and click execute.
  2. This opens the parameter panel. Enter function module RSDRI_DF_CONFIGURE click execute.
              Set the parameters as follows.
I_ONLY_CHECK'' (empty)
I_RFC_DESTINATIONDF_J CO_hostnameOfBOEServer_some-sid
I_REMOVE_CONFIGURATION'' (empty)
  1. Run SM59, check TCP/IP connections and you should be able to see the newly created JCO connection DF_JCO_MYHOST( adaptive processing server)
  2. This JCO connection should be updated in the parameters of the Relation Connection.
  3. Login to Data Federator ->Connector Configurations tab->Create Configurations
  4. In the property programIDMapping, point the JCO connection only use the RFC destination defined in step 4
  5. In the programIDMapping = MySia.AdaptiveProcessingServer=DF_JCO_MYHOST
  6. In the property gatewayHostname, type in the FQDN of the BW server.

Note: Create the relational JCO connection to BW using an account that has full authorization on S_RFC_ADM
It is always advisable in an environment where you have multiple adaptive processing servers to create separate JCO connections.
Authorizations to access data through relational connection.
When a user is accessing data from the BO end, to access data at the BW end through relational connection. There are certain authorizations/ rights that are needed to be provided to those group pf users.
The rights or BW roles that required:
S_RFC (Authorization Check for RFC Access)
S_RS_ADMWB (Data Warehousing Workbench - Objects)
S_RS_AUTH (BI Analysis Authorizations in Role)
S_RS_ICUBE (Data Warehousing Workbench - InfoCube)
S_RS_IOBJ (Data Warehousing Workbench - InfoObject)
S_RS_ISET (Data Warehousing Workbench - InfoSet)
S_RS_MPRO (Data Warehousing Workbench - MultiProvider)
S_RS_ODSO (Data Warehousing Workbench - DataStore Object)
The above authorizations are required for end user that run queries against
BW e.g. running Webi reports.
You can keep the connection in the BO end to Single Sign on without the manual user name and password .You might receive an error but there shouldn't be any issue in accessing the data.

Refer to note: SAP Note 1465871
The coding here comes as MSQL and not as XML and we can play around with the tables and the structure as we wish too.


Connecting to BICS –Bex Query:
When we are creating a connection from BO to connect to the Bex Query we are doing the same through SAP BICS client.
Creation of the connection is a simple process however, but in order to use the SSO we must ensure that the certificate you created during the configuration of STS has been added to the SYSTEM PSE section of the STRUSTSSO2 transaction. Else while we access the connection through SSO, the connection will through an error.

Aug 25, 2014

The HANA Journey: Determining When HANA is Right for You

Via Content in SCN

I would like to thank my colleague Robert Hernandez, Director of In-Memory Services, North America for his collaboration and input to this blog.

If you're reading this blog, SAP HANA has caught your attention.  By now, you've probably heard a significant amount about SAP HANA. It's the next-generation platform with blazing speed, real-time reporting, and powerful analytics, able to capitalize on unprecedented opportunities and deliver significant competitive advantages.  As the SAP HANA topic has matured, you've probably also heard of different ways to deploy it in your business; solutions such as SAP Business Suite accelerators, SAP HANA applications, SAP BW on HANA, SAP Business Suite on HANA, and more.  You've possibly heard so much in fact that you feel the need to take a step back and ask - so what does it all mean to me?  It's fast – great.  It can help me – fine.  But, where do I start, and how do I take advantage of it?  Do accelerators help me?  Should I start with SAP BW on SAP HANA?  Does the introduction of SAP Business Suite on SAP HANA now change everything?  Like other break-through innovations, SAP HANA on its own will not deliver value.  But, SAP HANA applied to a particular business problem or challenge can deliver exceptional value.  So, if you still have some questions about whether SAP HANA is right for you, or more importantly, how it's right for you, then read on to determine how best to realize value from SAP HANA.


Beginning the HANA Journey

When evaluating SAP HANA for your business, remember to keep the following in mind: (1) how can HANA help my business? (2) what type of HANA solution do I need to achieve this? (3) how should I plan my deployment strategy?  These high level concepts are summarized below in Figure 1, as well as further examined in the text which follows.

Blog Graphic 2.PNG

1.  Understanding Value Opportunities in Your Business: before deploying SAP HANA, an organization should take the time to understand where SAP HANA can deliver maximum benefit based on your business goals.  Some examples to consider:

    1. Are analytics a problem in your organization?  Do you have plans to grow the business, but need to stay lean in terms of your total operations?  Would access to real-time information allow you to accomplish that more economically?  Are you an SAP BW customer, looking to improve the way you deploy your analytics today?
    2. What about your day-to-day business processes?  If you could run your materials planning processes faster or differently, would that change your business?  For Consumer Products, do you have access into the real-time demand in your various markets, allowing you to focus on the right ones?  For Retail, could you grow customer loyalty and in-store excellence through access to customer data by your sales personnel while your customers are still in the store?
    3. Finally, are there new business processes you could create today, something that could transform your business but you haven't thought about doing because of technical limitations?  Could a new application be developed, purpose-built to bring these new ideas to reality?  For Healthcare, is there a way to manage patient data, allowing you to better serve patients or deliver medical care.

2.  Map Value Opportunities to SAP HANA Solutions: once an organization understands the business value – how SAP HANA can enable business soluti ons – you next need to understand how to implement SAP HANA.  As identified in the opening to this blog, SAP continues to enhance HANA and offer additional capabilities.

    1. For the customer looking at real-time analytics to grow the business, perhaps an agile data mart deployed on SAP HANA is the answer.  Or, for existing SAP BW customers or customers requiring a complete Enterprise Data Warehouse, BW on HANA may be the right place to start.
    2. For the customers needing to enhance operational processes, perhaps SAP Business Suite on SAP HANA is the right option.  Or, if you need a smaller first step, beginning with a focused accelerator powered by SAP HANA targeting a single, specific process may be the logical place to begin.
    3. For the customers looking at creating a new, transformative solution, perhaps an application powered by SAP HANA is appropriate.

3.  Deploy SAP HANA: at this stage you've identified the business value, you understand what type of SAP HANA solution should be implemented to realize that value, now it's time to evaluate your deployment options.

    1. For those organizations with strong IT operational capabilities deploying SAP HANA in-house, on-premise may be the most efficient.  It will allow you maximum control of your own environment and positions you well to grow your HANA deployment alongside SAP's growing HANA coverage.
    2. If your organization is looking to quickly deploy SAP HANA and doesn't have the time or resourcing to manage it in-house, SAP's HANA Enterprise Cloud (HEC) may be the right approach.  This allows you to utilize all the benefits and capabilities of SAP HANA, but leaves the environment manag ement to someone else allowing you to focus on solving the business problem.
    3. Ultimately the right solution might involve a hybrid between an On-Premise and SAP HANA Enterprise Cloud approach.  Perhaps business timelines can't wait on hardware procurement and thus a HEC approach for your development and test environments with an on-premise production system allows you to deliver on time.  Or perhaps there are some applications you would prefer to deploy on the cloud, while your core business applications reside on SAP HANA in-house.  Either way it's all about finding the right combination that fit s your needs.
    4. Finally, whether on-premise or in the HEC, Rapid Deployment Solutions (RDS) should be part of any customer's HANA deployment decision process.  SAP has constructed many pre-packaged solutions in a box targeted at the most common HANA use cases.  Perhaps one of these RDS fits your business needs and provides a low risk, out-of-the-box approach to quickly roll out SAP HANA.  Even if the RDS only covers a portion of your business need, it may provide a stable foundation to quickly deploy business value on top of which you can then build.

Conclusion - Creating a Strategic Roadmap

And there you have it, you're on your way to your own SAP HANA journey.  Let the business drive the need, map that to how SAP HANA solutions can help, a nd plan out your deployment.  Now the next question – where to go from here?  Look to create a strategic project roadmap for SAP HANA.  For example, perhaps you are an existing SAP Business Suite customer, and realize that you want to move to SAP HANA, but not just yet.  However, you recognize that in the short term you have a specific use case – say how you manage your process for analyzing cost and profitability – that you want to accelerate.  Your roadmap could start with an early phase deployment of the CO-PA accelerator, with perhaps a migration to Business Suite on SAP HANA at a later date.  Or maybe you have SAP BW deployed with Business Suite on HANA and would like to start with migrating your BW to HANA.  The key is your business drivers will feed your implementation plan, and that can all be represented through your strategic roadmap.

Future Blogs

In conclusion, please refer back to this blog in the coming weeks, as content introduced will be further developed in subsequent blogs.  We will take a more tactical look at SAP HANA; now that you understand the theory portrayed above, what are some tactical steps to get started?  We will also examine some motivating factors for considering SAP Business Suite on SAP HANA.  Be sure to keep an eye out for these and other topics in future blogs.

Standardizing Data Flow Patterns using Data Flow Templates


Standardization is a key aspect of SAP BW Layered, Scalable Architecture (LSA), SAP's best practice in Enterprise Data Warehousing. One of the ways to realize standardization in the data staging process is using Data Flow Templates.
SAP BW release 7.3 introduced a new modeling object called Data Flow. A Data Flow acts as a container for storing the data modeling objects of a data flow, e.g. InfoProviders, Transformations, DTPs, etc. It can also be used to incorporate documentation belonging to its data modeling objects. Furthermore, it's possible to define customized / tailor-made Data Flow Templates to facilitate standardization of data flow patterns in the context of your SAP BW implementation and architecture guidelines. Please refer to SAP Help for more information on Graphical Modeling, Data Flows and Data Flow Templates.
In this blog I would like to discuss standardizing data flow patterns using Data Flow Templates, creating new Data Flows based on such a Data Flow Template and the advantages of this approach.

Data Flow Templates

The purpose of Data Flow Template is standardization of data flow patterns. Every Data Flow should be based on a Data Flow Template. From an architecture point-of-view, any deviation from Data Flow Templates should be justified and motivated. It can potentially identify the need for an additional Data Flow Template, to be decided upon by the responsible person or team.

An example of a Data Flow Template can be found in the next screenshot.

Figure_1_Example_Data_Flow_Template.jpg
Figure 1: Example of Data Flow Template

The data modeling objects are represented by the blocks. These blocks act as place holders for the future data modeling objects which can either be created from scratch or reused as an already existing object. The technical name gives an implementing hint for the proper naming convention to be applied.
You can also store documentation. In the context of Data Flow Templates, you can find here modeling tips and procedural aspects.

The following screenshot shows an LSA compliant example implem entation with Data Flow Templates Please note a strict segregation between Data Warehouse Layer and Data Mart Layer.

Figure_2_Data_Flow_Templates.jpg
Figure 2: Data Flow Templates

Data Flows

You create a new Data Flow in an appropriate InfoArea. Here you will see a blank canvas where you have to insert a Data Flow Template.

Figure_3_Create_New_Data_Flo   w.jpg
Figure 3: Create new Data Flow

All data modeling objects of the Data Flow Template are copied into the new Data Flow as place holders. From here you can either create the data modeling objects from scratch or reuse already existing data modeling objects.

Figure_4_New_Data_Flow_with_Place_Holders.jpg
Figur e 4: New Data Flow with place holders

At any point in time you can use the function Complete Data Flow to add already existing additional objects, such as DTPs, Transformations and InfoPackages. This is usually also necessary for SPO to complete the Data Flow with all objects related to the SPO.

Figure_5_Complete_Data_Flow.jpg
Figure 5: Complete Data Flow

You can complete the Data Flow in an incremental way until it's finished. Don't forget to add any interesting or crucial support information using the documentation feature.

Figure_6_Incremental_Completion_of_Data_Flow.jpg
Figure 6: Incremental completion of Data Flow

Conclusion

In this blog author presented a way to facilitating your (Enterprise) Data Warehouse Architecture by standardizing data flow patterns using Data Flow Templates. In his opinion it's easy to use but very powerful functionality. Author can highly recommend using Data Flow Templates in order to not only increase standardization of data flow patterns but also to provide gui ded implementation with documentation of necessary steps and naming convention hints. Furthermore, Data Flows can help reducing the need for a complex InfoArea and Application Component Hierarchy. Another benefit is the documentation feature to incorporate on-line documentation of your Data Flows. Last but not least, Data Flows offer a great help in collecting the right data modeling objects using the Transport Connection.

Aug 21, 2014

Where to find information on SAP BW on HANA migrations


I've been part of projects to migrate to BW on HANA recently and one of the things that I noticed was that resources can be fragmented and tricky to find. I thought I'd curate a list of places to go to find information. If I have missed something then please ping me so it can be added to here.

1) Best Practice Guide

Boris Zarske maintains a Best Practice Guide - Classical Migration of SAP NetWeaver AS ABAP to SAP HANA and this is a great place to start. It covers all a spects of a migration and should be in your toolkit because Boris is aggregating information directly from the development team.

However, it only covers classical migrations, and if you're doing BW on HANA then you should ideally be considering DMO.

2) Database Migration Option (DMO)

Roland Kramer maintains SAP First Guidance - Using the DMO Option to Migrate BW on HANA and this is the place to find out information about this. It is applicable to BW 7.0 and above and can help automate the upgrade and migration to SAP HANA. DMO doesn't work in every scenario, so make sure that it can do what you need.

3) Migration Cockpit & Checklist

If you go SAP Note 1909597 - SAP NetWeaver BW Migration Cockpit then you can install and configure program ZBW_HANA_MIGRATION_COCKPIT. This program runs on BW 3.5 or above, which is very cool.

In addition, as recommended by Ali S Qahtani, you should consider applying SAP Note 1729988 - SAP NetWeaver BW powered by SAP HANA - Checklist Tool, which prov ides program ZBW_HANA_CHECKLIST or ZBW_HANA_CHECKLIST_3x, depending on your version of BW. This is a pretty neat checklist and a presentation is attached to the note.

4) Architecting BW on HANA

I wrote a blog on Licensing, Sizing and Architecting BW on HANA. In addition, Marc Hartz' guide on SAP NetWeaver BW Powered by SAP HANA Sc ale Out - Best Practices is important if you have a large system, as is Marc Bernard's How NOT to size a SAP NetWeaver BW system for SAP HANA.

5) Managing your BW on HANA Project

I wrote blogs on 10 Golden Rules for SAP HANA Project Managers, and 10 Golden Rules for SAP BW on HANA Migrations. Hopefully they are useful for you.

Roland Kramer also wrote Three things to know when migrating NetWeaver BW on HANA, which is worth reading. This refers to SAP First Guidance Collection for SAP NetWeaver BW  powered by SAP HANA, which in turn refers to Implementation - BW on HANA Export/Import, SAP First Guidance - Using the DMO Option to Migrate and SAP First Guidance - SAP-NLS Solution with Sybase IQ. Wow, this is recursive documentation!

5) HANA Basis Reference Guide

Andy Silvey has written the awesome The SAP Hana Reference for NetWeaver Basis Administrators, which is a go-to guide on HANA Administration. It is well worth reading if you're a Basis consultant moving to the HANAsphere.

6) ABAP Post-Copy Automation

Michaela Pastor wrote a very handy blog about ABAP Post-Copy Automation, which is all about reducing the time to do system copies, and using the same ABAP sourc e system for more than one BW system.

7) Some additional blogs

Sunny Pahuja's blog on Some points to remember for Database Migration to HANA  is very detailed though a little out of date.

Final Words

Since I've written this, I've realized that there is a lot of information out there, which may be overwhelming. I do encourage though, if you are planning a BW on HANA migration, that you take a look at this information before you build out your plan. You will be much better informed and I have no doubt that you will change your plan for BW on HANA.

Thanks to all of those that helped curate this, especially Thomas Zurek, Klaus Nagel, Boris Zarske, Rolan d Kramer, Lloyd Palfrey, Marc Bernard, Lothar Henkes.

If you have some content that I should link to here, then please let me know!

Aug 18, 2014

How to Generage a datasource from a Custom Report in ECC

How to Generage a datasource from a Custom Report in ECC
Via Content in SCN

When more analysis on a custom report in ECC system is required, users ask for a bw report that shows exactly the same data with the custom report in ECC. In standard cases, the rational behavior would be to search for business content if there is any corresponding content for the requirement. Most of the time, we can't find it in business content (That may be the reason why a custom report is written in ECC J). In such cases we have some alternatives to go with. In this blog I am going to discuss three alternatives, compare the advantages and explain the solution to the one which I mostly prefer.
The information I give does not include any detailed ABAP knowledge, but gives an understanding on how we can handle these types of requirements. I am not an ABAP developer, so, in this blog I will only give the sufficient ABAP code to make changes in necessary spots in your report and function modules.

The Alternative Solutions:
1. Creating a function module:

In this approach, we can write a function module that exactly behaves the same way as the program of the custom report. Then we create a datasource using function module. This approach is nothing different than creating a totally new datasource according to a new requirement. You can only use the logic in th e program. You can directly upload your infoprovider using this datasource.

2. Using the program of the custom report to fill in a Z table:

With a minor change in the program, we can add some code to fill in a Z table. Then we can create a datasource with extraction from view.  We use z table as the source. This is an easier way compared to the previous alternative.  You don't need to write the whole logic once more. Everything is thought once. When a change request in the logic comes from the user, the change is implemented only in the program. As long as the fields of the custom report are not changed, there is no maintenance for change requests ( I am assuming full upload to infoprovider). Even if a change in fields arrives, the only thing we need to do would be replicating the datasource and changing the Z table.

3. The final approach I am going to give in detail is changing the report code so that we can call it from another function module. Then we use this function module to create the datasource. This is even better than the second approach. In this approach we don't need to create a Ztable. So we have some performance related gains. We don't spend a space in ECC for Ztable. We don't require the time to write into that table and also read from that table. When the function is called to upload an infoprovider, the code calls the report code to generate the data we require. Now let's go with the details. I will explain this approach with a sample report where we show a very small information from MARA table.


Detailed Explanation for 3rd Approach:

For the detailed explanation, I got some help from my ABAP developer colleague, Gozde Candan. We have created a very simple program that gets the list of materials according to a material type selected in the selection screen. We also have created a transaction for this program. This is only for illustration. It does not matter how complicated the c ode is, you can reorganize the code in such a way I describe in this blog. We have written the program with a single select statement, so that it would be easier to show how we change it.

Suppose we have a transaction called ZMATLIST.  This transaction gets the list of materials according to a material type selected.
resim1.JPG

To find the name of the program behind this transaction, we go to the system menu on top of the screen:
resim2.JPG

When we select status, a screen appears showing SAP data:
resim3.JPG

In the field "P ROGRAM", we see the name of the program that we make the changes so that the code inside can be called within a function module.
With the transaction code se38 we can view the code for this program:
resim4.JPG

For this program,  we have defined a structure zmaterial:

This structure is created with TCODE: SE11. This part is important, because we will use this same structure for the datasource. If the design of the code does not include (most of the time it does, but in some cases it may not include) a structure like this, then it should be changed so that before it flows to the gui screens, an internal table defined by such a structure should be filled with the data .

Now we go on by editing this program. What we are going to do is adding a flag to the program to understand if it is being imported by a function module. In the function module, we are going to set this flag. So we will import the value of this flag from function module to this program. Reading the value of the flag, we are going to export the to the function module. That is; we are doing one import for the flag value (from function module) and one export for the data (to the function module).
resim6.JPG
The code in rectangles is added to the code.

REPORT zmateriallist.
TABLES:mara.

DATA:it_mara TYPE zmaterial OCCURS 0 WITH HEADER LINE.
*pflag is the name of the flag we define. You can give any name.
DATA:pflag(1).

*This part is the simple selection statement according to the parameter (material type) selected in the
*selection screen of the gui. The data is filled in an internal table called it_mara. For complicated z reports,
*this part can be much more longer. The idea here is filling in the internal table it_mara.
parameter:mtart TYPE mara-mtart.
SELECT * FROM mara INTO CORRESPONDING FIELDS OF TABLE it_mara WHERE mtart = mtart.


*What we do with the below IMPORT statement is that, we get the value of pflag importing from the function

Memory id is a unique id, we can give any name. We will use
*module using memory id 'ZFLAGFROMBWFM'.
*this same id in the function module to export pflag.
IMPORT pflag FROM MEMORY ID 'ZFLAGFROMBWFM'.

*We add an if statement to make any necessary changes for showing the data.
IF pflag IS INITIAL.

*In this part, since pflag is not set, we understand that the data generated should be shown in gui screen.
*So any gui related code is written in this part. 
LOOP AT it_mara.
   
WRITE:/ it_mara-matnr, it_mara-ersda, it_mara-ernam.
 
ENDLOOP.

ELSE.



*In this part, pflag is set from the function module as 'X'. Thus, we export the data from it_mara to the internal table defined in the function module with the memory id 'ZMATERIALLISTTOBWFM'. This unique memory is
*going to be used in the function module to import the material list to i_e_t_data defined in the function module.


EXPORT it_mara[] TO MEMORY ID 'ZMATERIALLISTTOBWFM'.
ENDIF.

That is all we do in the report code. Now, it is time to create a function module for our datasource. What we need is a function group where LRSAXD01 is included in the top. I will not explain in detail how to create a function module for bw. Though, here are the screenshots of the function module we have created:
Import tab:
resim7.JPG
Tables tab:
resim8.JPG
Exceptions:
resim9.JPG
And the source code is:
resim10.JPG


  DATA: l_s_select TYPE srsc_s_select.
 
STATICS: s_s_if              TYPE srsc_s_if_simple,
           s_counter_datapakid TYPE
sytabix,
           i_e_t_data          TYPE
zmaterial OCCURS 0
                              
WITH HEADER LINE.
  DATA:
ls_rsselect TYPE rsselect.

*We need to define pflag here, too. 
  DATA: pflag(1).
*This part is standart for all bw functions, lr_mtart is defined to enable      
*the material type for selection. 'ZBW_MATLIST' is the name of the datasource
*we will define.
 
RANGES:lr_mtart FOR zmaterial-matnr.
 
IF i_initflag = sbiwa_c_flag_on.
   
CASE i_dsource.
     
WHEN 'ZBW_MATLIST'.
        s_s_if
-t_select[]
= i_t_select[].
      WHEN
OTHERS.
        log_write
'E' 'R3' '009' i_dsource ' '.
       
RAISE error_passed_to_mess_handler.
   
ENDCASE.
    s_s_if
-requnr    = i_requnr.
    s_s_if
-dsource   = i_dsource.
    s_s_if
-maxsize   = i_maxsize.
   
APPEND LINES OF i_t_select TO s_s_if-t_select.
    APPEND LINES OF< /span> i_t_fields TO s_s_if-t_fields.

    s_counter_datapakid
= 0.
 
ELSE.
    IF
s_counter_datapakid = 0.

     
REFRESH:lr_mtart.

      LOOP AT s_s_if-t_select INTO ls_rsselect.
        CASE
ls_rsselect-fieldnm.
          WHEN
'MTART'.
           
MOVE-CORRESPONDING ls_rsselect TO lr_mtart.
            APPEND
lr_mtart.
        ENDCASE
.
     
ENDLOOP.

*In this part, we do everything necessary to for loading data. As an initial
*step, we need to send the value of our flag to the report code so that it can
*export the data to this function. Remind that we use the same memory id in report code to import the value for pflag. With this EXPORT statement, in
*memory to a space called 'ZFLAGFROMBWFM', the value of pflag is written as
*'X'. The IMPORT statement has to be called from the report code with the same
*memory id, to get the value of pflag.     
pflag = 'X'.
     
EXPORT pflag TO MEMORY ID 'ZFLAGFROMBWFM'.

*Now, the value of pflag is exported to the program ZMATERIALLIST. When we
*submit, the report code is called. We also need to send the required
*selections in this submit command. If no selection is required for BW data
*upload, then in this part, we can remove the assignment of material type. But
*in this case, we need to add some extra code to the selection statement in
*the report code.
     
SUBMIT zmateriallist  WITH mtart = lr_mtart-low AND RETURN.

*And as the final step, we import it_mara from ZMATERIALLIST program to our
*internal table i_e_t_data with this unique memory id: 'ZMATERIALLISTTOBWFM'.     

IMPORT it_mara = i_e_t_data[]   FROM MEMO RY ID 'ZMATERIALLISTTOBWFM'.
   
ENDIF.

    IF
i_e_t_data[] IS INITIAL.
     
RAISE </ span>no_more_data.
    ENDIF
.

   
DO i_maxsize TIMES.
      s_counter_datapakid
= s_counter_datapakid + 1.


     
READ TABLE i_e_t_data INDEX s_counter_datapakid.
      IF
sy-subrc NE 0.
       
CLEAR i_e_t_data[].
       
EXIT.
     
ELSE.
       
APPEND
i_e_t_data TO e_t_data.
      ENDIF
.
   
ENDDO.

 
ENDIF.



Finally we create our datasource using extraction by FM. We use ZBW_MATERIAL_LIST function, we created. And as the structure we select ZMATERIAL which we used in both report code and the function module itself.
As a result, this approach uses the same code for both ECC and BW reports, thus, helping prevent the repetitive software development. One more advantage is that, when a change request arrives from the users, it is only done in report code. No extra effort is spent for BW side.