6. diel - Transformácie medzi InfoObjekty v SAP
V minulej lekcii, Dáta Store Object (DSO) v SAP , sme sa venovali Data Store objektom (DSO). Dnes sa pozrieme na transformácie a na čo v systéme SAP vlastne sú? Až doteraz sme si vysvetľovali InfoObjekty, PSA, DSO, čiže jednotlivé vrstvy dátového skladu. Ďalej sme si v kapitole o nahrávaní dát do PSA vysvetlili, že PSA je KAM dáta nahrávame a InfoPacket potom AKO to robíme. Dnes si vysvetlíme pojem transformácie, ktorý udáva CEZ čo dáta nahrávame, pozri obrázok ďalej v lekcii. Pomocou transformácií môžeme dáta pri nahrávaní rovno filtrovať, pozmeňovať, aktualizovať, dopĺňať.
Príklad
Dáta sú z jednej vrstvy prenesená do ďalšej dátovej vrstvy, tzn., Vieme KAM, vieme AKO (pomocou DTP, bude bližšie vysvetlené v nasledujúcej kapitole, ale prakticky účel je totožný s InfoPackage ako je u PSA), a posledná neznámou je CEZ CO? Áno, to je práve transformácia. Transformácia teda umožňuje prenášať dáta z jednej vrstvy do druhej.
Možnosti sú najčastejšie:
- Z PSA do DSO
- Z DSO do InfoCube
- Z InfoCube do InfoCube
- Z PSA do DSO a potom do InfoCube (ale tu už budú transformácia dve!)
Ako už vieme z minula, tak PSA či DSO sa skladá z elementárnych InfoObjektů, ktoré jasne definujú jeho typ. Pri vytváraní transformácie je možné každý tento jeden InfoObjekt v jednej dátovej sade pozmeniť, doplniť, upraviť pod.
Založenia transformácie 1: 1 (PSA - DSO)
Táto transformácia je najzákladnejšie typ, všetky dáta zo zdroja sa 1:
1 prenesú do cieľa, bez zmeny. Vyberieme cieľový objekt a cez pravé
tlačidlo Create Transformation…
založíme novú
transformáciu:
Keďže sme vybrali vlastne cieľ, tak teraz je čas vybrať zdroj, tzn. odkiaľ sa dáta cez transformáciu do cieľa budú prenášať. Najbežnejšími zdrojmi sú:
- DataSource (PSA)
- InfoCube (iná dátová kocka)
- Multiprovider (UNION Infocube, bude vysvetlené neskôr v kurze)
- DSO (už poznáme z minulej lekcie)
- Ostatné objekty (pozri obrázok)
Po vybraní zdroje a potvrdení sa modelovanie prepne do nasledujúcej obrazovky. Ak sú objekty v cieli a zdrojmi zhodné, dôjde k automatickému priradenie. 1: 1 priradenie (na obrázku =) znamená, že medzi jednotlivými dátovými objektmi nedôjde k žiadnej zmene.
Ak sme s modelovaním hotoví, tak objekt musí byť ešte aktivovaný.
Založenie pokročilejšie transformácie (PSA - DSO)
Transformácia je od slova transformovať (meniť). Priradenie dát 1: 1 je síce pekné, ale ak je potreba niečo doplniť, zmeniť, zameniť, priradiť konštantu, tak toto BW systém pomocou transformáciou tiež umožňuje. Po rozkliknutí (2x) sa zobrazí nové okno, kde možno upraviť jeden element (jedno pole) z dátovej sady. Takto možno nastaviť / meniť / vytvárať každé pole a to dokonca ani v zdroji nemusí existovať. V cieli však takto počas transformácie vznikne (~ ABAP rutina).
Okrem Direct Assignment, ktorý označuje transformáciu 1: 1:
Máme na výber máme niekoľko možností, ktoré si tu postupne popíšeme.
No Transformation (bez transformácie)
Dáta zo zdroja nebudú prenesená do cieľa vôbec
Constant (konštanta)
Zapíše sa vždy rovnaká konštanta, napr. 5
, či
"KA"
:
Formula (vzorček)
Vykoná transformáciu pomocou nejakého vzorca. Ak je napr. Vstupné pole
BARVA
číslo, vracia vzorec "OK"
. Ak nie je, tak
"NOK"
. Alebo je napr. Možné z dátumu transformovať kal.
týždeň pod.
Vzorec je možné rovno aj otestovať, či robí to, čo očakávame. Pomocou
francúzskeho kľúča zavoláme checker a otestujeme, či podľa vstupu
dostaneme správny výstup. Otestujeme teda, či pri čísle bude výsledok
"OK"
. Do vstupného poľa zadáme 500
a pomocou ikony
hodín s fajkou otestujeme vzorec. V Result:
vidíme, že vzorec
funguje správne, pretože výstup je "OK"
.
Read Master Data
Informácia je možné vyčítať z kmeňových dát, napr. Nejaký atribút (príkladom máme infoobjekt auto a jeho atribúty / vlastnosti, čo sú farba, výbava, motorizácia a pod.)
Routine (programovanie)
Ak žiadna z možností vyššie nepomohla vyriešiť transformačný požiadavka, je možné pomocou ABAP rutiny (to je programovanie v SAP ) Napísať úplne vlastné logiku.
V novom okne vyberieme ABAP routine a už proskočíme do definície vlastnej logiky v ABAP editore:
Editor nás rovno nasmeroval do transformačnej metódy pre danú
charakteristiku, v našom prípade ZMP_PRIS
.
Čo vidíme
Prejdeme si teda, čo vidíme:
- METHOD compute_ZMP_PRIS - toto je automaticky založená metóda. Tu
naprogramujeme vlastné transformačný logiku. Metódy mávajú importné a
exportné parametre. Ku vstupným dátam sa dostaneme pomocou
SOURCE_FIELDS-ID_PRI
, kdeID-PRI
je pole z predchádzajúcej vrstvy. Ako vidíme, systém prevzal i dátový typ z minulej dátovej vrstvyTYPE C LENGTH 000006
. Ide o dátový typCHAR
s dĺžkou 6 znakov.
Ďalej od riadku 108 (pozn .: u iných hash výpočtu sa
číslo môže líšiť, záleží od počtu premenných, polí v tansformaci
pod.) Už môžeme vpísať vlastný kód. Vrátenie transformovanej
hodnoty sa vykonáva pomocou pripraveného kľúčového slova
RESULT =
.
Príklad
Pre pochopenie máme jednoduchý príklad. Máme charakteristiku
Z_NR_VER
, kde v master dátach máme uloženú konštantu pre
výpočet. Chceme každé číslo, ktoré príde ako vstup ID_PRI
,
vynásobiť touto konštantou a vrátiť prepočítaný výsledok. Pridáme
tento kúsok kódu:
DATA lt_rkchvers TYPE /bic/pz_nr_ver. SELECT SINGLE * FROM /bic/pz_nr_ver INTO lt_rkchvers. result = SOURCE_FIELDS-ID_PRI * lt_rkchvers-/bic/rkchvers.
Rutina po vložení kódu:
Čože sme to vlastne naprogramovali? Poďme si vysvetliť jednotlivé riadky:
DATA lt_rkchvers TYPE /bic/pz_nr_ver.
DATA
je definícia novej premennej s názvom
lt_rkchvers
, ktorá je dátového typu /bic/pz_nr_ver
.
V SAPu ako takom je všetko na konci uložené v tabuľke a to
platí aj u infoobjektů. Do tabuliek kmeňových dát možno
pristupovať napriamo cez /BIC/Pxxxxx
, kde xxxxx
je
technický názov infoobjektu. Naša nová premenná bude mať štruktúru ako
infoobjekt Z_NR_VER
. Viď obrázok nižšie, v Infoobjektu v
záložke MasterData si obsah kmeňových dát môžeme pomocou tabuľky
zobraziť. Rovnako to platí pomocou ABAP príkazov. Dáta sa dajú z / do
tabuľky zapisovať aj čítať. Infoobjekt Z_NR_VER
obsahuje iba
jeden atribút RKCHVER
, ktorý je naša konštanta pre výpočet. V
samotných kmeňových dátach je založený iba jeden záznam (510).
Ďalej tu máme SELECT SINGLE *
, ktoré slúžia pre načítanie
jedného záznamu z databázovej tabuľky, kde sa vyberú všetky stĺpce
pomocou *
v príkaze SELECT
. Z akej tabuľky sa určí
pomocou kľúčového slova FROM
. Tabuľka je v tomto prípade
/bic/pz_nr_ver
. Dáta sa ešte musí niekam uložiť, preto sme si
najprv vytvorili novú premennú lt_rkchvers
toho istého typu, ako
je zdrojová tabuľka, aby to bolo celé typovo konzistentné:
SELECT SINGLE * FROM /bic/pz_nr_ver INTO lt_rkchvers.
Nakoniec nasleduje vrátenie výsledku:
result = SOURCE_FIELDS-ID_PRI * lt_rkchvers-/bic/rkchvers.
Ku vstupným dátam sa pristupuje pomocou kľúčového slova
SOURCE_FIELDS-xxxx
, kde xxxx
je názov poľa. Tým,
že sme v transformácii prepojili obe polia, došlo k automatickému priradenie
a vygenerovanie premenné SOURCE_FIELDS-ID_PRI
. Z minulého kroku
sme do premennej lt_rkchvers
načítali onú konštantu. Týmto
máme zdrojovú informáciu a konštantu, takže *
zaistí
vynásobení. Aby sa hodnota potom uložila do dátového cieľa
(charakteristiky), je pomocou kľúčového slova result
odovzdaná
späť.
Toto bol veľmi jednoduchý príklad rutiny pri jednej charakteristiky. Prakticky každá charakteristika môže mať vlastný rutinu a to sú infokocky io 150 charakteristikách a niekoľkých desiatkach ukazovateľov.
Môžeme opäť skontrolovať, či rutina robí čo má, to
už poznáme o niekoľko riadkov vyššie. Po zadaní hodnoty 10
systém vypočíta vrátenú hodnotu 5100
, všetko funguje ako
má.
Týmto sme si vysvetlili účel transformácie, aké sú možnosti, a nabudúce sa pozrieme na Transformácie medzi InfoObjekty - Pokračovanie .