DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量

本篇涉及的关键词:
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.

好了,到这里结束。算是简单了解。
以后再深挖。

猜你喜欢

转载自blog.csdn.net/weixin_45689053/article/details/111573811
dtp
今日推荐