Extracting Formulas and decision tables

Hallo,
lets say someone saw some of the BRFplus demos, where the BRFplus workbench is used to create formulas, decision tables and simulation data is entered using excel export/import. Now the requirement is, to implement those functionalities in a  webdynpro UI as part of a custom SAP development project, using SAP ICM in the background to do the actual calculation. Is there any way to do this, without creating functions in BRFplus? The problem is, that the functions must be easily changeable in the productive system. So we can't use new function modules for every case, but we only want to use the formulas and decision tables (possibly filled through excel export/import) that were created in BRFplus workbench.
Correct me where ever I am wrong, I don't really think this is why BRFplus was built for, but the easy handling of the workbench is the main focus of most of the demos that are available.
Regards,
Peter Bueermann

Hi Peter,
I do not understand all of the complexity you described below (e.g. I do not know ICM well). However, there are some statements that probably contain wrong assumptions.
To use BRFplus you do not need function modules. You can call a BRFplus function for the processing of a rule by using the generic API. For example the following scenario is possible and already used in some customer use cases:
1. Functionality to create BRFplus functions with the BRFplus API in the productive system on demand (e.g. button press in an expert UI)
2. Directly embedding a decision table or forumla UI (BRFplus standard) and attaching it to the function in background.
3. Upload of data from Excel
However, there is one thing you have to accept: Objects cannot be maintained in different systems and be transported into one without conflicts. You need a leading system to be free of conflicts.
BR,
Carsten

