Tag Archives: integrated planning

BPC Notes

BPC Terminology

Changes in terminology : (10 vs 7.5)

  • Environment – Appset
  • Models – Application
  • Control Settings – Validation Rules
  • Logic Script – Script Logic
  • Audit Report settings – System report settings

BPC 10.1

Regarding de Unified Planning Model:

  • Underlying models uses the IP (PAK) backend (BW datamodels instead of BPC dimensions…)
  • Planning functions are IP based (ABAP, FOX) vs BPC based (script logic…)
  • The EPM Add-In + BPC Web front end (SAP UI5 based) are used as front end
  • BPC functions as BPF, work status, data auditing are used

Here is a good overview of BPC 10.1: The SAP BPC 10.1 FAQ

Differences between versions 7.5 vs 10.0

http://learnsapbyyourself.blogspot.be/2012/11/what-is-sap-bpc.html

SAP Document: Overview and What’s New in SAP BusinessObjects EPM 10.0

http://sapexperts.wispubs.com/financials/articles/a-comparison-of-the-reporting-capabilities-of-sap-bpc-10-0-and-sap-bpc-7-x-versions?id=795f21918d1b4ebf876e2af5d8835fa8

  1. No .net server in 10 where as it is required in 7.5. All services will be exposed as RESTful web services for internal communication between BPC clients and server.
  2. Granual transport is possible in 10 whereas it is not possible in 7.5.
  3. New UI look for BPC web in 10 as compared to 7.5. and common EPM Add-in in 10. Business user interface is now flex based in 10.
  4. No more active directory or CMS, net weaver authorization is required in 10.
  5. In BPC 10, data manger will now support loading directly from SAP ERP system both in FULL & DELTA mode through SAP delivered extractors.

1. SAP BPC 10 replaces SAP BPC 7.5
2. SAP BPC 10 requires SAP BW 7.3 system and standalone .NET server is no longer required
3. SAP BPC 10 can work on SAP HANA
4. Old EVDRE has been replaced by SAP EPM 10 client. Old EVDREs will still work but wizard to create new EVDRE is no longer present.
5. Versions supported by SAP BPC 10 (A) Windows – Vista, XP and 7.
(B) Internet explorer 7 and 8
(C) Microsft office 2007 and 2010.
6. Incremental consolidation is supported by SAP BPC 10.(Ability to run FX and consolidation only on data that has been changed since last run)
7. SAP BPC MS and NW 7.5 both use automatic BPF.
8. Free standing Admin client has been deprecated and all of the functionality is now presented through the new web interface.

The most significant difference between BPC 7.5 and 10 is Excel reporting. To my mind the EV functions in BPC 7.5 were much simpler for the finance people and they were able to create and maintain templates practically without IT support. Not the case for BPC 10.

Delete all locks to Planning Cube via BEx Workbook

clearlocks

In our planning application we give the central controller the possibility of deleting all locks to the Planning Infocube to prepare for some central functions (as central settlement of all WBSs, or central version copy).

Here is how we proceed.

1) Create a Custom Planning Function type. This planning function type does nothing to the data it receives, but instead removes all locks on the desired Infoprovider. See below the code for the EXECUTE Method and the Settings for the PF Type. Note that the Planning Function has 1 parameter which is the name of the Infoprovider to be unlocked.

2) Create a Planning Function on any Aggregation Level not related to the Planning Cube that you wish to unlock. (Otherwise, the unlock Function might fail due to  locking conflicts with the locks it aims to clear!!).  Assign a BEx Variable of type Char, Single Value, Mandatory initial not allowed, on 0INFOPROV to the input parameter.

3) Create a filter in such a way that it will always return at least 1 record (otherwise the Planning Functions EXECUTE method will not be called).

4) Create a Planning Sequence on the Aggregation Level above, using the filter and the planning function.

5) Call the Planning Sequence from a BEx Command Button in the BEx Workbook. The button should contain the following command sequence.
CMD      1     EXECUTE_PLANNING_SEQUENCE
PLANNING_SEQUENCE_NAME 1 <name of the Planning Sequence>
VAR_1_NAME    1  <name of variable on 0INFOPROV>
VAR_1_VALUE   1  <name of Infoprovider to unlock>

Settings for the planning function in RSPLF1

