Download - How to Use Variable Time References in Currency Conversion

Transcript
Page 1: How to Use Variable Time References in Currency Conversion

SAP (SAP America, Inc. and SAP AG) assumes no responsibility for errors or omissions in these materials.

These materials are provided “as is” without a warranty of any kind, either express or implied, including but not limited to, the implied warranties of merchantability, fitness for a particular purpose, or non-infringement.

SAP shall not be liable for damages of any kind including without limitation direct, special, indirect, or consequential damages that may result from the use of these materials.

SAP does not warrant the accuracy or completeness of the information, text, graphics, links or other items contained within these materials. SAP has no control over the information that you may access through the use of hot links contained in these materials and does not endorse your use of third party web pages nor provide any warranty whatsoever relating to third party web pages.

mySAP BI “How -To” papers are intended to simplify the product implementation. While specific product features and procedures typically are explained in a practical business context, it is not implied that those features and procedures are the only approach in solving a specific business problem using mySAP BI. Should you wish to receive additional information, clarification or support, please refer to SAP Professional Services (Consulting/Remote Consulting).

How to…

Use variable time references in currency conversions

BUSINESS INFORMATION WAREHOUSE

Applicable Releases: 3.X

Page 2: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

1998 SAP AMERICA, INC. AND SAP AG TABLE OF CONTENTS

Release date: March 2003

Page 3: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 1

1 Business Scenario

Today, in SAP’s Business Information Warehouse, currency conversion can take place using different parameters defined in a currency translation key (source currency, target currency, exchange rate type and time reference) and in different layers (during update of data to the data targets, at query definition time and at query runtime). The following table gives an overview which currency conversion can be used in which layer:

One major requirement, not fully covered by today’s architecture, is the dynamic time currency conversion using variables in Reporting. The dynamic time reference in the above mentioned table only includes dynamic conversion using a “date InfoObject” (no variable input) or the query key date (applicable in only some business cases, see comment below).

Therefore, this technical solution shows you how to implement multiple and dynamic time currency conversions in one query. This includes especially variable time conversions allowing the customer to execute different conversions to the same target currency using different dates (example: simulate influence of exchange rates on sales). Please note: the variable selection of the target currency mentioned in this paper can be achieved using standard functionality.

PLEASE NOTE THAT WITH BW 3.0B SP 16 / BW 3.1C SP10 A STANDARD SOLUTION TO THIS SCENARIO IS AVAILABLE. PLEASE FIND MORE INFORMATION IN DOCUMENT “HOW TO... USE VARIABLES FOR CURRENCY CONVERSION” AND IN SAP SERVICE MARKETPLACE NOTE 656863.

BEx / Web BExReporting ad hoc

Query Designer

Update Rules

Source currency from data record X X Xfrom InfoObject X

Target currency fixed X X Xfrom InfoObject X Xselection X X X

Exchange rate fixed type X X Xfrom InfoObject X

Time reference fixed X X Xdynamic X X

Page 4: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 2

The solution needs to be implemented only once per InfoCube but is very usable for the BW end users. Only the conversion rates (table TCURR) have to be loaded (and maintained on R/3) on a regular basis. Key benefits of this solution are:

• Very easy to use (simple input of time reference by user)

• Independent of data model (solution works with any Infocube and query).

• Correct aggregation of converted quantities (totals and subtotals are calculated).

• Low performance impact: usage of the OLAP BADI (virtual exit) is not leading to bigger data amounts being processed by the OLAP processor.

• No impact on transaction data stored in the BW database.

2 Introduction

The basis of this technical solution is to use the virtual InfoObject ZCURRDATE for dynamic time reference in the currency translation key. “Virtual InfoObject” means, that this InfoObject is not loaded using the BW data staging (it contains no data on the BW database) and is declared as being “virtual” (ig.processed at query runtime) in a customer enhancement (BADI or SAP enhancement possible, see step by step solution for further details).

