DTP filter的動態更新方法/Bex Variable/DTP中的過濾變數

xiaomici發表於2021-01-01

本篇涉及的關鍵詞:
Customer exit
OLAP variable
Bex Variable
TVARVC

事情是這樣的:
我們有很多的client,導致有很多的DTP。而且呢,不同client的DTP,有時候要集中抽數啊。
那這時候,DTP裡面的過濾值,多於十個,我們就不能一個一個的來改了。改成固定值,以後還得改。

這時候就要用到變數了。下面分別舉例子來看:

a Transfer Process資料傳輸流程,就是用來定義資料是怎麼傳輸的。那這裡面就可以篩選出需要的資料,篩選條件當然是我們自己定義了。除了你搞個靜態過濾值,也就是常量,比如說只過濾上個月的,只過濾哪個國家的之外,我們還可以動態的提供過濾值,也就是不寫死在filter裡面。。。
從下面可見,你filter點進去,2 可以自己填常量,3 黃色方塊是用變數,4藍色方塊是用routine。
在這裡插入圖片描述

DTP routine

假設有場景如下:
每個月初,我要跑一遍上月的資料概覽。也就是我這個info provider裡面的資料月初跑一次,抽取上個月的資料。上個月的資料怎麼實現呢?
那我們們用這個fiscper這個filter做個例子來看:
在這裡插入圖片描述
routine裡面會有一些自動生成的程式碼,然後我們去填充>
在這裡插入圖片描述
下面的fiscal year variant是看你們用的哪個就填哪個。
在這裡插入圖片描述
呼叫以下的function module.
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
好了,然後來儲存routine,啟用DTP,最後執行一下來看。主要功能都在這個function module裡。實現fiscper這個過濾欄位的自動取值為上個月。
在這裡插入圖片描述
最後設一個處理鏈,每月一號來跑這個DTP,即得到上個月的資料。

關於fiscal year variant的介紹,在這裡.

OLAP Variable

另外一種方式呢,就是使用OLAP變數。
也就是之前在routine旁邊的黃色方框裡的。
在這裡插入圖片描述
這個也可以是和前面一樣的應用場景。比如我們要提取的資料是當前期間之前的一個期間。每月來跑一次。
這個情景還可以擴充套件到其他欄位,比如week欄位,每週跑前一週的資料。
首先得要給過濾欄位建立一個OLAP變數,然後增強在客戶出口裡,然後才可以在DTP裡使用。

建立OLAP變數

這個是在BW modeling tools裡面建,老的是Query designer。
找到過濾值欄位,右鍵new variable,起一個新名字。
在這裡插入圖片描述
通過customer exit來處理。
在這裡插入圖片描述
注意這裡的input ready預設是勾上的,但是我們是用程式碼賦值的,不用勾這個準備輸入值的。描述最好也要改一下,這裡我就不改了。
在這裡插入圖片描述
然後去寫程式碼。
CMOD到自己的customer exit程式碼下,因為程式碼要被DTP filter呼叫。所以i_step = 0是第一步。

// A code block
IF i_step eq 0 
   and  i_varnm eq '0FISCPER'.
   DATA : i_date type SCAL-DATE,
               o_fscper type  /BI0/OIFISCPER.
CASE i_vnam.
  WHEN ‘DTP_TEST'.
  CLEAR l_s_range.
  l_s_range-sign = 'I'.
  l_s_range-opt = 'EQ'.
  i_date = sy-datum.
  CALL FUNCTION ’GET_PREVIOUS_MONTH'
  EXPORTING 
  date = I_DATE
  IMPORTING
  month = o_fscper.
  l_s_range - low = o_fscper.
  APPEND l_s_range TO e_t_range.
  ENDCASE.
  ENDIF.

儲存並啟用這個exit。
然後就可以回到DTP,然後選擇filter的OLAP variable,填入你建立的variable。
執行DTP就會直接取回上月的資料。

ABAP Program

這個方式也是從variable進來的。不一樣的就是,上面的是直接從code裡面寫的動態化決定你要的過濾值,這個可以call function.根據輸入的值來執行DTP。
這種方式適用於動態更改filter值的DTP,也就是說不是一定要上個月,上星期的值,而是我想填什麼值,最後就按什麼值來抽取資料。
那前提就是,你得有個地方來填你的值,然後我再根據程式碼來呼叫。

這就要考慮到這個表:TVARVC 詳見:TVARVC.
在這裡插入圖片描述
TVARVC表是可以更改的,裡面可以填入變數名,此變數名非彼變數名。
這個表裡要存放的可以是我們自定義的一個變數。變數指向可以是一個檔案,可以是單值,也可以是值範圍,拿我們的期間來舉例,這就是個時間的值範圍。 而且是個可以隨時被更改的值範圍。
在這裡插入圖片描述
也就是說,我同樣在定義了FISCPER的變數後,需要寫一段程式碼,呼叫這個TVARVC裡面的這個變數的動態的值。
那我怎麼來寫呢?

  METHOD DTP_TEST.

    DATA: ls_tvarvc TYPE tvarvc.
    SELECT SINGLE *
    FROM tvarvc
    INTO ls_tvarvc
    WHERE name = '*_DTP_FILTER'. //TVARVC裡面的變數的名字

    l_s_range-low  = ls_tvarvc-low. //變數的區間低值
    l_s_range-high = ls_tvarvc-high.
    l_s_range-sign = 'I'.
    l_s_range-opt  = 'BT'.
    APPEND l_s_range TO e_t_range.

  ENDMETHOD.

好了,到這裡結束。算是簡單瞭解。
以後再深挖。

相關文章