Properties Tab
- Without blocks
- Hide Column of Chars. To Be Changed
Parameter Tab
Parameter = INFOPROV / Description = INFOPROV
Parameter Type = Elementary
InfoObject = 0INFOPROV
Variables Allowed => Checked.

Code for the EXECUTE method of the planning function

method if_rsplfa_srvtype_imp_exec~execute.

*********************************************************************************
*
*               DECLARATIONS
*
*********************************************************************************

  data:
        l_r_param type ref to if_rsplfa_param_elem,
        l_infoprov type rsinfoprov.

  data:
        l_msgv type symsgv,
        log_handle type balloghndl,
        t_log_handle type bal_t_logh,
        log type bal_s_log,
        log_msg type bal_s_msg.

********************************************************************************
*
*               LOGIC
*
*********************************************************************************
  "Log some infos

  field-symbols:
        <s_data_charsel> type rsplf_s_charsel.

  log-extnumber = 'Infrabel IP Logging'.
  log-object  = 'ZIIP'.
  log-subobject = 'ZIIP'.
  log-aldate = sy-datum.
  log-altime = sy-uzeit.
  log-aluser    = sy-uname.
  log-alprog    = sy-repid.
  call function 'BAL_LOG_CREATE'
    exporting
      i_s_log      = log
    importing
      e_log_handle = log_handle
    exceptions
      others       = 1.

  " Get number of periods to be closed via parameter 'PERIODS' type FISCPER3
  l_r_param = i_r_param_set->get_param_elem( 'INFOPROV' ).
  l_r_param->get_value( importing e_value = l_infoprov ).

  concatenate 'Remove all user locks to: ' l_infoprov into l_msgv.
  log_msg-msgty     = 'I'.
  log_msg-msgid     = 'ZIIP'.
  log_msg-msgno     = '000'.
  log_msg-msgv1     = l_msgv.  " set to Planning Function
  log_msg-msgv2     = ''.  " set to value of filter
  log_msg-msgv3     = ''.  " set to planning sequence if any
  log_msg-msgv4     = ''.  " planning function step

  call function 'BAL_LOG_MSG_ADD'
    exporting
      i_log_handle     = log_handle
      i_s_msg          = log_msg
    exceptions
      log_not_found    = 1
      msg_inconsistent = 2
      log_is_full      = 3
      others           = 4.

  append log_handle to t_log_handle.
  call function 'BAL_DB_SAVE'
    exporting
      i_t_log_handle = t_log_handle.

  data: t_enq    type standard table of seqg3,
        t_enq_f  type standard table of seqg3,
        w_eng    type seqg3,
        v_result type sy-subrc,
        v_cube   type char30.

  refresh: t_enq_f,
           t_enq.

  move l_infoprov to v_cube.

* READ LOCKS
  call function 'ENQUEUE_READ'
    exporting
      gclient                     = sy-mandt
      gname                       = 'RSPLS_S_LOCK'
*   GARG                        = ' '
      guname                      = ''
*   LOCAL                       = ' '
*   FAST                        = ' '
* IMPORTING
*   NUMBER                      =
*   SUBRC                       =
    tables
      enq                         = t_enq
* EXCEPTIONS
*   COMMUNICATION_FAILURE       = 1
*   SYSTEM_FAILURE              = 2
*   OTHERS                      = 3
            .
  if sy-subrc = 0
     and t_enq[] is not initial.
* QUEUE NOT EMPTY

    if v_cube ne space.
*---ONLY FILTER ENTRIES FOR REQUESTED IP_CUBE
      loop at t_enq into w_eng.
        if w_eng-garg cs v_cube.
          append w_eng to t_enq_f.
        endif.
      endloop.
    else.
      t_enq_f[] = t_enq[].
    endif.

    if not t_enq_f[] is initial.
*---DELETE QUEUEE
      call function 'ENQUE_DELETE'
        exporting
          check_upd_requests    = 0
          suppress_syslog_entry = ' '
        importing
          subrc                 = v_result
        tables
          enq                   = t_enq_f.
    endif.
  endif.

endmethod.

Use of BPS CCA Retraction via custom Planning Function Type (CL_RSPLFC_BPS_EXITS)

In this post I describe the step by step process you should use to execute BPS CCA Retraction to R3 thorough an IP Planning Function.