Therefore, the date (on which every single line read from the InfoProvider tables is converted in the OLAP processor) will not be retrieved from the BW database, but, will be assigned to ZCURRDATE at query runtime deriving its value from a variable entry.

The following graphic gives you an overview on which implementation steps have to be performed in order to implement such a scenario (more details can be found in the section “The Step by Step solution):

Page 5: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 3

Page 6: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 4

The major steps performed at query runtime will be:

- Enter the date for which the currency conversion has to take place using the characteristics value variable ZCURDAT based on virtual characteristic ZCURRDATE

- Read variable value using the standard exit RSR00001 and assign it to the class attribute CURRDATE

- Assign the value of this class attribute to CURRDATE using the BADI RSR_OLAP_BADI. This BADI only available from BW 3.X onwards was formerly known as “Exit for virtual characteristics and key figures”

- The OLAP processor will then perform a standard currency conversion using a translation key with dynamic time reference based on InfoObject ZCURRDATE

The following objects must be implemented for this solution:

- Characteristics: InfoObject type “date” (ZCURRDATE)

- Currency translation key (ZCURRTK1)

- Characteristic value variable for the time reference: ZCURDAT

- Characteristic value variable for selection of the target currency (ZCURTC) (optional)

- Text Variable: display selected currency conversion date in column header (ZCURDT) (optional)

- BADI Implementation ZCURRCONV with generated class ZCL_IM_CURRCONV

- Static global attribute CURRDATE in class ZCL_IM_CURRCONV

- User Exit: Variable Exit (ZXRSRU01) within enhancement RSR00001

Please be aware of the fact that with BW 3.0B SP8 the Key Date stored in the Query Properties (used for time dependent master data objects) can be used as variable time reference in a currency translation key. This standard technique might replace the following step-by-step solution in some business cases (e.g. if only one conversion is necessary and key date is the date to be used for conversion). For further information see SAP Service Marketplace (OSS) note 570050.

Please note that having a support package level inferior to BW 3.0B SP13 (BW 3.1 Content SP7) this solution (using a virtual characteristic) leads to deactivation of the OLAP Cache per relevant query. From BW 3.0B SP13 / BW 3.1 Content SP7 on, you can set the flag “Use OLAP cache even with virtual chararcteristic / key figure” within the query properties in transaction RSRT WHEN USING THE SOLUTION DESCRIBED IN THIS PAPER. All other queries using the OLAP BADI should be checked case per case on potential reactivation of the OLAP cache!

Page 7: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 5

3 The Step by Step Solution

The following high level implementation steps must be performed. Please find below the recommended implementation sequence (taking into account the dependent objects used in the different steps):

1. Enhance or create InfoProvider with virtual characteristics

2. Create a query and a characteristic value variable on the virtual characteristic

3. Implement RSR_OLAP_BADI

4. Implement variable exit RSR00001

5. Define currency translation keys

6. Implement the currency translation in your query

This step-by-step solution explains how to implement this scenario for an InfoProvider of type “InfoCube”. The same implementation is possible for other InfoProvider types. Only information given in step 1 is InfoCube specific.

Note: during the implementation of this scenario you will get transport dialog boxes at several times (e.g. during activation of objects). Our recommendation is to assign all objects created for this scenario to one transport request (reporting elements need to be collected and assigned to it manually)!

1. Enhance or create InfoProvider with virtual characteristics

1. Create characteristic ZCURRDATE type ‘date’ (Transaction RSD1)

Page 8: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 6

2. Enhance / Create InfoCube with characteristic ZCURRDATE. (Transaction RSA1 or RSDCUBE)

This “virtual” characteristic is getting a value assigned at query runtime and must not be loaded with data. Therefore, no change to existing update rules is necessary !

2. Create query

1. Create a Query in the Business Explorer Query Designer

Page 9: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 7

2. Create Variable ZCURDAT

- Characteristics value variable on characteristic ZCURRDATE

- Variable contains single value, is processed by user entry and is mandatory

- Put this variable in the filter area of the query!

