Lekce 6 - Transformace mezi InfoObjekty v SAP
V minulé lekci, Data Store Object (DSO) v SAP, jsme se věnovali Data Store Objektům (DSO). Dnes se podíváme na transformace a k čemu v systému SAP vlastně jsou? Až doposud jsme si vysvětlovali InfoObjekty, PSA, DSO, čili jednotlivé vrstvy datového skladu. Dále jsme si v kapitole o nahrávání dat do PSA vysvětlili, že PSA je KAM data nahráváme a InfoPacket potom JAK to děláme. Dnes si vysvětlíme pojem transformace, který udává PŘES co data nahráváme, viz obrázek dále v lekci. Pomocí transformací můžeme data při nahrávání rovnou filtrovat, pozměňovat, aktualizovat, doplňovat.
Příklad
Data jsou z jedné vrstvy přenesena do další datové vrstvy, tzn., víme KAM, víme JAK (pomocí DTP, bude blíže vysvětleno v následující kapitole, ale prakticky účel je totožný s InfoPackage jako je u PSA), a poslední neznámou je PŘES CO? Ano, to je právě transformace. Transformace tedy umožňuje přenášet data z jedné vrstvy do druhé.

Možnosti jsou nejčastěji:
- Z PSA do DSO
- Z DSO do InfoCube
- Z InfoCube do InfoCube
- Z PSA do DSO a pak do InfoCube (ale zde již budou transformace dvě!)
Jak již víme z minula, tak PSA či DSO se skládá z elementárních InfoObjektů, které jasně definují jeho typ. Při vytváření transformace je možné každý tento jeden InfoObjekt v jedné datové sadě pozměnit, doplnit, upravit apod.
Založení transformace 1:1 (PSA - DSO)
Tato transformace je nejzákladnější typ, všechna data ze zdroje se 1:1
přenesou do cíle, beze změny. Vybereme cílový objekt a přes pravé
tlačítko Create Transformation…
založíme novou
transformaci:

Jelikož jsme vybrali vlastně cíl, tak teď je čas vybrat zdroj, tzn. odkud se data přes transformaci do cíle budou přenášet. Nejběžnějšími zdroji jsou:
- DataSource (PSA)
- InfoCube (jiná datová kostka)
- Multiprovider (UNION Infocube, bude vysvětleno později v kurzu)
- DSO (již známe z minulé lekce)
- Ostatní objekty (viz obrázek)

Po vybrání zdroje a potvrzení se modelování přepne do následující obrazovky. Pokud jsou objekty v cíli a zdroji shodné, dojde k automatickému přiřazení. 1:1 přiřazení (na obrázku =) znamená, že mezi jednotlivými datovými objekty nedojde k žádné změně.

Pokud jsme s modelováním hotoví, tak objekt musí být ještě aktivován.
Založení pokročilejší transformace (PSA - DSO)
Transformace je od slova transformovat (měnit). Přiřazení dat 1:1 je sice hezké, ale pokud je potřeba něco doplnit, změnit, zaměnit, přiřadit konstantu, tak toto BW systém pomocí transformací také umožňuje. Po rozkliknutí (2x) se zobrazí nové okno, kde lze upravit jeden element (jedno pole) z datové sady. Takto lze nastavit / měnit / vytvářet každé pole a to dokonce ani ve zdroji nemusí existovat. V cíli ovšem takto během transformace vznikne (~ABAP rutina).
Kromě Direct Assignment, který označuje transformaci 1:1:

Máme k výběru máme několik možností, které si zde postupně popíšeme.
No Transformation (bez transformace)
Data ze zdroje nebudou přenesena do cíle vůbec
Constant (konstanta)
Zapíše se vždy stejná konstanta, např. 5
, či
"KA"
:

Formula (vzoreček)
Provede transformaci pomocí nějakého vzorečku. Pokud je např. vstupní
pole BARVA
číslo, vrací vzorec "OK"
. Pokud není,
tak "NOK"
. Nebo je např. možné z data transformovat kal. týden
apod.


Vzorec je možné rovnou i otestovat, zda dělá to, co očekáváme. Pomocí
francouzského klíče zavoláme checker a otestujeme, zda dle vstupu dostaneme
správný výstup. Otestujeme tedy, jestli při čísle bude výsledek
"OK"
. Do vstupního pole zadáme 500
a pomocí ikony
hodin s fajfkou otestujeme vzorec. V Result:
vidíme, že vzorec
funguje správně, protože výstup je "OK"
.

Read Master Data
Informace je možné vyčíst z kmenových dat, např. nějaký atribut (příkladem máme infoobjekt auto a jeho atributy / vlastnosti, což jsou barva, výbava, motorizace apod.)
Routine (programování)
Pokud žádná z možností výše nepomohla vyřešit transformační
požadavek, je možné pomocí ABAP rutiny (to je programování v SAP ) napsat zcela vlastní logiku.