In my business scenario, users want to be able to synchronize R/3 plan data as soon as they save the changes made via a BEx Workbook, so that they can perform some extra steps (ie. they cannot approve a PO if the Plan amount is not available in R3).

  1. Prerequisite: Setup BPS retraction. This means that you have created in BPS:
    a.  Planning Area over the Real Time Infocube that contains the IP CCA data to be retracted.
    b. I am not sure that the Planning Level, Planning Function (calling the BPS CCA Exit) and Parameter Group are necessary. In myu environment they had been setup for BPS based retraction.
  2. Create a set of Infoobjects that will be used to setup the Ip Function Type Parameters that neet to match the BPS Function Parameters. See below for the list of infoobjects. You then need to maintain some values for each infoobject. All infoobjects created should be set ‘without master data’ and with language independent medium text.
  3. Create a Planning Function Type Z_BPS_CCA_RETRACTION.
    Set Class to CL_RSPLFC_BPS_EXIT and Check the Reference Data option.
  4. Add Parameters to the Planning Function as follows.
  5. Prepare an aggregation level. Create a filter that will select the data to be retracted.
  6. Create a planning function using the Function Type Z_BPS_CCA_RETRACTION. Do not set any field as “to be changed”
    Set the Parameters as follows:
  7. Create a Planning Sequence with 1 step to execute the function.
  8. To debug: SE80 class CL_RSPLFC_BPS_EXIT. Put a breakpoint at the start of each method. Check the content of C_TH_DATA and also the content of the other tables that are passed to the Init and Exec BPS functions.

Name of the BPS Exit FM = UPR_COST_PLAN_EXEC – UPR_COST_PLAN_INIT

HowTo call BPS Exit from IP => http://scn.sap.com/docs/DOC-16115

Documentation on Class CL_RSPLFC_BPS_EXITS http://www.consolut.com/en/s/sap-ides-access/d/s/doc/N-CL_RSPLFC_BPS_EXITS

Implementation example by a IP Consultant : http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/a0b39ee8-cf4a-2d10-e68c-af5a232bfae8?QuickLink=index&overridelayout=true

SAP Help / SEM 3.5 / CCA Retraciton http://help.sap.com/saphelp_sem350bw/helpdata/en/99/97157967e3440a94d199538959cd0b/frameset.htm

SAP Help on BPS Exit functions: http://help.sap.com/saphelp_nw70ehp1/helpdata/en/81/b54aa832e911d4b2c10050dadfb23f/frameset.htm

Links referring to this:

http://scn.sap.com/thread/1239098 (unsolved)

http://scn.sap.com/thread/531339 (2007, unsolved)

http://scn.sap.com/thread/470281 (2007, unsolved)

Create InfoObjects to mirror the BPS PF parameters (all with no MD+ Medium Text not lang dep)

ZBPSPN1 / NUMC 1 used to pass all BPS Exit NUMC 1 parameters

ZBPSPBUS, ZBPSPCAS, ZBPSPFLG copies of ZBPSPN1

ZBPSPC1 / CHAR 1 used to pass all BPS Exit CHAR 1 parameters

ZBPSPDLT, ZBPSPTST copies of ZBPSPC1

ZBPSPC3 / CHAR 3 used to pass all BPS Exit CHAR 3 parameters

ZBPCPC30 / CHAR 30 used to pass all BPS Exit CHAR 30 parameters

ZBPSPCAR, ZBPSPCEL, ZBPSPTYP copies of ZBPCPC30

ZBPCPC32 / CHAR 32 used to pass all BPS Exit CHAR 32 parameters

ZBPCPC40 / CHAR 40 used to pass all BPS Exit CHAR 40 parameters

RPSPLF1 settings – Parameters

All Elementary

Parameter / IOBJ / BPS Data Element

AREA / ZBPSPC8 / ???

BUSI / ZBPSPBUS / I_BUSI

CASE / ZBPSPN1 / I_CASE

DELTA / ZBPSPC1 / DEL_BOOK

MAPP / ZBPSPC40 / KCD_REPID

RFC_DEST / ZBPSPC32 / RFCDEST

TEST / ZBPSPTST / TST_X

VERSR3 / ZBPSPC3 / I_VERS

WAIT / ZBPSPFLG / I_WAIT

ZARE / ZBPSPCAR / I_COAR

ZELM / ZBPSPCEL / I_CELM

ZTYP / ZBPSPTYP / I_CTYP

Maintain master data of appropriate element to be able to use a value in RSPLAN in tha Planning Function

ZBPSPBUS

6 Cost Center Accounti
7 Internal Orders
8 Activity-Based Costi
9 Project System