Similar Messages

  • Formulas in decision table or ruleset

    Is it possible to design a decision table based on formulas so that the value populated in the output context of the decision table is derived out of a formula from one or more of the input context (columns) in a decision table?

    Hi
    Can you clarify whther you are talking about NetWeaver BRM or BRFplus?
    Regards
    Harsh

  • Extract Title and specific table of content/pages in set of PDF's

    I need to extract the title of each PDF and a specific content and its pages. For example i have a folder full of PDF's and i need to find in the Table of Contents a heading called Enhancements if there. If Enhancement content is there copy the Title of the PDF usually on first page and copy the Enhancement section and place in another PDF as chronology of enhancements.I have AA Standard X
    What tool can do this?

    You could certainly use the SDK to write a custom plugin to Acrobat (in C/C++) that would do what you require.  It's not trivial, however.

  • Extracting BFOD_A and BFOK_A

    Hello Experts,
    I have a requirement to extract BFOD_A and BFOK_A tables into BW. I know there is no standard datasources for the same and I need to opt for 2 custom datasources.
    Challenge is in extracting delta. How do I make custom datasources for these 2 tables delta enabled.
    I searched a lot on scn but couldn't find any solution. Has anybody implemented datasources which are delta enabled for BFOD_A and BFOK_A ?
    Regards,
    Mihir

    Mihir,
    I am searching a way to do it as well. But looks like unless there is a timestamp field added to these tables , nothing can be done at the Extractor level.
    We are currently doing a Full load that takes almost 1 day to complete. It's cumbersome.
    Lets see if we can find a solution to it

  • Extract data from database tables and download in pdf and csv

    extract data from database tables and download in pdf and csv
    hi how can i re-write my old form procedure in adf java. the procedure used to extract data from diffirent table and dowload the data in pdf and csv.am not downloading image, i what to extract data from diffirent tables in my database and download that data in pdf and csv. i would like to write this in java adf.i just what direction am not asking anyone to do my work this is my learning curve
    the form code is
    function merge_header3 return varchar2 is
    begin
         return '~FACILITY DESCRIPTION~ACCOUNT NO~BRANCH CODE~BANK REF NO.~P/P/ AMOUNT~Postal Address 1~Postal Address 2~Box Postal Code~Dep. Date~Month~BANK NAME~BRANCH NAME~ACCOUNT TYPE~DESCRIPTION~OBJECTIVE DESCRIPTION';
    end;
    procedure download_file (i_pbat integer) is
      dir varchar2(80);
      file_name1 varchar2(80);
      file_name2 varchar2(80);
      appl_code varchar2(80);
      fil1 client_text_io.file_type;
      fil2 client_text_io.file_type;
      dat varchar2(1000);
      DATA VARCHAR2(1000);
      bvspro varchar2(100);
      ssch   varchar2(100);
      bvspro_total number(20,2);
      ssch_total   number(20,2);
      grand_total  number(20,2);
      cnt    integer;
      cursor pbat is
           select *
           from sms_payment_batches
           where id = i_pbat
      cursor pay  (pb_id integer) is
           select *
           from sms_payment_vw
           where pbat_id = pb_id
           order by subsidy ASC,programme,beneficiary_name
      cursor cgref (low varchar2) is
           select *
           from cg_ref_codes
           where rv_domain ='SMS'
           and rv_low_value = low
      success boolean;     
      begin  
           set_application_property(cursor_style,'busy');
           appl_code := sms_global.ref_code('SMS','APP_CODE','SMS',0);
        dir       := sms_global.ref_code('SMS','PAY_DIR','c:\sms\batch_payments',0);
             success := webutil_file.create_directory(dir);
         if webutil_file.file_is_directory(dir) then
             null;
    --         message ('directory exists');
        else
    --                  message ('create directory ');
             success := webutil_file.create_directory(dir);
    --         if success then        message ('directory exists');    end if;
        end if;     
        for c_pbat in pbat loop
             file_name1 := dir ||'\' || appl_code||c_pbat.batch_number||'-'||to_char(c_pbat.batch_dt,'yyyymmdd')||'pay.txt';
             file_name2 := dir ||'\' || appl_code||c_pbat.batch_number||'-'||to_char(c_pbat.batch_dt,'yyyymmdd')||'merge.txt';
    --message('create files ');
    --         fil1  := client_text_io.fopen (file_name1,'W');
    --         fil2  := client_text_io.fopen (file_name2,'W');
        fil1  := client_text_io.fopen (file_name1,'W','');
        fil2  := client_text_io.fopen (file_name2,'W','');
                   dat :=                       'FROM ACCOUNT NUMBER'
                                                                ||'~'||'FROM ACCOUNT DESCRIPTION'
                                                                ||'~'||'MY STATEMENT DESCRIPTION'
                                                                ||'~'||'BENEFICIARY ACCOUNT NUMBER'
                                                                ||'~'||'BENEFICIARY SUB ACCOUNT NUMBER'        
                                                                ||'~'||'BENEFICIARY BRANCH CODE'
                                                                ||'~'||'BENEFICIARY NAME'
                                                                ||'~'||'BENEFICIARY STATEMENT DESCRIPTION'
                                                                ||'~'||'AMOUNT';
             --     client_text_io.put_line(fil1,dat);
             bvspro:= null;
             ssch  := null;
             cnt := 0;     
             dat := '~'||lpad('~',16,'~');
             for c_pay in pay(c_pbat.id) loop
    --message('cpay loop ' || cnt);              
               if bvspro is null then
                     dat := lpad('~',16,'~');
                     dat := utility.put_field(1,c_pay.programme,dat,'~');     
               client_text_io.put_line(fil2,dat);
               dat := utility.put_field(1,c_pay.subsidy,dat,'~');
               client_text_io.put_line(fil2,dat);
               dat := merge_header3;
                     client_text_io.put_line(fil2,dat);
                     bvspro := c_pay.programme;
                     ssch := c_pay.subsidy;
                     grand_total := 0;
                     bvspro_total := 0;
                     ssch_total := 0;
               end if;
               if bvspro <> c_pay.programme then
                     dat := lpad('~',16,'~');
                     dat := utility.put_field(5,ssch_total,dat,'~');
                     dat := lpad('~',16,'~');
                     dat := utility.put_field(5,bvspro_total,dat,'~');
               dat := utility.put_field(1,'Total:' || bvspro,dat,'~');
                     client_text_io.put_line(fil2,dat);
                     dat := lpad('~',16,'~');
               client_text_io.put_line(fil2,dat);
                     dat := utility.put_field(1,c_pay.programme,dat,'~');     
               client_text_io.put_line(fil2,dat);
                     bvspro := c_pay.programme;
               dat := utility.put_field(1,c_pay.subsidy,dat,'~');
               client_text_io.put_line(fil2,dat);
               dat := merge_header3;
                     client_text_io.put_line(fil2,dat);
                     bvspro := c_pay.programme;
                     ssch := c_pay.subsidy;
                     bvspro_total := 0;
                     ssch_total := 0;
                     cnt :=0;
             end if;                           
               if ssch <> c_pay.subsidy then
                     dat := lpad('~',16,'~');
                     dat := utility.put_field(5,ssch_total,dat,'~');
                     dat := lpad('~',16,'~');
               client_text_io.put_line(fil2,dat);
               dat := utility.put_field(1,c_pay.subsidy,dat,'~');
               client_text_io.put_line(fil2,dat);
               dat := merge_header3;
                     client_text_io.put_line(fil2,dat);
                     ssch := c_pay.subsidy;
                     ssch_total := 0;
                     cnt :=0;
             end if;                           
            bvspro_total := bvspro_total + c_pay.amount;
            ssch_total   := ssch_total   + c_pay.amount;              
                  grand_total  := grand_total  + c_pay.amount;              
            cnt := cnt +1;
    --message('bfore write file 2 ' );              
            client_text_io.put_line(fil2
                                   ,cnt
                            ||'~'|| c_pay.beneficiary_name
                                                                ||'~'||c_pay.BENEFICIARY_ACCOUNT_NUMBER ||''            
                                                                ||'~'||c_pay.BRANCH_CODE             ||''           
                                                                ||'~'|| c_pay.BENEFICIARY_STATEMENT_DESC            
                                                                ||'~'|| c_pay.AMOUNT                                
                            ||'~'|| c_pay.address_line1
                            ||'~'|| c_pay.address_line2
                                                    ||'~'|| c_pay.postal_code
                                                    ||'~'|| TO_CHAR(c_pay.deposit_date,'DD-Mon-YYYY')
                                                    ||'~'|| c_pay.month
                                                    ||'~'|| c_pay.bank
                                                    ||'~'|| c_pay.bank_branch
                                                    ||'~'|| c_pay.account_type
                                                    ||'~'|| c_pay.subsidy
                                                    ||'~'|| c_pay.programme)
                  DATA :=                                  c_pay.FROM_ACCOUNT_NUMBER                   
                                                                ||'~'||c_pay.FROM_ACCOUNT_DESCR                    
                                                                ||'~'||c_pay.MY_STATEMENT_DESCR                    
                                                                ||'~'||c_pay.BENEFICIARY_ACCOUNT_NUMBER
                                                                ||'~'
                                                                ||'~'||c_pay.BRANCH_CODE            
                                                                ||'~'||c_pay.BENEFICIARY_NAME                      
                                                                ||'~'||c_pay.BENEFICIARY_STATEMENT_DESC            
                                                                ||'~'||c_pay.AMOUNT;                                
            DATA := REPLACE(DATA, ',' , ' ' );
            DATA := REPLACE(DATA, '~' , ',' );
    --message (cnt ||' ' || data);       
    --message('bfore write file 1 ' );              
                  client_text_io.put_line(fil1, data);
             end loop;
    --message ('end of write');         
                 dat := lpad('~',16,'~');
                 dat := utility.put_field(6,ssch_total,dat,'~');
                 dat := lpad('~',16,'~');
           dat := utility.put_field(1,'Total:' || bvspro,dat,'~');
                 dat := utility.put_field(5,bvspro_total,dat,'~');
              client_text_io.put_line(fil2,dat);
              dat := lpad('~',16,'~');
           client_text_io.put_line(fil2,dat);
           dat := utility.put_field(1,'Grand Total:' ,dat,'~');
                 dat := utility.put_field(5,grand_total,dat,'~');
              client_text_io.put_line(fil2,dat);
             -- close file
    for i in 1..50 loop  
           if substr(i,-1) = 0 then
                 message ('flush ' || i);
           end if;                 
                  client_text_io.put_line(fil1, lpad(' ',2000));
                  client_text_io.put_line(fil2, lpad(' ',2000));
                  client_text_io.put_line(fil1, lpad(' ',2000));
                  client_text_io.put_line(fil2, lpad(' ',2000));
    end loop;
             client_text_io.fclose(fil1);
             client_text_io.fclose(fil2);
        end loop;
       set_application_property(cursor_style,'default');
        exception
             when others then
                  message(sqlcode ||' ' ||sqlerrm);
       end download_file;    i try this but this code onlydownload image not data from database tables
        public void downloadImage(FacesContext facesContext, OutputStream outputStream)
            BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
            // get an ADF attributevalue from the ADF page definitions
            AttributeBinding attr = (AttributeBinding) bindings.getControlBinding("DocumentImage");
            if (attr == null)
                return;
            // the value is a BlobDomain data type
            BlobDomain blob = (BlobDomain) attr.getInputValue();
            try
            {   // copy the data from the BlobDomain to the output stream
                IOUtils.copy(blob.getInputStream(), outputStream);
                // cloase the blob to release the recources
                blob.closeInputStream();
                // flush the output stream
                outputStream.flush();
            catch (IOException e)
                // handle errors
                e.printStackTrace();
                FacesMessage msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, e.getMessage(), "");
                FacesContext.getCurrentInstance().addMessage(null, msg);
            }

    You should ask your forum in the ADF-forum.

  • Difference between use of decision table and if/then in business rules

    Hello ,
    Could some one please explain me difference between use of decision table and if/then in business rules in short.
    - Shirish

    Hi,
    They are equivalent, pretty much what you can do with a decision table you can also do with if/then...
    However, decision tables provide automated features that can reduce the number of required rules, as compared to the if/then rules (this is called rule coalescing).
    Have a look on this document... Search for 5.1.1 What is a Decision Table?
    http://docs.oracle.com/cd/E23943_01/user.1111/e10228/decision.htm#CJHFIAHG
    Cheers,
    Vlad

  • How to add new table into running extract pump and replicat files

    Hi all, i am very much confused how we should add a new table for replication into extract pump and replicat parameter files without stopping them manually? Is there any way where we can add them without disturbing functionality of OGG?
    Experts help required on this
    Thanks in advance

    Hi,
    You can stop and restart the extract process after modifying the extract prm files. the current and last reading point details available checkpoint tables ,or it can get it from info command itself , so you can start the extract process at the point of particular RBA or SEQ no, but you make sure the retention period of your archive log files, because all the transactions are moved in to archive log location, so extract process will fetch the data from archive log also,
    Documentation states:
    If Extract abends when a long-running transaction is open, it can seem to take a long time
    to recover when it is started again. To recover its processing state, Extract must search
    back through the online and archived logs (if necessary) to find the first log record for that
    long-running transaction. The farther back in time that the transaction started, the longer
    the recovery takes, in general, and Extract can appear to be stalled.
    Why archive logs?
    GG reads online redo logs in default but when they are all switched, and for some reason in the meantime GG stopped (abended) it doesn't have the last transaction as transaction was in online log that switched. That is why you need archive logs, so that GG can reach this old transaction in archive log.
    E.g you have two online logs, your transaction is at the begining of the first log. Extract abends. Transactions keep coming to database first online log switches to second, second switches to first and first again to second. You start GG but transaction you finished processing on is no longer in first online log. But it is in archive log.
    What to do?
    1) Start Oracle in archive log mode
    2) Make sure you have available space for archive logs
    GG will look into Oracle default location for archive logs when it abends and transaction is no longer in online log.

  • Extract structure and table

    Hi Experts,
    How to know the fields of a extract structure are populated data from which tables?
    Thanks,
    Bill

    Hi,
    Datasource / tables in the source system
    Go to RSA2 (DS Repository) in your source system and display your source system.
    If Extraction Method is 'V' - you are lucky and you see table name where data is taken from.
    If it is F* - function module is used, and you have to go thru its code to see all the tables it uses and logic how data is
    processed.
    Ext. Meth   Short text                                                                               
    V                 Transparent Table or DB View                
    D                  Fixed Domain Value                          
    F1                Function Module (Complete Interface)        
    F2                Function Module (Simple Interface)          
    Q                 Extraction Using ABAP Query                 
    A                 DataSource Append                           
    or
    Table ROOSOURCE in ERP.
    Relevant fields EXMETHOD, EXTRACTOR.
    IF EXMETHOD = V, EXTRACTOR is view or tablename
    IF EXMETHOD = D, EXTRACTOR is name of domain
    IF EXMETHOD = F1, F2 EXTRACTOR is name of FM
    IF EXMETHOD = Q EXTRACTOR is name of Info set
    OR
    Since you have the extract structure and the extractor, you must have some transaction like the Extractor Checker RSA3. If so
    then execute ST05, switch on the trace and execute the extractor checker. Once the extractor checker presents the results
    switch off trace. The clcik on Display trace and you will see all the tables that were hit by the extractor checker to
    retrieve data and present it to you.
    Thanks,
    JituK

  • Extract is picking up rows twice because both an explicit TABLE and a TABLE

    Our extract parameter file has this following(full file uploaded):
    TABLE TK_APP_DATA.PAYMENT_INFO , COLSEXCEPT (ENCRYPTED_VALUE,HASH_VALUE)
    #add_scn()
    TABLE TK_APP_DATA.*
    #add_scn()
    When i look at the change data inserted by the replicat on target and at the extract trail file I can see that a row which is updated is actually extracted twice and duplicated. I also see that the table is resolving twice in the EXTRACT rpt file:
    Using the following key columns for source table TK_APP_DATA.PAYMENT_INFO : INSTRUMENT_ID, FIELD_HANDLE.
    TABLEWildcard resolved (entry SCECOMM.*):
    TABLE SCECOMM.PAYMENT_INSTRUMENT_FIELD, TOKENS ( TK-SCN = @GETENV ( "TRANSACTION" , "CSN" ) ) ;
    Using the following key columns for source table TK_APP_DATA.PAYMENT_INFO : INSTRUMENT_ID, FIELD_HANDLE.
    TABLEWildcard resolved (entry SCECOMM.*):
    TABLE SCECOMM.APPLICATION_PARAMETER, TOKENS ( TK-SCN = @GETENV ( "TRANSACTION" , "CSN" ) ) ;
    Anyone know how I can make it so that only one TABLE statement is used to resolve it? Or conversely a way to filter out table in a wild card statement? I would prefer to avoid having to create a seperate extract for just 1 table(schema has over 350+ tables in it)
    I tried using a TABLEEXCLUDE but that excludes the table entirely. I also tried using WILDCARDRESOLVE IMMEDIATE on the specific table mappings, but can't because we also use DDL replication.
    Any help would be greatly appreciated.
    #anh

    This is unfortunately what I have right now as my stop gap. We will sql generate the list of tables with every deployment which with our agile development is like every other week haha. I do have a requirement to replicate dynamically(the source side changes extremely frequently by adding and dropping tables) but even after talking to oracle support this is not possible. If you have a custom mapping for a table and use a wild card later which would resolve that table you will always get duplicate rows extracted.
    I talked to oracle support(with raised this as a bug/feature request) and raised this with our oracle engagement manager and asked them to add better functionality when it comes to filtering and wild card selection for TABLE and MAP statements to have an option setting to only map once. It's in their queue however not sure how high of a priority it will be for them(I'm guessing not very high =) )

  • How to extract data from multiple tables (always got errors)

    Dear Experts,
    I have a simple mapping to extract data from multiple tables as a source (A, B, C) to a target table (X). Below is the picture:
    (Sources)....(Target)
    A----------------***
    B----------------X
    C----------------***
    Sample Source Data:
    Table A:
    ColA1
    100
    200
    etc
    Table B:
    ColB1 ColB2 ColB3
    10 Y Ten
    20 Y Twenty
    30 Y Thirty
    etc
    Table C:
    ColC1 ColC2
    11
    12
    13
    etc
    Target table (X) should be (just has 1 group INGRP1):
    ColA1 ColB1 ColB3 ColC1
    100 10 Ten 11
    100 10 Ten 12
    100 20 Twenty 21
    etc
    Scenarios:
    1. Directly map from A, B, C to X. Unable to map with error message: "API8003: Connection target attribute group is already connected to an incompatible data source. Use a Joiner or Set operator to join the upstream data first before connecting it into this operator."
    2. Map each source to Expression Operator and then map from each Expression to target table. I am able to map all attributes successfully but got error when validating it with message: "VLD-1104: Attributes flowing into TEST.EXPR_SRC.INGRP1 have different data sources."
    How can I achieve the correct mapping for this purpose?
    Use Joiner? I have no key to join the sources
    Use Set? The sources have different number of columns
    Thanks in advance
    Prat

    Thanks Nico,
    I think it will results data like this:
    100 10 Ten 11
    200 20 Twenty 12
    300 30 Thirty 13
    etc
    and not the expected:
    100 10 Ten 11
    100 10 Ten 12
    100 20 Twenty 21
    etc
    But it inspired me to solve this by adding key expression in each source table (B & C) to be joined to table A with this formula:
    100+TRUNC(INGRP1.COLB1,-2)
    Regards
    Prat

  • RABAX state error on Decision Table

    I'v receive this message when i try to create a DT.
    An exception in the Formula & Derivation Tool occurred because of content errors
    Afbrekingssoort: RABAX_STATE
    ABAP-oproephiërarchie:
    Method: CONVERT_DB_STRING_TO_TIMEPOINT of program CL_FDT_DATE_TIME==============CP
    Method: CHECK_ of program CL_FDT_CONSTANT===============CP
    Method: CHECK of program CL_FDT_CONSTANT===============CP
    Method: IF_FDT_TRANSACTION~CHECK of program CL_FDT_MAINTENANCE============CP
    Method: IF_FDT_TRANSACTION~CHECK of program CL_FDT_MAINTENANCE============CP
    Method: IF_FDT_TRANSACTION~CHECK of program CL_FDT_MAINTENANCE============CP
    Method: DISPLAY_MESSAGES of program /1BCWDY/7303W0RX67HZTJLLL28V==CP
    Method: IWCI_FDT_WD_CHECK_MSG_LIST~DISPLAY_MESSAGES of program /1BCWDY/7303W0RX67HZTJLLL28V==CP
    Method: CHECK of program /1BCWDY/7303R6YQRS4ZMK10IIYR==CP
    Method: IF_ACTION~CHECK of program /1BCWDY/7303R6YQRS4ZMK10IIYR==CP
    I'v created a function, END_GE_BEGIN,  to compare two dates with the result as boolean. This function is activated.
    Then i create a decision table, END_IS_VALID with the result of type boolean. Two columns, END_GE_BEGIN and END (date field).
    First row in decision table END is initial and the the boolean is true.
    Second row END_GE_BEGIN if true boolean is true.
    On the check or the activate i receive this error. Multiple times.
    It looks like that the error is triggered by the check END (date type) is initial.
    How can i check if a date is initial?

    I have the exact same error.
    Could you please update this thread with solution and eventual OSS note?
    Also Carsten: Do you have a release date for Netweaver 7 EHP2? Should be out by now but can't find any confirmation on that.
    Thanks a lot!
    Martin Jonsson

  • How to get multipe data set values from Decision Table.

    Hi All,
    I need to use SAP BRM for one of the scenario where based one some Code Group I need to get a set of questions and for each question a set of possible answers.
    The structure of Decision Table will be like below :
    Table 1 : To get set of questions based on Project Code
    Input                   Output           Output
    Project Code
    Question Id
    Question Description
    Table 2 : To get set of answers based on question
    Input                   Output            Output
    Question ID
    Answer Id
    Answer Description
    I already searched in forum to get the multiple values based on some input and that works fine for a single field with multiple outcome.
    Handling Selective Multiple Actions in  SAP Business Rules Management System
    In my scenario I need to get a set of Id and description as multiple outcome.
    Can anyone please let me know how this can be achieved in BRM.
    Thanks in advance
    Ravindra

    Create an XSD in the BRM project with the desired data structure and import the XSD alias in the 'Project Resources'. Add this XSD alias as input/output of the decision table.
    Refer this:
    Creating a Simple BRM Ruleset in 30 Easy Steps using NWDS 7.3 (Flow Ruleset with a Decision Table)

  • Performance issue in BI due to direct query on BKPF and BSEG tables

    Hi,
    We had a requirement that FI document number fieldshould be extracted in BI.
    Following code was written which has the correct logic but performance is bad.
    It fetched just 100 records in more than 4-5 hrs.
    The reason is there was a direct qury written on BSEG and BKPF tables(without WHERE clause).
    Is there any way to improve this code like adding GJAHR field  in where clause? I dont want to change the logic.
    Following is the code:
    WHEN '0CO_OM_CCA_9'." Data Source
        TYPES:BEGIN OF ty_bkpf,
        belnr TYPE bkpf-belnr,
        xblnr TYPE bkpf-xblnr,
        bktxt TYPE bkpf-bktxt,
        awkey TYPE bkpf-awkey,
        bukrs TYPE bkpf-bukrs,
        gjahr TYPE bkpf-gjahr,
        AWTYP TYPE bkpf-AWTYP,
        END OF ty_bkpf.
        TYPES : BEGIN OF ty_bseg1,
        lifnr TYPE bseg-lifnr,
        belnr TYPE bseg-belnr,
        bukrs TYPE bseg-bukrs,
        gjahr TYPE bseg-gjahr,
        END OF ty_bseg1.
        DATA: it_bkpf TYPE STANDARD TABLE OF ty_bkpf,
        wa_bkpf TYPE ty_bkpf,
        it_bseg1 TYPE STANDARD TABLE OF ty_bseg1,
        wa_bseg1 TYPE ty_bseg1,
        l_s_icctrcsta1 TYPE icctrcsta1.
        "Extract structure for Datasoure 0co_om_cca_9.
        DATA: l_awkey TYPE bkpf-awkey.
        DATA: l_gjahr1 TYPE gjahr.
        DATA: len TYPE i,
        l_cnt TYPE i.
        l_cnt = 10.
        tables : covp.
        data : ref_no(20).
        SELECT lifnr
        belnr
        bukrs
        gjahr
        FROM bseg
        INTO TABLE it_bseg1.
        DELETE ADJACENT DUPLICATES FROM it_bseg1 COMPARING belnr gjahr .
        SELECT belnr
        xblnr
        bktxt
        awkey
        bukrs
        gjahr
        AWTYP
        FROM bkpf
        INTO TABLE it_bkpf.
        IF sy-subrc EQ 0.
          CLEAR: l_s_icctrcsta1,
          wa_bkpf,
          l_awkey,
          wa_bseg1.
          LOOP AT c_t_data INTO l_s_icctrcsta1.
            MOVE l_s_icctrcsta1-fiscper(4) TO l_gjahr1.
          select single AWORG AWTYP INTO CORRESPONDING FIELDS OF COVP FROM COVP
          WHERE belnr = l_s_icctrcsta1-belnr.
          if sy-subrc = 0.
              if COVP-AWORG is initial.
           concatenate l_s_icctrcsta1-refbn '%' into ref_no.
                  READ TABLE it_bkpf INTO wa_bkpf WITH KEY awkey(10) =
                  l_s_icctrcsta1-refbn
                  awtyp = COVP-AWTYP
                  gjahr = l_gjahr1.
            IF sy-subrc EQ 0.
              MOVE wa_bkpf-belnr TO l_s_icctrcsta1-zzbelnr.
              MOVE wa_bkpf-xblnr TO l_s_icctrcsta1-zzxblnr.
              MOVE wa_bkpf-bktxt TO l_s_icctrcsta1-zzbktxt.
              MODIFY c_t_data FROM l_s_icctrcsta1.
              READ TABLE it_bseg1 INTO wa_bseg1
              WITH KEY
              belnr = wa_bkpf-belnr
              bukrs = wa_bkpf-bukrs
              gjahr = wa_bkpf-gjahr.
              IF sy-subrc EQ 0.
                MOVE wa_bseg1-lifnr TO l_s_icctrcsta1-lifnr.
                MODIFY c_t_data FROM l_s_icctrcsta1.
                CLEAR: l_s_icctrcsta1,
                wa_bseg1,
                l_gjahr1.
              ENDIF.
            ENDIF.
                ELSE. " IF AWORG IS NOT BLANK -
                concatenate l_s_icctrcsta1-refbn COVP-AWORG into ref_no.
                READ TABLE it_bkpf INTO wa_bkpf WITH KEY awkey(20) =
                ref_no
                awtyp = COVP-AWTYP
                gjahr = l_gjahr1.
            IF sy-subrc EQ 0.
              MOVE wa_bkpf-belnr TO l_s_icctrcsta1-zzbelnr.
              MOVE wa_bkpf-xblnr TO l_s_icctrcsta1-zzxblnr.
              MOVE wa_bkpf-bktxt TO l_s_icctrcsta1-zzbktxt.
              MODIFY c_t_data FROM l_s_icctrcsta1.
              READ TABLE it_bseg1 INTO wa_bseg1
              WITH KEY
              belnr = wa_bkpf-belnr
              bukrs = wa_bkpf-bukrs
              gjahr = wa_bkpf-gjahr.
              IF sy-subrc EQ 0.
                MOVE wa_bseg1-lifnr TO l_s_icctrcsta1-lifnr.
                MODIFY c_t_data FROM l_s_icctrcsta1.
                CLEAR: l_s_icctrcsta1,
                wa_bseg1,
                l_gjahr1.
              ENDIF.
            ENDIF.
               endif.
          endif.
            CLEAR: l_s_icctrcsta1.
            CLEAR: COVP, REF_NO.
          ENDLOOP.
        ENDIF.

    Hello Amruta,
    I was just looking at your coding:
    LOOP AT c_t_data INTO l_s_icctrcsta1.
    MOVE l_s_icctrcsta1-fiscper(4) TO l_gjahr1.
    select single AWORG AWTYP INTO CORRESPONDING FIELDS OF COVP FROM COVP
    WHERE belnr = l_s_icctrcsta1-belnr.
    if sy-subrc = 0.
    if COVP-AWORG is initial.
    concatenate l_s_icctrcsta1-refbn '%' into ref_no.
    READ TABLE it_bkpf INTO wa_bkpf WITH KEY awkey(10) =
    l_s_icctrcsta1-refbn
    awtyp = COVP-AWTYP
    gjahr = l_gjahr1.
    Here you are interested in those BKPF records that are related to the contents of c_t_data internal table.
    I guess that this table does not contain millions of entries. Am I right?
    If yes, the the first step would be to pre-select COVP entries:
    select BELNR AWORG AWTYP into lt_covp from COVP
    for all entries in c_t_data
    where belnr = c_t_data-belnr.
    sort lt_covp by belnr.
    Once having this data ready, you build an internal table for BKPF selection:
    LOOP AT c_t_data INTO l_s_icctrcsta1.
      clear ls_bkpf_sel.
      ls_bkpf_sel-awkey(10) = l_s_icctrcsta1-refbn.
      read table lt_covp with key belnr = l_s_icctrcsta1-belnr binary search.
      if sy-subrc = 0.
        ls_bkpf_sel-awtyp = lt_covp-awtyp.
      endif.
      ls_bkpf_sel-gjahr = l_s_icctrcsta1-fiscper(4).
      insert ls_bkpf_sel into table lt_bkpf_sel.
    ENDLOOP.
    Now you have all necessary info to read BKPF:
    SELECT
    belnr
    xblnr
    bktxt
    awkey
    bukrs
    gjahr
    AWTYP
    FROM bkpf
    INTO TABLE it_bkpf
    for all entries in lt_bkpf_sel
    WHERE
      awkey = lt_bkpf_sel-awkey and
      awtyp = lt_bkpf_sel-awtype and
      gjahr = lt_bkpf_sel-gjahr.
    Then you can access BSEG with the bukrs, belnr and gjahr from the selected BKPF entries. This will be fast.
    Moreover I would even try to make a join on DB level. But first try this solution.
    Regards,
      Yuri

  • Performance issue due to column formula and filters

    Hi,
    I am facing strange issue with performance for my OBIEE reports. I have two sets of reports Static and Dynamic. Both runs against same tables. The only difference between these reports is that the Static reports would run against all the data for given aggregation level e.g. Year, Month, Date and so on. Where as for Dynamic one I have range prompts to filter data. Other difference is that I have a column formula for one of the column in the Dynamic report, which is nothing but Go URL to show another page with certain parameters.
    The static report takes around 14-15 Seconds where as the Dynamic one takes around 3.5 min. The amount of data and range is same here. From the logs I could see that for the Static reports, i.e. reports without filters it applys group by at SQL level where as it is not doing so for the dynamic one. Is this expected ?
    Second issue is, even if I say remove the filters and just have report with column formula in one and no formula in other there is significant time difference in the processing at Presentation service layer. Again this is taken from the log. it takes 8 second to get data from DB but shows almost 218 Seconds as response time at Presentation layer.
    Below are conceptual details about table and reports -
    Table 1 (It is date dimension) : Date_Dim
    DateCode Date
    Day Number
    MonthCode Varchar2
    YearCode Varchar2
    Table 2 (It is aggregate table at year level) : Year_Aggr
    DateCode Date (FK to Table1 above)
    Measure1
    Measure2
    Measure3
    Measure4
    Measure5
    Report 1
    Date_Dim.YearCode | Year_Aggr.Measure1 | Year_Aggr.Measure2 | Year_Aggr.Measure3 | Year_Aggr.Measure4
    Report 2
    Dashboard Filter : Dimension1 | Dimension2 | Year Start | Year End |
    Date_Dim.YearCode | Year_Aggr.Measure1 | Year_Aggr.Measure2 | Year_Aggr.Measure3 | Year_Aggr.Measure4
    Column formula for Date_Dim.YearCode is something like :
    '<a href="saw.dll?Dashboard&PortalPath=somepath and parameters  target=_self>'  || Date Dim"."YearCode" || '</a">'
    Filters :
    Dimension1 is prompted...
    Dimension2 is prompted...
    cast("Date Dim"."YearCode" as Int) is greater than or equal to @{Start_Year}
    cast("Date Dim"."YearCode" as Int) is greater than or equal to @{End_Year}
    Note : I need to apply cast to int as column is varchar2, legacy problem.+
    How can I fix this? Am I missing something? In the result of report2 the DB SQL doesn't show the year in where thought it is displayed in the logical sql.
    Let me know if anybody had faced this and have fixed. Or suggetion to make changes to fix this.
    Thannks,
    Ritesh</a>

    Hi Ritesh,
    I think you right about the root cause of your problem. The first request does the group by in the database which returns fewer records to the BI Server for processing. The second request does not do the group by and sends significantly more records back to the BI server forcing it to do the group by. Compound that with the fact that pivot table views are relatively expensive computationally and that explains the difference between the execution times.
    Assuming that the execution time of the first report is satisfactory, I would recommend you try to experiment with a few settings to see if you can get the second report to do the group by in the database.
    Are the two filters identical except for the following conditions?
    cast("Date Dim"."YearCode" as Int) is greater than or equal to @{Start_Year}
    cast("Date Dim"."YearCode" as Int) is greater than or equal to @{End_Year}
    Best regards,
    -Joe

  • Need suggestion on how to extract data from a table

    Many years ago, I wrote many Perl scripts to increase my work productivity.
    Now I am starting learning Java, Javascript and PHP for some purposes. Just wrote a simple html2txt java program.
    Now I need experts' suggestion for one specific purpose - extract data from a html table. One of the examples is here: http://mops.tse.com.tw/nas/t06sa18/200902/A02_2454_200902.htm
    I need to extract datum from the table and make some analysis. (Txt is in Chinese, sorry)
    What is the best way to code it? Java, PHP or other? If Java, any suggestion what classes/module and approach to use?
    Thanks very much.

    xcomme wrote:
    Many years ago, I wrote many Perl scripts to increase my work productivity.
    Now I am starting learning Java, Javascript and PHP for some purposes. Just wrote a simple html2txt java program.
    Now I need experts' suggestion for one specific purpose - extract data from a html table. One of the examples is here: http://mops.tse.com.tw/nas/t06sa18/200902/A02_2454_200902.htm
    I need to extract datum from the table and make some analysis. (Txt is in Chinese, sorry)
    What is the best way to code it? It this a one shot (one time only task)? Then the best way is whatever way you are most comfortable with and which works.
    If on going then I doubt language choice matters but using a html parser rather than attempting to parse it yourself is going to help in any language.
    And are you starting with html files or starting with a http server? The two are very different.

Maybe you are looking for

  • Getting loadSourceError using the debugger when trying to open a file referenced by a sourcemap

    Specifically, when using the debugger and trying to open up a source JS file that is referenced in a sourcemap, I now get: Error loading source: loadSourceError Yesterday it was working perfectly. The only thing that seems to have changed was updatin

  • Free Report Tool Datavision

    Hi! I'm using the free report Tool datavision http://datavision.sourceforge.net/, this tool have the funcionality no create reports like Crystal Reports, is good and free, I allready create my report, but I have troubles when try to publish, here is

  • Share iMix via email

    How do I share an iMix that I published in iTunes? When i go to the iMix and click "Tell a friend" I get sent back to iTunes Store Home page. Nothing else happens. Mail is open and ready.

  • I want MACROMEDIA Contribute CS3

    I bought for my client a copy of Contribute CS3. He's currently using Macromedia Contribute 3, one month demo. He likes it, so I want to make it official. It's a small package for a small nice programm (30MB in size). When I ordered Adobe Contribute

  • Setup through ethernet? HELP!

    i have a HP LASERJET P2055DN; I have always had the printer setup to my desktop via USB cable, but the USB cable port has broken off the inside of the printer. I went to staples to figure out if theres any other way i could hook my computer and print