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.
好了,到這裡結束。算是簡單瞭解。
以後再深挖。
相關文章
- SAP BW : Cannot delete DTPdelete
- DTP請求在並行模式出錯並行模式
- Java 中的 Filter 過濾器詳解JavaFilter過濾器
- JavaWeb 中 Filter過濾器JavaWebFilter過濾器
- js--陣列的filter()過濾方法的使用JS陣列Filter
- Bex Query variable Type 說明
- OGG -FILTER 引數過濾Filter
- Filter過濾器的使用Filter過濾器
- filter過濾Filter
- TCL: 變數和過程variable變數
- OGG 行過濾filter 引數Filter
- servlet的過濾器filter類Servlet過濾器Filter
- Filter過濾器Filter過濾器
- filter在JavaScript中過濾陣列元素FilterJavaScript陣列
- PHP 過濾器(Filter)PHP過濾器Filter
- Java Filter過濾器JavaFilter過濾器
- lucene Filter過濾器Filter過濾器
- Go 中的動態作用域變數Go變數
- java中listFiles(Filefilter filter)檔案過濾器的實現過程JavaFilter過濾器
- C++ static variable(靜態變數) 學習C++變數
- 對話技術平臺(DTP)推出自定義閒聊功能
- Eclipse Data Tools Platform (DTP) 連線SQL Server 2008EclipsePlatformSQLServer
- Elasticsearch——filter過濾查詢ElasticsearchFilter
- JavaWeb - 【Filter】敏感詞過濾JavaWebFilter
- mysql 動態引數(Dynamic System Variable Summary)MySql
- Web中的監聽器【Listener】與過濾器【Filter】 例項Web過濾器Filter
- java8 多條件的filter過濾JavaFilter
- php中的動態變數的一個應用PHP變數
- Stream中filter過濾條件問題記錄Filter
- 動態修改 NodeJS 程式中的變數值NodeJS變數
- 陣列filter方法對陣列元素進行過濾陣列Filter
- 布隆過濾器(Bloom Filter)過濾器OOMFilter
- Laravel 模型過濾(Filter)設計Laravel模型Filter
- 布隆過濾器 Bloom Filter過濾器OOMFilter
- Bloom Filter 布隆過濾器OOMFilter過濾器
- Filter不過濾CSS和JSFilterCSSJS
- angular內建過濾器-filterAngular過濾器Filter
- js中的靜態變數JS變數