V novém okně vybereme ABAP routine a již proskočíme do definice vlastní logiky v ABAP editoru:

Editor nás rovnou nasměroval do transformační metody pro danou
charakteristiku, v našem případě ZMP_PRIS
.
Co vidíme
Projdeme si tedy, co vidíme:
- METHOD compute_ZMP_PRIS – toto je automaticky založená metoda. Zde
naprogramujeme vlastní transformační logiku. Metody mívají importní a
exportní parametry. Ke vstupním datům se dostaneme pomocí
SOURCE_FIELDS-ID_PRI
, kdeID-PRI
je pole z předchozí vrstvy. Jak vidíme, systém převzal i datový typ z minulé datové vrstvyTYPE C LENGTH 000006
. Jedná se o datový typCHAR
o délce 6 znaků.

Dále od řádku 108 (pozn.: u jiných tranformací se
číslo může lišit, záleží na počtu proměných, polí v tansformaci
apod.) již můžeme vepsat vlastní kód. Vrácení transformované
hodnoty se provádí pomocí připraveného klíčového slova
RESULT =
.
Příklad
Pro pochopení máme jednoduchý příklad. Máme charakteristiku
Z_NR_VER
, kde v master datech máme uloženou konstantu pro
výpočet. Chceme každé číslo, které přijde jako vstup
ID_PRI
, vynásobit touto konstantou a vrátit přepočítaný
výsledek. Přidáme tento kousek 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:

Cože jsme to vlastně naprogramovali? Pojďme si vysvětlit jednotlivé řádky:
DATA lt_rkchvers TYPE /bic/pz_nr_ver.
DATA
je definice nové proměnné s názvem
lt_rkchvers
, která je datového typu /bic/pz_nr_ver
.
V SAPu jako takovém je všechno na konci uložené v tabulce a
to platí i u infoobjektů. Do tabulek kmenových dat lze přistupovat
napřímo přes /BIC/Pxxxxx
, kde xxxxx
je technický
název infoobjektu. Naše nová proměnná bude mít strukturu jako infoobjekt
Z_NR_VER
. Viz obrázek níže, v Infoobjektu v záložce MasterData
si obsah kmenových dat můžeme pomocí tabulky zobrazit. Stejně to platí
pomocí ABAP příkazů. Data se dají z/ do tabulky zapisovat i číst.
Infoobjekt Z_NR_VER
obsahuje pouze jeden atribut
RKCHVER
, jenž je naše konstanta pro výpočet. V samotných
kmenových datech je založený pouze jeden záznam (510).

Dále tu máme SELECT SINGLE *
, které slouží pro načtení
jednoho záznamu z databázové tabulky, kde se vyberou všechny sloupce pomocí
*
v příkazu SELECT
. Z jaké tabulky se určí
pomocí klíčového slova FROM
. Tabulka je v tomto případě
/bic/pz_nr_ver
. Data se ještě musí někam uložit, proto jsme si
nejprve vytvořili novou proměnnou lt_rkchvers
toho samého typu,
jako je zdrojová tabulka, aby to bylo celé typově konzistentní:
SELECT SINGLE * FROM /bic/pz_nr_ver INTO lt_rkchvers.
Nakonec následuje vrácení výsledku:
result = SOURCE_FIELDS-ID_PRI * lt_rkchvers-/bic/rkchvers.
Ke vstupním datům se přistupuje pomocí klíčového slova
SOURCE_FIELDS-xxxx
, kde xxxx
je název pole. Tím, že
jsme v transformaci propojili obě pole, došlo k automatickému přiřazení a
vygenerování proměnné SOURCE_FIELDS-ID_PRI
. Z minulého kroku
jsme do proměnné lt_rkchvers
načetli onu konstantu. Tímto máme
zdrojovou informaci a konstantu, takže *
zajistí vynásobení.
Aby se hodnota poté uložila do datového cíle (charakteristiky), je pomocí
klíčového slova result
předána zpět.
Toto byl velice jednoduchý příklad rutiny u jedné charakteristiky. Prakticky každá charakteristika může mít vlastní rutinu a to jsou Infokostky i o 150 charakteristikách a několika desítkách ukazatelů.
Můžeme opět zkontrolovat, zda rutina dělá co má, to
již známe o několik řádek výše. Po zadání hodnoty 10
systém vypočte vrácenou hodnotu 5100
, vše funguje jak má.

Tímto jsme si vysvětlili účel transformace, jaké jsou možnosti, a příště se podíváme na Transformace mezi InfoObjekty - Pokračování.