IMPORTANT NOTE:

The last step (putting the variable in the filter area of the query) is mandatory, as the RSR_OLAP_BADI is not called if the virtual characteristic is not part of the query definition! This statement also applies when using the SAP enhancement RSR00002.

Page 10: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 8

3. Implement RSR_OLAP_BADI

Note: This BADI (only available with BW 3.x) can be used alternatively to the SAP Enhancement RSR00002 “BW: Virtual characteristics and key figures in Reporting”. Even if, in BW 3.x, both are available, we opted for this new implementation technique which has clear advantages regarding flexibility and usability.

Means, if you want to “downgrade” this solution to BW 2.x, you need to implement step 3 with the SAP enhancement RSR0002 (same approach, but the coding not identical).

1. Create BADI Implementation ZCURRCONV based on Business Add-In RSR_OLAP_BADI (Transaction SE19).

- Set Filter on InfoProvider or use Wildcard (p.eg. 0SD*). This is very important to only execute the BADI for specific InfoProviders.

- Copy sample code. This can be done in the menu: Goto à Sample Code à Copy. Please note that sample code can only be copied when Implemen-tation is inactive!

Not copying the sample code will result in higher implementation effort on methods and class attributes!

Page 11: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 9

2. Define attributes for generated class ZCL_IM_CURRCONV (Transaction SE24).

- You can get the name of the generated class by looking at the interface tab of your BADI Implementation in transaction SE19.

- Create attribute P_CHA_ZCURRDATE (Level: Instance, Visibility: Public, Type I). This means defining a global variable representing InfoObject CURRDATE.

- Create attribute CURRDATE (Level: Static, Visibility: Public, Type D). This attribute will be called from the variable exit to keep the date value entered in the variable screen of variable ZCURDAT.

3. Implement the DEFINE Method of the interface of the BADI Implementation ZCURRCONV (Transaction SE19 à Interface à double click on DEFINE method)

- Please see appendix for the coding example - Another check on the InfoProvider can be implemented at this time (p.eg. if having worked with wildcards in the BADI Implementation)

- Check on usage of characteristic ZCURRDATE at query definition time (CASE L_S_CHANM_USED). Only then ZCURRDATE will be declared as virtual characteristic and therefore computed during runtime.

- Note that the DEFINE method is called at query generation time. Means, that the best way to debug it is to use transaction RSRT à button “Generate Report”.

- Please note: there is no need to change the INITIALIZE method. Declaration of global attributes for virtual characteristics (or key figures) has been done when maintaining the class attributes (see 3.2.)

Page 12: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 10

4. Implement the COMPUTE method of the interface of the BADI Implementation ZCURRCONV (Transaction SE19 à Interface à double click on COMPUTE method)

- Please see appendix for the coding example - The value of the global attribute CURRDATE is assigned to the virtual characteristc (represented by attribute P_CHA_ZCURRDATE)

- Please remember that the filling of CURRDATE attribute with the variable value will be done in SAP enhancement RSR00001 (see next chapter)

- Please note that the best way of debugging the COMPUTE method is to use transaction RSRT.

3. Implement variable exit RSR00001

1. Implemement SAP Enhancement RSR00001 (transaction CMOD)

- Create project (e.g. RSR00001)

- Assign enhancement RSR00001 to that project

- Double click on EXIT_SAPLRRS0_001 (Customer Exit Global Variables in Reporting)

- Double click on include ZXRSRU01

- Note that project needs to be activated after implementation of ZXRSRU01!

Page 13: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 11

2. Write Include ZXRSRU01

- Coding should only be used for specific InfoCube (IF i_s_rkbid-infocube …)

- Call exit for I_STEP =3, this means after variable entry

- Read entered value for variable ZCURDAT (has been created in 2.2) and assign it to class attribute CURRDATE (see 3.2)

- the variable I_VNAM can not be used as it is not assigned for I_STEP = 3 !

Please note that the best way of debugging this include is to use transaction RSRT.