ZBPSPCAS

1 Activities/Prices
2 Activity Input
3 Statistical Key Figu
4 Primary Costs

ZBPSPDLT

0 Add Values to Existing Values
1 Update Values Absolute

ZBPSPTST

0 Execute Update
1 Test Without Update

ZBPSPFLG

0 No
1 Yes

ZBPSPC40

UPB_SND_COPS Retraction of PS  (for MAPP / KCD_REPID)

ZBPSPC32

SI2CLNT111 (for RFC_DEST value)

BEx Analyzer – Workbook Command Button – Syntax

See sap help: http://help.sap.com/saphelp_bpc70sp02/helpdata/en/45/9d0fbe42c40063e10000000a11466f/frameset.htm

CMD = RRI?? => http://scn.sap.com/thread/314120

RQV => ?Restore Initial Query View? => See note 1609252
PROFF = ?

Button to change or set the data provider

– create ’empty’ dataprovider (e.g. DATA_PROVIDER_2)

– use following code to reset DATA_PROVIDER_2 to a BEx Query

DATA_PROVIDER     1     DATA_PROVIDER_2
CMD                     1     RESET_DATA_PROVIDER
RQV                     1
PROFF                     1
INFOCUBE     1     Infocube technical name
QUERY                     1     Query technical name

– use following code to reset DATA_PROVIDER_2 to a BEx Query View

DATA_PROVIDER     1     DATA_PROVIDER_2
CMD                     1     RESET_DATA_PROVIDER
RQV                     1
PROFF                     1
INFOCUBE     1     Infocube technical name
DATA_PROVIDER_ID                     1     Query View technical name

SAP BI IP – Data Slices

Data Slices and Performance => http://benxbrain.com/en(bD1lbiZjPTAwMQ==)/index.do?onInputProcessing=brai_thread&001_thread_id=1425646%20&001_temp=R3TR%7cCLAS%7cCL_RSPLS_DS_EXIT_BASE%7cIF_RSPLS_DS_METHODS~IS_PROTECTED%7cWD4

Char Derivation and Perf =https://websmp230.sap-ag.de/sap(bD1lbiZjPTAwMQ==)/bc/bsp/spn/sapnotes/index2.htm?numm=1067433

BPS Planning Function Exit Article -> http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/e096f9be-ca48-2b10-51af-9a7d4ac0f159?QuickLink=index&overridelayout=true&31486405264768

How to use BPS and Business Intelligence Integrated Planning in Parallel – Data Slices and Characteristic Relations (NW7.0) – http://scn.sap.com/docs/DOC-16114

Custom IP Planning Function Types

Read c_th_data record

you can still use read table with key. The trick is to copy the values from the block characteristics I_S_BLOCK_LINE into a structure your ls_data and change and adapt the structure according to your needs. Then you can use  the read table into ls_data2 from ls_data. This way it will work.  < add example>

You can find an example e.g. in CL_RSPLFC_DISTR_KEY method IF_RSPLFA_SRVTYPE_IMP_EXEC~EXECUTE. Add the end of the code p_r_distribution->distribute is called. In this method you can find an example:

READ TABLE c_th_data ASSIGNING <s_data2> FROM <s_distr_data>.

So you are using the hashed key and fill the values you are looking for into  <s_distr_data>.

Reference data

http://scn.sap.com/thread/1756926

Messages in Planning Function Type methods
See note 1815440 – Planning funtion relevant information messages are suppressed in BW 7.3x and not suppressed in BW 7.0x

See SCN forum post on the subject http://scn.sap.com/message/14064844

Just create a Message and use the method i_r_msg->add_msg( ) to return it.

E,A,X messages are always displayed on the Web or BEx Analyzer. Other messages are suppressed by default as of BW 7.3 , unless you flag them as problem class “Very High”. This works as of SP7 or via Note 1653610.

To flag a message as “Very High” pass ‘1’ as parameter in the add_msg method

Error message:

MESSAGE E001(rsplf) WITH l_msg INTO l_msg.
i_r_msg->add_msg( ).  " No need to mention problem class

Warning or info message

MESSAGE W001(rsplf) WITH l_msg INTO l_msg.
i_r_msg->add_msg( '1'  ).  " Mention '1' as problem class
MESSAGE I001(rsplf) WITH l_msg INTO l_msg.
i_r_msg->add_msg( '1'  ).  " Mention '1' as problem class

