Thursday, 25 February 2010

Currency conversion in query

Looking at the properties of a keyfigure,

you sometimes find a currency conversion being executed.
If you're wondering where this conversion is being maintained, take a look at transaction RSCUR

Within transaction RSCUR you can customize/maintain the conversion which should be executed.

Friday, 19 February 2010

Activation of a cube/iobj/mpro/odso in a (closed) production system

Within SAP BI 3.x and also within SAP BI 7.x you have the possibility to activate infocube's, DSO's, etc. in a productive (closed) system, without having to transport them (again) from development.
To achieve this activation, the following ABAP programs can be used:

RSDG_ODSO_ACTIVATE: Activation of all ODS Objects
RSDG_IOBJ_ACTIVATE: Activation of all InfoObjects
RSDG_MPRO_ACTIVATE: Activating Multiproviders
RSDG_CUBE_ACTIVATE: Activation of InfoCubes

Friday, 29 January 2010

ABAP maximum for compiled code (within user exit) reached

Last week we've encountered some strange behavior (read: short dumps) in our BW system. For some strange reason the user exit for variables (function module EXIT_SAPLRRS0_001; include zxrsru01) was generating shortdumps. Analysis revealed that there's a maximum of 32kb of compiled code which the abap runtime environment can handle. (This limitation is not regarding the number of coded lines, but the amount of byte code generated)
This limitation was breached as we've placed all our user-exit code in one big CASE/ENDCASE statement.
When we replaced this big CASE/ENDCASE statement by several smaller CASE/ENDCASE chunks, everything worked fine again.



Thanks to Crispian for the analysis

Wednesday, 27 January 2010

Easily find the request ID you're looking for

Two easy ways to find Request ID's in a BW 7.0 system:

1) Use transaction code RSRQ and enter the request ID you're looking for


2) When 'monitoring' a request ID, you can press SHIFT-F5 or go to the menu-bar and press Request -> Other Request. Within the pop-up which appears, another request ID (the one you're looking for) can be entered.

Friday, 22 January 2010

Adding a filter value within a DTP

It's been a while (in fact: it's been to long) since I've last posted a blog entry. The reason for this was that I've been working as a team-lead the last couple of months. Therefore I was more 'occupied' with leading a team, then I was with inventing/discovering great BI 7.0 solutions....
But as I'm back in the saddle, I'm proudly presenting my first 2010 blog entry:

Within the DTP-extraction tab, you're able to set a filter to control the data you're going to extract:


The standard coding which will be displayed will be something like this:

read table l_t_range with key fieldname = ' '.
l_idx = sy-tabix.
if l_idx <> 0.
   modify l_t_range index l_idx.
else.
   append l_t_range.
endif.

Please be aware that, if l_idx = 0 and thus no entry is found in table l_t_range, you also have to fill in the fieldname

Eg. Usually, for filling a range, the following code is entered:
   l_t_range-sign = 'I'.
   l_t_range-option = 'EQ'.
   l_t_range-low = 'something'
This coding is sufficient when the read statement (read table l_t_range with key fieldname = 'whatever') finds an entry in table l_t_range...and thus l_idx <> 0.

When no entry is found (and thus l_idx = 0) you also have to add the following line to the code
   l_t_range-fieldname = 'FIELDNAME'.
otherwise filling the range has no added value...as the system does not know for which field the range should be filled....

Friday, 30 October 2009

Exclude query to use BW Accelerator (BWA)

What's in a name :
High Performance Analytics(HPA) became Business Intelligence Accelerator(BIA) which became Business Warehouse Accelerator(BWA) which will, eventually, become Open Database Analytics(ODA).

Anyway: After you've enabled a cube to be indexed/loaded to the BWA, all queries belonging to that cube will be executed via the BWA. You're able to exclude a particular query, belonging to a "BWA-cube", to be ran via the BWA.
Find the query which shouldn't use the BWA via SE16 and table RSRREPDIR.
Within table RSRREPDIR, set field NOHPA (=Do Not Use HPA Index) to 'X' and save the change. From now onwards, the particular query will not use the BWA eventhough the cube it "runs" on is BWA enabled.