Additional information: At this stage syntax errors can occur (depending on implementation sequence) informing you that class ZCL_IM_CURRCONV is not defined. You then have to define the class in include ZXRSRTOP of function group XRSR (transaction SE80) using the following statement:

CLASS ZCL_IM_CURRCONV DEFINITION LOAD.

4. Define currency translation keys

1. Create translation keys (transaction RRC1)

- Enter fix exchange rate type

- Source currency: “from data record”

- Target currency: “Selection of target currency with translation”. This enables you to enter the target currency in variable screen when executing the query.

- Time reference: “Variable Time Reference” from “Special InfoObject”. The special InfoObject to enter is the virtual characteristic ZCURRDATE.

Page 14: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 12

5. Implement the currency translation in your query

1. Define currency translation in key figure

- Define the currency translation in the properties of your selected key figure(s) by assigning the currency conversion key (ZCURRTK1).

- Assign a fix target currency or create a variable for selecting the target currency at query runtime (optional)

- In our example we use a variable ZCURTC (based on characteristic 0CURRENCY) which can contain a single value, is processed by user entry and is mandatory.

2. (OPTIONAL) Use a text variable to display the currency conversion date in the column header

- Create text variable ZCURDT with replacement path for characteristic ZCURRDATE

Page 15: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 13

3. Execute the Query

Note that wrong or missing results at this point might occur due to missing exchange rates. Please check all exchange rate types, source currencies, target currencies and time references used in your scenarios on available exchange rates in table TCURR (Transaction SPRO à SAP Reference IMG à BW Customizing Implementation Guide à General Settings à Currencies à Enter exchange rates).

Page 16: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 14

4. (OPTIONAL)

Duplicating this scenario (means creating the same set of objects several times) allows you to convert several key figures in one query to different target currencies for different time references. Note that the variable screen can be arranged in the query properties.

Page 17: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 15

4 Appendix (Sample ABAP Coding)

1. Coding for DEFINE Method of RSR_OLAP_BADI

METHOD IF_EX_RSR_OLAP_BADI~DEFINE . DATA: l_s_chanm TYPE rrke_s_chanm, l_s_chanm_used TYPE rschanm, l_kyfnm TYPE rsd_kyfnm. FIELD-SYMBOLS: <l_s_chanm> TYPE rrke_s_chanm. case i_s_rkb1d-infocube. when 'RHCURCON'. loop at i_th_chanm_used into l_s_chanm_used. case l_s_chanm_used. when 'ZCURRDATE'. l_s_chanm-chanm = 'ZCURRDATE'. l_s_chanm-mode = rrke_c_mode-no_selection. append l_s_chanm to c_t_chanm. when others. endcase. endloop. endcase. ENDMETHOD. "if_ex_rsr_olap_badi~define

2. Coding for COMPUTE Method of RSR_OLAP_BADI

METHOD IF_EX_RSR_OLAP_BADI~COMPUTE . field-symbols: <l_zcurrdate> type d. if not p_cha_zcurrdate is initial. assign component p_cha_zcurrdate of structure c_s_data to <l_zcurrdate>. <l_zcurrdate> = currdate. endif.

ENDMETHOD. "IF_EX_RSR_OLAP_BADI~COMPUTE

Page 18: How to Use Variable Time References in Currency Conversion

HOW TO … USE VARIABLE TIME REFERENCES IN CURRENCY CONVERSIONS

2003 SAP AMERICA, INC. AND SAP AG 16

3. Coding for include ZXRSRU01 of SAP enhancement RSR00001

DATA: l_s_var_range TYPE rrs0_s_var_range.

IF i_s_rkb1d-infocube EQ 'RHCURCON'. IF i_step = '3'. LOOP AT i_t_var_range INTO l_s_var_range WHERE vnam EQ 'ZCURDAT'. ZCL_IM_CURRCONV=>currdate = l_s_var_range-low. ENDLOOP. ENDIF. ENDIF.