DTP filter的動態更新方法/Bex Variable/DTP中的過濾變數
本篇涉及的關鍵詞:
Customer exit
OLAP variable
Bex Variable
TVARVC
事情是這樣的:
我們有很多的client,導致有很多的DTP。而且呢,不同client的DTP,有時候要集中抽數啊。
那這時候,DTP裡面的過濾值,多於十個,我們就不能一個一個的來改了。改成固定值,以後還得改。
這時候就要用到變數了。下面分別舉例子來看:
從下面可見,你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.
好了,到這裡結束。算是簡單瞭解。
以後再深挖。
相關文章
- js--陣列的filter()過濾方法的使用JS陣列Filter
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- Filter過濾器的使用Filter過濾器
- filter過濾Filter
- Filter過濾器Filter過濾器
- PHP 過濾器(Filter)PHP過濾器Filter
- filter在JavaScript中過濾陣列元素FilterJavaScript陣列
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器
- 對話技術平臺(DTP)推出自定義閒聊功能
- Go 中的動態作用域變數Go變數
- JavaWeb - 【Filter】敏感詞過濾JavaWebFilter
- Elasticsearch——filter過濾查詢ElasticsearchFilter
- mysql 動態引數(Dynamic System Variable Summary)MySql
- java8 多條件的filter過濾JavaFilter
- 陣列filter方法對陣列元素進行過濾陣列Filter
- 布隆過濾器(Bloom Filter)過濾器OOMFilter
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- 布隆過濾器 Bloom Filter過濾器OOMFilter
- Bloom Filter 布隆過濾器OOMFilter過濾器
- Stream中filter過濾條件問題記錄Filter
- php中的動態變數的一個應用PHP變數
- 過濾器 Filter 與 攔截器 Interceptor 的區別過濾器Filter
- Rust中的迭代器的使用:map轉換、filter過濾、fold聚合、chain連結RustFilterAI
- 使用maven-war-plugin動態載入處理環境變數,過濾打包檔案MavenPlugin變數
- 轉發 spring 過濾靜態資源的2種方法Spring
- vue如何通過變數動態拼接urlVue變數
- Django(69)最好用的過濾器外掛Django-filterDjango過濾器Filter
- 布隆過濾器(Bloom Filter)詳解過濾器OOMFilter
- Filter-Policy過濾策略&Route-policyFilter
- HBase Filter 過濾器之 ValueFilter 詳解Filter過濾器
- 如何在vue中使用過濾器filterVue過濾器Filter
- Vue定義全域性過濾器filterVue過濾器Filter
- 攔截器(Interceptor)與過濾器(Filter)過濾器Filter
- 下拉表關聯非同步載入- 引數動態過濾非同步
- jQuery中過濾方法slice()方法如何使用?jQuery
- 使用 PHP 的 Filter 函式(過濾器)高效、安全地獲取請求引數PHPFilter函式過濾器
- 對於systemverilog靜態變數和動態變數 ,描述不正確的是()。變數
- ES 23 - 檢索和過濾的區別 (query vs. filter)Filter