Passing parameters

Elementary Types:

Example: Passing a 0VERSION value via a BEx variable.

1) In RSPLF1 / Parameter: create a parameter: parameter = VERSION, description = Version, parameter type = Elementary
Structure Parameters = leave empty, Parameter is Tabluar = unchecked, InfoObject = 0VERSION, Copy InfoObject Text = unchecked
Internal Default Val = leave empty, Variables allowed = checked

2) Create a PF using the planning function type. Assign a version value or a variable

3) In the code of the Planning Function Type class  ( in execute method for example)

DATA:
l_r_version type ref to if_rsplfa_param_elem,
l_version type /bi0/oiversion.

" Get version from parameter elementary "VERSION"
l_r_version = i_r_param_set->get_param_elem( 'VERSION' ).
l_r_version->get_value( importing e_value = l_version ).

Objects in INIT_EXECUTION

  1. Use i_r_infoprov object. Get the list of objects with  methods get_infoprov , get_t_charnm and get_t_keyfnm of i_r_infoprov_desc.  See CL_INM_FUNC_TYPE_CALC_PRODCOST->INIT_EXECUTION as example.
  2. Use i_r_msg. Returns  error messages in object i_r_msg.  See CL_INM_FUNC_TYPE_CALC_PRODCOST->INIT_EXECUTION as example.
  3. Use i_r_srv object. Provides info on the calling planning function via methods below. Check CL_INM_FUNC_TYPE_DEL_LCKD_VERS as example.
  • i_r_srv->get_name()
  • i_r_srv->GET_TEXT()
  • i_r_srv->GET_SRVTYPENM()
  • i_r_srv->GET_INFOPROV()
  • i_r_srv->GET_TAB_CHAR_USAGE()
  • i_r_srv->GET_PARAM_SET_RULES()
  • i_r_srv->GET_ADMIN_INFO()
  • lt_param_set_rules = i_r_srv->get_param_set_rules( ).
    Ex:
    lr_param_set = ls_param_set_rule-r_param_set.
    lt_param_keyfigures = lr_param_set->get_tab_param_struc( ‘KEYFIGURES’ ).
    lr_param_target_data_sel = lr_param_set->get_param_data_sel(‘CHA_VALUES’).

Use i_r_infoprov.

METHOD if_rsplfa_srvtype_imp_exec~init_execution.
mv_execute_pf = abap_true.
mv_infoprovider = i_r_infoprov_desc->get_infoprov( ).
mt_charnm = i_r_infoprov_desc->get_t_charnm( ).
mt_keyfnm = i_r_infoprov_desc->get_t_keyfnm( ).

* Make sure all necessary Characteristics are provided by the InfoProvider:
is_cha_included( iv_cha = '0MATERIAL' ir_msg = i_r_msg ).
is_cha_included( iv_cha = '0INM_PQUNIT' ir_msg = i_r_msg ).
is_cha_included( iv_cha = '0UNIT' ir_msg = i_r_msg ).

* Make sure all necessary Keyfigures are provided by the InfoProvider:
is_kyf_included( iv_kyf = '0AMOUNTFX' ir_msg = i_r_msg ).
is_kyf_included( iv_kyf = '0AMOUNTVR' ir_msg = i_r_msg ).
is_kyf_included( iv_kyf = '0INM_PDQTY' ir_msg = i_r_msg ).
is_kyf_included( iv_kyf = '0INM_PDCOST' ir_msg = i_r_msg ).
is_kyf_included( iv_kyf = '0INM_LOTSIZ' ir_msg = i_r_msg ).

ENDMETHOD.

Use i_r_msg.

data: lv_dummy type char100.
MESSAGE ID 'INM_PPA' TYPE 'E' NUMBER 001
WITH iv_cha mv_infoprovider
INTO lv_dummy.
ir_msg->add_msg( ).

SAP Integrated Planning Planning Sequence Logging

Business Scenario

To monitor performance of the execution of planning functions and sequences in SAP Integrated Planning application, we needed to setup a mechanism to log generic messages with timestamps.

Solution

I created a Planning Function based on a ‘dummy’ Aggregation Level / Real Time Infoprovider that only processes 1 record and does nothing apart from logging a message in the SAP Application Log.  This function can then be called within existing sequences to log execution duration of the complete sequence or of individual steps.

Implementation instructions