Friday, 16 October 2009

Debug startroutine in BI 7.0

Within BI 3.x it was quite easy to debug your startroutine. Pressing the sequence F7 -> F6 -> F5 brought you directly to the startroutine (code). Within BI 7.0 the "F7->F6->F5" trick doesn't work anymore.
To debug a startroutine in BI 7.0, the following steps need to be executed:

1) Go to Display Generated Program within the transformation

2) Jump all the way down to find some startroutine coding you recognize :-) and place a break-point.

3) Find the load you want to debug within the DTP monitor

4) Press the debugging button

5) Execute the debugging request and the execution will stop at the break-point which has been created/set at step 2.


Big thanks go out to Freek Geldof who provided the necessary information!

Monday, 5 October 2009

ADAPT: Application Design for Analytical Processing Technologie

I had the pleasure to attend a training at SAP Netherlands in which the ADAPT modeling methodology was explained. As I've become very enthusiastic about this modeling "tool", I'd recommend you all to read the following white paper, written by the Symmetry Corporation.

Monday, 28 September 2009

Hierarchy on navigational attribute decreased query performance

A multiprovider, based upon 5 different infoproviders and 2 infoobjects, was causing a performance drain whenever a query was executed.
Every query, based upon this multiprovider, contained a hierarchy on a navigational attribute of an infoobject.
Eg. Infoobject A --> navigational attribute B --> Hierarchy C.
To make sure that the hierarchy was displayed correctly, also infoobject B was added to the multiprovider, eventhough this had no added value (as no "fact" data was to be displayed which "belongs" to infoobject B)
Infoobject B (IOB in the picture below) is a navigational attribute of 0MATERIAL

Infoobject B (IOB) has been added to the multiprovider and was identified (assigned) via the checkbox.
After the checkbox was "un-ticked" (as seen in the picture above; red arrow) and thus infoobject B was no longer part of the identification, the query performance increased.
Conclusion: Know what you're doing when inserting infoobjects in a multiprovider as mis-usage can drastically decrease performance!

Wednesday, 23 September 2009

Making an added function module (to a function group) visible in SE80

After creating an (additional) function module within a function group, it wasn't visible within SE80 after it was transported to another BW system.
When displaying the function group, via transaction SE80 --> Function Group, the newly created function module WAS NOT visible, even though the import/transport ended without errors.
The trick, to make all function modules visible within the function group, is to update the navigation index as shown in the screen-grab below:

Friday, 18 September 2009

Create or maintain currency translation types

A currency translation type is a combination of different parameters that establish how the exchange rate for the translation is determined. Currency translation types can be created or maintained via transaction RSCUR
For more info regarding currency translation types, click here

Wednesday, 9 September 2009

Find out if R/3 field is already transferred to BW

When executing a fit/gap analysis (are all necessary R/3 fields already extracted and transferred to BW), table RSOLTPSOURCEFIE can be used.
Within the selection screen you can enter, for example, R/3 field MATNR if you want to know in which datasources MATNR is used.

The screenshot below shows the overview of all datasources which use R/3 field MATNR:

To see, per datasource/transfer structure, to which infoobject the R/3 field is mapped, table RSTSFIELD can be viewed.
In the screengrab below you can see that R/3 field MATNR is mapped to infoobject 0MATERIAL within several transferstructures/datasources.

Prevent automatic migration of 3.x queries to version 7.0

