本篇涉及的关键词:
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.
好了,到这里结束。算是简单了解。
以后再深挖。