[BW] 데이터 적재 시 날짜조건 지정 방법

2018. 6. 4. 08:53SAP/BW

[BW] 데이터 적재 시 날짜조건 지정 방법


ERP에서 데이터 소스를 생성한 후에 해당 내역을 BW로 가져오기 위해 날짜조건을 부여하여 가져올 수 있다.


이러한 내용이 가장 필요한 경우는.... 순전히 경험에 비추어 본다면 함수 호출 기반 데이터 소스의 경우에 필요하다.


테이블을 대상으로 가져올 경우, 별 문제없이 대량의 데이터를 가져오지만 Function을 실행하여 SELECT해오는 경우는 별도의 조건없이 실행했을 떄


그 속도가 매우 느리거나 사실상 먹통이 되는 경우가 발생한다.


그래서 그럴 때 사용할 수 있는 날짜조건 지정 방법에 대해 메모해 두고자 한다.




데이터소스 생성 시 선택 가능한 항목을 설정했다면 해당 필드내역이 생성한 인포패키지에서 확인 가능하다.


아래의 경우, 데이터 생성일 기준으로 조건을 부여해서 데이터를 가져오도록 한 경우이다. 





처음엔 저런 ABAP 루틴이 아니라 아무것도 없는 상태이지만 3번째 항목인 유형의 항목을 클릭해보면 다음과 같은 두 가지가 조회되며 이중 ABAP 루틴을 선택해 조건을 줄 수 있다. OLAP 변수에 대한 설정 방법은 다른 경우에 메모해 두겠다.



이렇게 해서 ABAP 루틴 설정이 가능하며 설정 소스코드 창에서 FORM 구문 안에 아래 소스코드를 반영하면 해당 조건에 맞는 기간 설정이 된다.


ZDATE 라는 날짜필드를 기반으로 전월 01일 ~ 당월 말일 기준으로 두 달치 데이터를 가져오는 로직이라면....


*전월01일 ~ 당월 말일 기준
datal_idx like sy-tabix,
         l_calday1  LIKE sy-datum,
         l_calday2  LIKE sy-datum,
         l_calday3  LIKE sy-datum,
         l_calday4  LIKE sy-datum,
         t_year(4)  TYPE n,
         t_year2(4TYPE n,
         l_mm(2)  TYPE n,
         l_mm2(2TYPE n,
         l_dd(2)  TYPE n.

read table l_t_range with key fieldname 'ZDATE'.
         l_idx sy-tabix.

         CLEAR t_yeart_year2l_mml_mm2l_ddl_calday1,
         l_calday4.
         l_calday1 sy-datum 1.
         t_year l_calday1+0(4).
         t_year2 l_calday1+0(4).
         l_mm l_calday1+4(21.
         l_mm2 l_calday1+4(2).
         l_dd '01'.

         IF l_mm '0'.
           l_mm '12'.
           t_year t_year 1.

         ENDIF.

         CONCATENATE t_year l_mm l_dd INTO l_calday1"전월 1일


         CLEAR t_yearl_mml_ddl_calday2.
         l_calday2 sy-datum.
         t_year l_calday2+0(4).
         l_mm l_calday2+4(2).
         l_dd '01'.

         CONCATENATE t_year l_mm l_dd INTO l_calday3.

              CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
         EXPORTING
           day_in l_calday3
         IMPORTING
           last_day_of_month l_calday4.

l_t_range-LOW l_calday1.
l_t_range-HIGH l_calday4.
l_t_range-SIGN 'I'.
l_t_range-OPTION 'BT'.

modify l_t_range index l_idx.

p_subrc 0.


******************************************************


이렇게 두 달치 데이터를 PSA에 담아두게 된다면.... 이제 DTP를 통해 CUBE로 전월, 당월 두 번 적재하게 된다.


DTP에서는 필터부분으로 가서 로직을 반영하게 된다.



생성일 부분에 로직이 반영된 상태이다.



ERDAT라는 생성일 필드에 반영을 할 경우 전월 DTP에는 아래의 로직을 반영한다.


*전월1일 ~ 전월말일
datal_idx like sy-tabix,
         l_date TYPE sy-datum,
         l_fdate TYPE sy-datum,
         l_tdate TYPE sy-datum.

read table l_t_range with key fieldname 'ERDAT'.
         l_idx sy-tabix.

         CLEAR l_datel_fdatel_tdate.

         l_date sy-datum 1.
         CONCATENATE l_date+0(6'01' INTO l_date.
         l_tdate l_date 1.
         CONCATENATE l_tdate+0(6'01' INTO l_fdate.

l_t_range-fieldname 'ERDAT'.
l_t_range-LOW l_fdate.
l_t_range-HIGH l_tdate.
l_t_range-SIGN 'I'.
l_t_range-OPTION 'BT'.

APPEND l_t_range.

p_subrc 0.


***************************************************************************


당월DTP의 경우,


*당월1일 ~ 당월말일
datal_idx like sy-tabix,
         l_date TYPE sy-datum,
         l_fdate TYPE sy-datum,
         l_tdate TYPE sy-datum.

read table l_t_range with key fieldname 'ERDAT'.
         l_idx sy-tabix.

         CLEAR l_datel_fdatel_tdate.

         l_date sy-datum 1.
         CONCATENATE l_date+0(6'01' INTO l_date.
         l_tdate sy-datum.
         CONCATENATE l_tdate+0(6'01' INTO l_fdate.



         CALL FUNCTION 'SLS_MISC_GET_LAST_DAY_OF_MONTH'
         EXPORTING
           day_in l_date
         IMPORTING
           last_day_of_month l_tdate.


l_t_range-fieldname 'ERDAT'.
l_t_range-LOW l_date.
l_t_range-HIGH l_tdate.
l_t_range-SIGN 'I'.
l_t_range-OPTION 'BT'.

APPEND l_t_range.

p_subrc 0.


********************************************************************


이렇게 Batch를 실행하게 되면...


1. 지정된 Batch 일정에 따라 Batch 실행일 기준 전월 ~ 당월 2개월 치 데이터만 BW로 가져오고


2. 가져온 데이터를 다시 전월 , 당월 두 형태로 분류해서 CUBE에 적재한다.


3. 그리고 달이 바뀐다면 Process Chain의 중복삭제를 통해 전전월에 해당하는 데이터는 그대로 남아있고 바뀐 날짜 기준의 전월 당월이 다시 적재된다.


위 소스를 가지고 상황에 따라 조금 씩 변형해서 적용하면 될 것 같다....