Once you've migrated a 3.x query to version 7.0, you can't alter it anymore within a 3.x query designer, as a 7.0 query is not downward compatible.
(Even though you can still execute a migrated 7.0 query with a 3.x BEx Analyzer/Query designer, you aren't able to alter it anymore)
OSS Note 962530 (NW04s: How to restrict access to Query Designer 2004s) explains the necessary steps to take to prevent unwanted migration of queries.

Thursday, 27 August 2009

Display joblog (SM37) in source system

After having upgraded a customers BI system to version 7.0 last weekend (and worked lots of hours), the last step was to extract the missing delta data from the R/3 source system. As a pre-caution all collective runs were stopped in both clients, prior to the upgrade, so they needed to be restarted (by CONTROL-M).
When I logged on to client A of the R/3 system and watched the joblog of the collective run, I found out that data was extracted from the Qrfc and placed within the delta queue. Unfortunately the delta queue (RSA7) showed no delta data, so I was really puzzled.
Luckely a not so tired colleague pointed out that SM37 is CLIENT INDEPENDENT and thus I was looking at the joblog of the collective run which has ran in client B (Even though I was logged on to client A)!!


To make sure that you're looking at the right joblog, it's advisable to always display the client within the joblog overview.
Settings --> Layout --> Change layout (drag CLIENT from right to left)

Tuesday, 18 August 2009

Shortdump when accessing a (role) menu

When logging on to a BW system via the SAPGui, you can access your user (role) menu. Within this user menu/SAP easy access menu, a hierarchy of roles/menu entries will be displayed upon wich can be clicked. Clicking such an entry generated a shortdump (MESSAGE_TYPE_X) which was not self explanatory. (Program CL_GUI_CFW====================CP dumps)
Searching OSS led to note 362883 which advised to enter 3 values in table SSM_COL.

The values displayed in the picture above are max. values. Exceeding these max. values has no purpose as the default value will be taken (in case of exceeding).

Tuesday, 4 August 2009

Inconsistent Multiprovider after upgrade to version 7.0

After having upgraded to SAP BI version 7.0, several multiproviders became inconsistent. (Starting a query, based upon these multiproviders, ended with a BRAIN 152 error)
Inserting a "NO_A135_A152" entry to table RSADMIN solves the problem. You can use program SAP_RSADMIN_MAINTAIN to add an entry to the RSADMIN table
(For more info please check OSS note 1086744)

Wednesday, 29 July 2009

TEMSE errors within system log (SM21)

When browsing through the system log (as many background jobs failed with no specific reason), I found several "TEMSE" related log entries.

Executing transaction SP12 starts the TEMSE cockpit in which you can execute a consistency check. (Temse Data Storage -> Consistency check).

After several minutes the screen above, regarding the results of the consistency check, were shown. By deleting the complete TEMSE database (button DELETE ALL), no more TEMSE system log entries were generated and the background jobs (which failed in the beginning) ended successfully again.

Which authorization objects are checked while executing a transaction

If you wonder which authorization objects are being checked while executing a transaction, transaction code SU24 is very usefull.
Start transaction SU24 and enter the transaction code you want to check (eg. RSA1)

A list will be displayed containing all authorization objects which can be checked. Column Check Ind. triggers the actual checking. If this column contains a "C/Check" entry, the authorization object will be checked, otherwise the authorization check will be ignored.

Column Proposal can be clicked whenever it contains an YS entry. The following data will be displayed when clicking the YS entry:

Saturday, 25 July 2009

EEDO516X error while upgrading from BI 3.5 to BI 7.0

While upgrading a BI 3.5 system, which includes QlikView, from version 3.5 to version 7.0, the following error occurred in the ACT_700 phase:

1EEDO516X"Index" "/QTQVC/TABLECONT" "Z01" could not be activated
1EEDO516 "Index" "/QTQVC/USERCONT" "Z01" could not be activated

For me it was very strange that a SAP upgrade could not continue because a non SAP component (read: An index on a QlikView table) could not be activated.
(You can drop and recreated indexes "easily" via SE14, so what's the big deal??)

Luckely SAP agreed as contacting them via a customer message taught us we could IGNORE the error as displayed above and continue our upgrade....

Thursday, 23 July 2009

How to check if JAVAstack has been installed and configured

After the JAVAstack has been installed, it also needs to be configured. When you do not have sufficient authorization the check if the configuration has been executed, table RSPOR_T_PORTAL may come in handy.
When no entries exist within this table, JAVAstack has not been configured.

Wednesday, 22 July 2009

Transport a released local ($tmp) transport

When you've released a local ($tmp) transport and still want to transport it across the system landscape, a transport of copies needs to be created.
Create, via SE01, a transport of copies as shown in the screengrab below

Select the transport of copies number and, via the menu, go to Request/Task --> Object List --> Include Objects (CTRL + F11)

A popup will appear in which you enter/select the local ($tmp) transport which has already been released (as shown in the screengrab below)

All objects contained in the released transport will be embedded in the transport of copies-transport which can be transported across the system landscape.

Set User ID for Source System Communication

RSCUSTA

Tuesday, 21 July 2009

Function module to find out if the Attribute Change Run is active

You can find out if the ATTRIBUTE CHANGE RUN is active by calling function module RSDDS_CHANGERUN_MONITOR
If import parameter e_ts_state_cr contains an entry, the ATTRIBUTE CHANGE RUN is active.

Monday, 20 July 2009

Find out in which MASTERchain a LOCAL (process)chain is embedded

If you have the technical name of a process chain (and you want to execute it via transaction RSPC1), you might need to know if you're going to execute the MASTER process chain or (just) a LOCAL process chain.
You can find out the "link" between a local process chain and it's MASTER process chain via the content of table RSPCCHAIN.
(SE16, table RSPCCHAIN, OBJVERS=A, VARIANTE=local process chain name)

The result of the above SE16 selection will show the following result:

The local process chain name can be found in the column VARIANTE as where the MASTER process chain name is to be found within column CHAIN_ID

Friday, 17 July 2009

Usefull (std. SAP) ABAP programs within a SAP BI environment

Listed below several "may come in handy" ABAP Programs (within a SAP BI environment)

RSCDS_NULLELIM: Delete fact table rows where all Key Figure values are zero. See Note 619826.
RSDG_CUBE_ACTIVATE: Activation of InfoCubes
RSDG_CUBE_COPY: Make InfoCube Copies
RSDG_CUBE_DELETE: Delete InfoCubes
RSDG_DODS_REPAIR: Activation of all ODS Objects with Navigation Attributes
RSDG_ODSO_ACTIVATE: Activation of all ODS Objects
RSDG_IOBJ_ACTIVATE: Activation of all InfoObjects
RSDG_IOBJ_DELETE: Deletion of InfoObjects
RSDG_IOBJ_REORG: Repair InfoObjects
RSDG_IOBJ_REORG_TEXTS: Reorganization of Texts for InfoObjects
RSDG_MPRO_ACTIVATE: Activating Multiproviders
RSDG_MPRO_COPY: Make Multiprovider Copies
RSDG_MPRO_DELETE: Deleting Multiproviders
RS_COMSTRU_ACTIVATE_ALL: Activate all inactive Communication Structures
RS_TRANSTRU_ACTIVATE_ALL: Activate Transfer Structure
RS_PERS_ACTIVATE: Activating Personalization in Bex(Inactive are highlighted)
RSAU_UPDR_REACTIVATE_ALL: Activate Update Rules
RRHI_HIERARCHY_ACTIVATE: Activate Hierarchies
RSSM_SET_REPAIR_FULL_FLAG: Convert Full Requests to Repair Full Requests
SAP_AGGREGATES_ACTIVATE_FILL: Activating and Filling the Aggregates of an InfoCube
SAP_AGGREGATES_DEACTIVATE: Deactivating the Aggregates of an InfoCube
SAP_INFOCUBE_DESIGNS: Print a List of Cubes in The System and Their Layouts
SAP_ANALYZE_ALL_INFOCUBES: Create DB Statstics for all InfoCubes
SAP_CREATE_E_FACTTABLES: Create Missing E-Fact Tables for InfoCubes and Aggregates
SAP_DROP_EMPTY_FPARTITIONS: Locate/Remove Unused or Empty partitions of F-Fact Table
SAP_DROP_TMPTABLES: Remove Temperory Database Objects
SAP_RSADMIN_MAINTAIN: Add, change, delete RSADMIN table entries
SAP_CONVERT_NORMAL_TRANS: Convert BasisCube to Transactional Cube and the other way around.
CUBE_SAMPLE_CREATE: A fast way to put some "sample" records in a InfoCube. No need to use flatfiles, just enter the value in a ALV-Grid or let the Cube be filled with random value.