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

本篇涉及的关键词:
Customer exit
OLAP variable
Bex Variable
TVARVC

事情是这样的:
我们有很多的client,导致有很多的DTP。而且呢,不同client的DTP,有时候要集中抽数啊。
那这时候,DTP里面的过滤值,多于十个,咱就不能一个一个的来改了。改成固定值,以后还得改。

这时候就要用到变量了。下面分别举例子来看:

文章目录

    • DTP routine
    • OLAP Variable
      • 创建OLAP变量
    • ABAP Program
a Transfer Process数据传输流程,就是用来定义数据是怎么传输的。那这里面就可以筛选出需要的数据,筛选条件当然是咱自己定义了。除了你搞个静态过滤值,也就是常量,比如说只过滤上个月的,只过滤哪个国家的之外,我们还可以动态的提供过滤值,也就是不写死在filter里面。。。
从下面可见,你filter点进去,2 可以自己填常量,3 黄色方块是用变量,4蓝色方块是用routine。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第1张图片

DTP routine

假设有场景如下:
每个月初,我要跑一遍上月的数据概览。也就是我这个info provider里面的数据月初跑一次,抽取上个月的数据。上个月的数据怎么实现呢?
那咱们用这个fiscper这个filter做个例子来看:
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第2张图片
routine里面会有一些自动生成的代码,然后我们去填充>
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第3张图片
下面的fiscal year variant是看你们用的哪个就填哪个。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第4张图片
调用以下的function module.
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第5张图片
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第6张图片
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第7张图片
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第8张图片
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第9张图片
好了,然后来保存routine,激活DTP,最后执行一下来看。主要功能都在这个function module里。实现fiscper这个过滤字段的自动取值为上个月。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第10张图片
最后设一个处理链,每月一号来跑这个DTP,即得到上个月的数据。

关于fiscal year variant的介绍,在这里.

OLAP Variable

另外一种方式呢,就是使用OLAP变量。
也就是之前在routine旁边的黄色方框里的。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第11张图片
这个也可以是和前面一样的应用场景。比如我们要提取的数据是当前期间之前的一个期间。每月来跑一次。
这个情景还可以扩展到其他字段,比如week字段,每周跑前一周的数据。
首先得要给过滤字段创建一个OLAP变量,然后增强在客户出口里,然后才可以在DTP里使用。

创建OLAP变量

这个是在BW modeling tools里面建,老的是Query designer。
找到过滤值字段,右键new variable,起一个新名字。
在这里插入图片描述
通过customer exit来处理。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第12张图片
注意这里的input ready默认是勾上的,但是我们是用代码赋值的,不用勾这个准备输入值的。描述最好也要改一下,这里我就不改了。
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第13张图片
然后去写代码。
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.
DTP filter的动态更新方法/Bex Variable/DTP中的过滤变量_第14张图片
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.

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

你可能感兴趣的:(笔记)