Nastavení na straně SAP BW
Oracle BI přistupuje k SAP BW pomocí XMLA – stejně jako k většině jiných multidimenzionálních databází, které podporuje. Proto, abychom InfoCubes SAP BW zpřístupnili pomocí tohoto rozhraní, je třeba aktivovat příslušnou webovou službu, kterou budeme z OBI volat.
Detailní popis nastavení je nad rámec článku. Výsledkem je aktivní webová služba na následující URL adrese: http://[ADRESA_SERVERU]:[PORT]/sap/bw/xml/soap/xmla, kde ADRESA_SERVERU je aplikační server systému SAP BW a PORT obvykle kolem čísla 8000.
Import do fyzické vrstvy Oracle BI
Import do fyzické vrstvy metadat probíhá obdobně, jako pro relační zdroje. V menu Administration Tool zvolit File > Import > from Multi-dimensional. Následně je třeba vybrat:
- Provider Type: SAP/BW 3.5/7.0
- URL: Adresa nastavená v předchozím kroku
- Username a Password: Přihlášení do SAP BW
Výsledkem importu je nová databáze s multidimenzionální kostkou. Naimportována byla veškerá metadata kostky: tedy ukazatele i dimenze a to včetně hierarchií.
Přes pravé tlačítko a volbu „View Members...“ lze zkontrolovat hodnoty příslušné dimenze a tím otestovat připojení.
Business Model
Pro definici Business modelu stačí celou naimportovanou strukturu přenést „drag and drop“. Z fyzické vrstvy se přenesou ukazatele (i s nastavenou agregací) a dimenze (i s hierarchiemi). V rámci definice Business Modelu tak není třeba provádět žádné manuální úpravy.
Nezapomeňme na vytvoření prezentačního katalogu.
Výsledek
V BI Answers pak máme možnost standardním způsobem vytvořit report, využívat drillování hierarchiemi a podobně.
Logický dotaz vygenerovaný Prezentačním Serverem má standardní podobu:
SELECT Channel."Channel Level 00" saw_0, Channel."Channel Level 01" saw_1, "Product Group Hierarchy"."Product Group Hierarchy Level 00" saw_2, "$ZD_SALES".Quantity saw_3, "$ZD_SALES".Revenue saw_4 FROM "$INFOCUBE" ORDER BY saw_0, saw_1, saw_2
Fyzický dotaz generovaný BI Serverem do SAP BW však již není klasické SQL, ale multidimenzionální MDX dotaz:
With set [ZR_CHAN1] as '{[ZR_CHAN].[LEVEL00].members}' set [ZR_CHAN2] as ' hierarchize ({ [ZR_CHAN1], Generate({[ZR_CHAN1]},Descendants([ZR_CHAN].currentmember,[ZR_CHAN].[LEVEL01],SELF), ALL) } )' set [ZR_PROD PRODUCT GROUP HIERARCHY1] as '{[ZR_PROD PRODUCT GROUP HIERARCHY].[LEVEL00].members}‚ set [Axis1Set] as 'crossjoin ({[ZR_CHAN2]},{[ZR_PROD PRODUCT GROUP HIERARCHY1]})‚ member [Measures].[MS1] as '[Measures].[Z_REV]‚ member [Measures].[MS2] as '[Measures].[ZR_QTY]‚ select {[Measures].[MS1],[Measures].[MS2]} on columns, NON EMPTY {[Axis1Set]}properties MEMBER_UNIQUE_NAME, PARENT_UNIQUE_NAME on rows from [$ZD_SALES]
Jakub Genža (CapGemini)