Creation of Objects and Cubes

  • Info Object Char IIP_MSG / CHAR 3 / With MD (no attributes) + Text Short => Maintain at  value ‘001’ in Master Data
  • Need one KF (ex 0QUANTITY)
  • Create Real Time Infocube IIP_LOG=> 1 dimension with Char IIP_MSG, 1 key figure (ex ICOUNT)

Creation of Planning Function Type and logging entries (SLG0)

  • Create a Class for logging named Z_IP_LOG_TS by copying the example  Planning Function Type class CL_RSPLFA_SRVTYPE_IMP.
  • Edit method IF_RSPLFA_SRVTYPE_IMP_EXEC->INIT_EXECUTION
method if_rsplfa_srvtype_imp_exec~init_execution.
" Enter a Log in SLG1 for Object ZIIP, SubObject ZIIP
" The log message contains the TS + Calling PF name

  DATA:
         log_handle TYPE balloghndl,
         t_log_handle type BAL_T_LOGH,
         log TYPE bal_s_log,
         log_msg TYPE bal_s_msg.
   log-extnumber = 'Infrabel IP Logging'.
   log-object  = 'ZIIP'.
   log-subobject = 'ZIIP'.
   log-aldate = sy-datum.
   log-altime = sy-uzeit.
   log-aluser    = sy-uname.
   log-alprog    = sy-repid.
   CALL FUNCTION 'BAL_LOG_CREATE'
     EXPORTING
       i_s_log      = log
     IMPORTING
       e_log_handle = log_handle
     EXCEPTIONS
       OTHERS       = 1.

   log_msg-msgty     = 'I'.
   log_msg-msgid     = 'ZIIP'.
   log_msg-msgno     = '000'.
   log_msg-msgv1     = sy-msgv1.  " set to Planning Function 
   log_msg-msgv2     = sy-msgv2.  " set to value of filter
   log_msg-msgv3     = sy-msgv3.  " set to planning sequence if any
   log_msg-msgv4     = sy-msgv4.  " planning function step

   CALL FUNCTION 'BAL_LOG_MSG_ADD'
     EXPORTING
       i_log_handle     = log_handle
       i_s_msg          = log_msg
     EXCEPTIONS
       log_not_found    = 1
       msg_inconsistent = 2
       log_is_full      = 3
       OTHERS           = 4.

 append log_handle to t_log_handle.
 CALL FUNCTION 'BAL_DB_SAVE'
  EXPORTING
    I_T_LOG_HANDLE         = t_log_handle.
endmethod.
  • Create in RSPLF1 the Planning Function Type Z_IP_LOG_TS pointing to class Z_IP_LOG_TS / Without Blocks / Hide columns to be changed
  • Create the Object ZIIP and Subobject  ZIIP on SLG0 

Creation of Aggregation Level, Filter and Planning Function

  • Create Aggregation Level AG_LOG_01on IIP_LOG => Chars = IIP_MSG , KF = ICOUNT
  • Use transaction RSINPUT to create 1 record in Real Time Infocube IIP_LOG
  • Create a filter FL_LOG_01 on AG_LOG_01 => Set Char Selection on IIP_MSG =  ‘001’
  • Create a Planning Function of type Z_IP_LOG_TS on Aggregation Level AG_LOG_01

Using Logging in Planning Sequence

You can insert in your planning sequences a step on Aggregation Level AG_LOG_01, Filter FL_LOG_01 and Planning Function Z_IP_LOG_TS.  When the step is called, a message is created  in the Application Log (transaction SLG1).

SAP BI IP

Overview of SAP IP

SAP BI IP (Integrated Planning)

How-To papers in SDN: http://scn.sap.com/docs/DOC-23451

Analysis Office 1.1

How to… Execute a Planning Function on Selected Lines in an Analysis for Office Workbook http://scn.sap.com/docs/DOC-16319
Analysis Office 1.1 – Using the VBA APIs – Hints for robust implementation http://scn.sap.com/people/olaf.fischer/blog/2011/07/26/analysis-office-11–using-the-vba-apis–hints-for-robust-implementation
Analysis Office 1.1 – Using the VBA APIs – Looping across an API result http://scn.sap.com/people/olaf.fischer/blog/2011/09/15/analysis-office-11–using-the-vba-apis–looping-across-an-api-result

FOX

Useful Tools

Mass activation of Aggregation Levels – SCN Post – Download slnkee.