一般公司需要SD:卖东西 MM:买东西 FI:财务记账
在SAP里面会分四大组:
改了后,要保存的时候总会问你要包,这个包用来在不同系统间传输。
SE21 Z打头建一个。
建完了之后后期改的东西都放在这个包里,SE80能看到。
一般情况下运维的都有包了,这个包就像一个文件夹,你建在这个包里的所有东西,都能在SE80里面看到。
ERP数据有主数据和交易数据,SAP提供了一些预定义的表,你的交易会自动保存到预定义表里。有时候我们得自己建主数据表和交易数据表。为啥呢?因为现有表不满足需求。。。
建表要注意选择是主数据表还是交易数据表。
SE13直接去看预定义表技术设置是主数据还是交易数据。
一般建表都是basis去做,当然BW有时候也需要自己去建表的。
一般数据源就是咱自己去建的。
分为5个步骤
在ERP里:1. 提取结构
2.提取器
SAPI 负责转运数据 3.复制数据源
在BW里: 4.转换:传输规则
5.DTP
SBIW里面是一般数据源的所有操作。
这里在ERP里建一个数据源,如果是基于表。那就类似于在BW里面建一个数据源,基于file。其实是一个意思。
RSO2去建一般数据源。
数据源里可以隐藏字段,可以选择一些用来过滤的字段。
建完了去RSA6去看看,是不是保存好了。现在ODQ有些会自动释放,有些需要手动释放。
接下来去RSA3去检查是不是能拿出数据到数据源去。
接下来去BW去复制数据源了。找到源系统,右键复制数据源。然后建一个target,中间通过转换和DTP把数据拉过来。
RSDS现在还能用来复制。但是这个要再激活一下,现在直接可以在BWMT里面直接复制加激活。
在ERP里的提取结构,如果直接从表或者视图抽取,会生成一个传输结构。在SE11里面能看到。也就是你最后选择了的那些字段的结构。结构以/BIC/开头。以数据源名字结尾。
在BW里面有一个表,叫RSFWNFIELD
这个表里会有数据源字段对应的匹配信息对象。
同时RSDIOBJ这个表也能看见字段对应的信息对象。
table和view都很简单。
domain就是建文本数据源的时候,可以把domain的值抽取过来。
query,这个就是infoset。那么问题就来了,view和infoset有啥区别?
区别是,view它其实只是个inner join,infoset是可以有left outer join等其他复杂的定义。
那么首先就得建一个infoset。SQ02去建infoset。 easy,就是一些拖拖拽拽,默认inner join,可以改成left outer join。
最后就是用function module, 写代码来select数据。也就是这个数据表里的数据,得用逻辑处理一下,再抽取到BW去。
好歹得有个case的判断,或者if的判断。
这个就是跟前几个不同了,一般我们用table,用view的话,只要填写了table名,view名,domain名字,还有infoset的名字,那么系统会自己给我们创建一个extract structure。然后我们去选需要传输的字段,系统会再建一个传输结构。这个以/BIC/开头,数据源名字结尾的结构。
到FM这就不同了,你得自己个去建这个extract structure。然后再建一个FM,最后把数据给用FM基于extract structure抽取数据到数据源。
整个流程:
这个一般咱们都是不自己从头建的。就是直接copy一个SAP已经有的模板,然后修改。
在这SAP就提供了个function group: RSAX
我们就去copy它这个function group建一个新的,然后去copy它底下的function module去建一个新的。
se37去建一个新的function group。或者直接SE80去copy一个。
一般我们建数据源,弄了上面的几种方式,简单的来讲都是搞全量。但是如果你要弄成增量的,也是可以的。
增量机制我们自己设,一共给了三个选项:1. 时间戳 2. 日历日 3. 编号
选的这些要对应到数据源里面的Field NM, 得数据源里面有相应的字段,你才能根据这个字段来搞增量。
一般BW那边一开始都是做个initial delta,这个就是先做一个full load, 然后把下次做delta。但是系统做完了这个initial之后,就同步会在一个表里存一个delta status。以便于下次delta的时候先检查之前抽到哪里了。 这个表就是:ROOSGENDLM
比如说你这个是按编号来的,第一次做initial抽了1-89号,那么delta status会给你记录编号字段,89.
之后的delta抽取,就会先去检查你的delta status的编号,从89后面的那个直接抽了。等这个delta抽取完,再设置一个新的delta status。
对于数据源那边可以按个啥编号来递增的,就可以选numeric pointer. 但是这种情况就是,不会对之前的编号做修改的。只针对特定没有修改的,只有新增的情况。
对于数值来说,选择new status for changed records就是只会去拿最新的数值。原先10,现在变成20,那就会只取20.
如果选addictive delta,那它就会取个增加的值10.
由于这个编号限制的有点多。所以还有CALDAY的选项。
也就是数据源里有这个日期的。
这个会涉及到安全区间上限和安全区间下限。
比如说第一次initial把所有更新日期是8月31号之前的数据都抽取了一遍。
那么delta status会记成8月31号。
那么一般我们一天delta一次。假设我今天晚上9点抽取完了所有数据。但是接下来在晚上也会去新增或修改一些数据。
那么数据源里就可能会有日期是8月31号的但是被修改了的数据。或者是被新增了的数据。
这段时间的数据我下次抽取的时候也要拿过来。
如果此时再去执行一遍delta,那么这个8月31号的日期的记录就不会被取过来。因为delta status里面记了8月31号。它是个日期,不会精确到时间点的。它下次只会去找创建日期大于8月31号的,也就是9月1号后的数据。
为了解决这个,就得去设安全下限,和安全上限。我可以把安全下限设置成1天。就会去把上次delta status之前一天的数据都拿过来。这样就囊括了所有可能丢失的数据。不管你啥时候跑delta,只要是一天跑一次,数据就丢不了。
但是这个日期最好是系统记录的更新日期。这也是个限制。
最后就是一个timestamp。
timestamp也是有点像CALDAY的,只不过是精确到时间了。那么比如10点去抽一次delta。那么有可能是有个订单9点59开始建,到10点02才保存。10点去抽的时候,并不能抽到这一条。因为它还没保存,但是下次的10点再去抽,已经保存好了的话,可是它的时间会记录成9点59. 我下次抽的时间戳就会是上次的10点后建的。那这条就抽不到了。
于是还得去设置安全下限,这种一般设置个1小时,2小时的。
但是无论怎样,得是数据源里有这三种字段才可以设置增量。而且都还有丢失数据的风险。实在丢了,就只能用full来抽取一下了。
在RSA5里面看到所有预定义的数据源。
使用前得先激活。
激活后会在RSA6看到。要是在RSA5里面,在版本比较那里也能看到是不是激活状态。
LO数据源的抽取需要首先填充setup表,要先告知业务用户不要搞了,然后让basis锁住用户权限(一般都是在非工作时间,下班后啥的)然后咱去SBIW去手动填充。
要是人家先填充完了,就去LBWG或者SE14给删掉再重新填充。
这个是自己去生成数据源。COPA的数据都是从各个模块填充过来的。
在BI content下面,也就是RSORBCT下。
BI Content下面都是delivery版本的SAP给你预定义好的对象。所有对象一开始都是D版本。
用之前得install。
install并且激活了之后,就能在metadata repository里面看到激活版本。