+ All Categories
Home > Documents > Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Date post: 22-Jan-2016
Category:
Upload: alexandru
View: 129 times
Download: 3 times
Share this document with a friend
Description:
Domeniul tehnologiei informaţiei a adus recent în prim-plan un nou instrument de dezvoltare a aplicaţiilor ce interacţionează cu baze de date, Oracle JDeveloper, care aprofundează şi domeniul inteligenţei afacerii.
287
Implementarea unui sistem OLAP in cadrul unei firme Introducere “Informaţia este moneda democraţiei” spunea renumitul autor al Declaraţiei de Independenţă, Thomas Jefferson, în secolul al XIX-lea, poate nebănuind valoarea acestei afirmaţii astăzi, după aproape 200 de ani. Sursă de conflicte, de invenţii, de progres, informaţia privată este şi sursa marilor averi moderne. Orice economie puternică sau orice companie solidă se bazează pe un flux continuu de informaţie în încercarea de a fi întotdeauna cu un pas înaintea celorlalţi. Este deci natural ca odată cu primele apariţii ale calculatoarelor si ale reţelelor moderne de comunicaţii să apară un nou domeniu de activitate, acela al tehnologiei informaţiei, hardware şi software angrenate într-un proces de continuă cercetare şi dezvoltare, întotdeauna existând mai rapid, mai sigur, mai bine. Este momentul apariţiei marilor companii din domeniu şi momentul în care se trasează direcţiile fiecăreia. Una din direcţiile majore de implementare este cea a bazelor de date, acestea din urmă fiind poate accepţiunea cea mai apropiată de informaţie privată, securizată, şi deci, un domeniu indispensabil, unde nu se poate face rabat la calitate. Pagina 1 din 287
Transcript
Page 1: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Implementarea unui sistem OLAP in cadrul unei firme

Introducere

“Informaţia este moneda democraţiei” spunea renumitul autor al Declaraţiei de

Independenţă, Thomas Jefferson, în secolul al XIX-lea, poate nebănuind valoarea acestei

afirmaţii astăzi, după aproape 200 de ani.

Sursă de conflicte, de invenţii, de progres, informaţia privată este şi sursa marilor

averi moderne. Orice economie puternică sau orice companie solidă se bazează pe un flux

continuu de informaţie în încercarea de a fi întotdeauna cu un pas înaintea celorlalţi.

Este deci natural ca odată cu primele apariţii ale calculatoarelor si ale reţelelor

moderne de comunicaţii să apară un nou domeniu de activitate, acela al tehnologiei

informaţiei, hardware şi software angrenate într-un proces de continuă cercetare şi dezvoltare,

întotdeauna existând mai rapid, mai sigur, mai bine. Este momentul apariţiei marilor

companii din domeniu şi momentul în care se trasează direcţiile fiecăreia. Una din direcţiile

majore de implementare este cea a bazelor de date, acestea din urmă fiind poate accepţiunea

cea mai apropiată de informaţie privată, securizată, şi deci, un domeniu indispensabil, unde

nu se poate face rabat la calitate.

Lucrarea de faţă îşi propune să prezinte o implementare teoretică şi practică a unui

depozit de date precum şi o aplicaţie Java potrivită acestui tip de stocare de date. Datele de

intrare aparţin S.C. INPRODCOM S.R.L. şi reprezintă date veridice din anii 2003, 2004,

2005 asupra activităţii principale a firmei, evidenţa unor automate de cafea într-o anumită

răspândire teritorială, acestea fiind detaliate în capitolul 1, alături de o descriere a

intreprinderii, din punct de vedere strategic, comercial, tehnic, financiar-contabil, dar şi din

perspectiva resurselor umane şi a structurii manageriale.

Conceptul ce stă la baza depozitului de date este acela de cub n-dimensional, o

metodă inovatoare de grupare a datelor unor tabele relaţionale într-una sau mai multe tabele

de fapte prin produs cartezian. Instrumentul folosit ca suport în crearea acestor cuburi este

Oracle 9i OLAP, continuare a mai vechiului Express Server, şi care este detaliat în capitolul

2. În capitolul 2 se face o scurtă trecere în revistă a istoricului sistemelor OLAP şi a

conceptelor teoretice necesare ulterior în dezvoltarea sistemului OLAP.

Pagina 1 din 207

Page 2: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Domeniul tehnologiei informaţiei a adus recent în prim-plan un nou instrument de

dezvoltare a aplicaţiilor ce interacţionează cu baze de date, Oracle JDeveloper, care

aprofundează şi domeniul inteligenţei afacerii. Caracteristicile şi principalele facilităţi ale

acestuia sunt prezentate în capitolul 3.

Capitolul 4 reprezintă partea practică a lucrării, construirea sistemului OLAP,

utilizând instrumentele prezentate în capitolele anterioare. Programele pentru definirea

structurii bazei de date cât şi cele folosite la realizarea interfeţei sistemului sunt prezentate în

anexe, ataşate la sfârşitul lucrării alături de bibliografie.

Capitolul 1

PREZENTAREA INTREPRINDERII

1.1 ASPECTE GENERALE, ISTORIC

SC INDPRODCOM SRL este o societate cu răspundere limitată cu sediul în DEVA

str.Grigorescu nr. 12.

Societatea a fost înfiinţată în anul 1992 şi este înregistrată la Registrul Comerţului sub

numărul J20/1909/0408/992.

În cursul lunii martie 2004 societatea a renunţat la activitatea de comerţ en-gros

urmând să îşi desfăşoare numai activitatea de comerţ cu amănuntul prin magazinul de

desfacere din Deva şi comerţ cu amănuntul prin automate de cafea.

Se poate aprecia că SC INDPRODCOM SRL, în perioada de la înfiintare şi până în

prezent, a avut o evoluţie bună în sensul că cifra de afaceri şi profitul au avut un trend

ascendent cu o singură excepţie în anul fiscal 2001 când societatea a pierdut contractul de

distribuţie cu firma KRAFT JACOBS SUCHARD SA BRAŞOV.

Evoluţia indicatorilor cifra de afaceri şi profitul brut în perioada analizată este redată

în tabelul 1.1 şi figura 1.1, respectiv figura 1.2.

Tabelul 1.1: Evoluţia cifrei de afaceri, profit din exploatare şi profit brut

MII LEI

Pagina 2 din 207

Page 3: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

An / indicator 2000 2001 2002 2003

CIFRA AFACERI 38697992 34393911 36936547 46075881

PROFIT DIN EXPLOATARE 1.967.843 1.212.858 1.833.017 2.629.909

PROFIT BRUT 1.134.417 71.528 502.946 1.280.741

Figura 1.1: Graficul evoluţiei indicatorului profit brut

Pagina 3 din 207

Page 4: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 1.2: Graficul evoluţiei indicatorului cifra de afaceri

DOMENIU STRATEGIC

Încă din anul 1994 SC INDPRODCOM SRL Deva a avut o poziţie privilegiată pe

piaţa en-gros a judeţului Hunedoara ca urmare a contractului de unic distribuitor încheiat în

acel an cu SC KRAFT JACOBS SUCHARD SA BRAŞOV, contract care a durat până în anul

2001.

Ca urmare a acestui contract societatea analizată a trebuit să facă faţă cerinţelor

impuse privind:

- dezvoltarea parcului auto

- amenajarea spaţiilor de depozitare

- personal calificat

Este perioada în care societatea achiziţionează maşinile de transport, sediul firmei şi

spaţiile de depozitare.

În urma rezilierii contractului cu SC KRAFT JACOBS SUCHARD SA BRAŞOV

societatea a fost nevoită să încheie un nou contract de distribuitor unic de data aceasta cu

firma KANDIA SA TIMIŞOARA. Contractul s-a încheiat în data de 01.09.2001 şi s-a derulat

până în luna martie 2004.

Pagina 4 din 207

Page 5: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Datorită faptului că cerinţa pe piaţă a produselor fabricate de KANDIA SA

TIMIŞOARA a fost mai scăzută, cifra de afaceri pentru comerţul en-gros a scăzut astfel încât

în luna martie 2004 societatea a renunţat la acest tip de activitate.

În scopul diminuării consecinţelor legate de rezilierea contractului de unic distribuitor

cu SC KRAFT JACOBS SUCHARD SA BRAŞOV, societatea a achiziţionat în luna mai

2001 un magazin în Deva în care desfăşoară activitatea de comerţ cu amănuntul a produselor

alimentare şi nealimentare.

Poziţia acestui magazin situat într-un cartier periferic al municipiului Deva lipsit de

magazine alimentare mari, precum şi interesul salariaţilor şi a conducerii societăţii fac din

această activitate o afacere sigură cu o evoluţie ascendentă lină, dar nu spectaculoasă.

La începutul anului 2002 SC INPRODCOM SRL a încheiat un contract de unic

distribuitor cu societatea ELITE ROMANIA SA BUCUREŞTI pentru activitatea de

comercializare a băuturilor calde prin intermediul automatelor de băuturi calde (cafea, ceai,

ciocolată etc).

Conform acestui contract se asigură distribuţie unică pe raza judeţelor Hunedoara,

Arad, Bihor, Timiş, Caraş Severin şi începând cu aprilie 2004 şi Mehedinţi.

Ca urmare a condiţiilor stabilite prin acest contract, a managementului adecvat şi a

cerinţelor crescânde pe piaţă a acestor produse, la ora actuală este activitatea de bază a

societăţii, având un aport de peste 95% la cifra de afaceri cu toate că pe piaţă există

concurenţa unor firme de renume precum SC HESS CAFÉ SA BUCUREŞTI, respectiv SC

DALMAYS SA BRAŞOV precum şi existenţa unei pieţe de comercializare second-hand a

acestor automate.

DOMENIU COMERCIAL

1.3.1. Analiza vânzărilor

Ţinând cont de faptul că societatea desfăşoară mai multe tipuri de activităţi, iar pentru

comercializarea băuturilor calde desfăşoară activităţi pe raza mai multor judeţe, evoluţia în

timp a diferiţilor indicatori s-a făcut în baza acestei structuri.

Evoluţia cifrei de afaceri pe activităţi este prezentată în tabelul 1.2 şi figura 1.3

Pagina 5 din 207

Page 6: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Tabelul 1.2 : Evoluţia cifrei de afaceri pe activităţi

Nr.

crt.

An / activitate 2000 2001 2002 2003

1 Comerţ en- gros 88697992 32316661 26026071 21608710

2 Comerţ cu amănuntul - 2077250 5711200 6575826

3 Băuturi calde - - 5199276 17891345

Figura 1.3: Evoluţia cifrei de afaceri pe activităţi

Analiza marjei comerciale pe activităţile de bază rezultă pe baza datelor prezentate în

tabelul 1.3, respectiv figura 1.4

Marja comercială se defineşte ca diferenţa dintre veniturile realizate din vânzarea

mărfurilor şi costul acestora.

Tabelul 1.3 : Marja comercială pe activităţi

MII LEI

Nr.

crt.

An / activitate 2000 2001 2002 2003

1 Comerţ en – gros 4456307 3993072 2695609 170051

2 Comerţ cu amanuntul - 296023 833286 951337

3 Băuturi calde - - 2573862 8283729

Total 4456307 4289095 6102757 9405117

Pagina 6 din 207

Page 7: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 1.4 : Marja comercială pe activităţi

Analiza duratei de încasare a creanţelor

În baza analizei indicatorilor cifrei de afaceri pe activităţi şi a marjei comerciale pe

activităţi şi ţinând seama de termenele de încasare pe activităţi (en-gros 20-35 zile iar la

automatele de cafea zilnic), conducerea societăţii a renunţat la activitatea de en-gros începând

cu luna martie 2004.

Influenţa acestei decizii este reliefată de evoluţia indicatorului durata de încasare

creanţe clienţi DIC prezentată în tabelul 1.4, respectiv figura 1.5 şi calculat cu relaţia:

Creanţe ( clienţi )

DIC = ------------------------- X 360 zile

Cifra de afaceri

Tabelul 1.4 : Evoluţia duratei de încasare a creanţelor

MII LEI

Nr.

crt.

An /

indicator

2000 2001 2002 2003 2004

1 Clienţi 3455942 1639959 1880353 2426980 461283

Pagina 7 din 207

Page 8: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

2 Cifra de

afaceri

38697992 34393911 36936547 46075881 15415666

3 DIC(zile) 32 17 18 18 11

Figura 1.5 : Evoluţia duratei de încasare a creanţelor

Analiza cifrei de afaceri pe judeţe pentru activitatea băuturi calde rezultă din tabelul

1.5, respectiv figura 1.6.

Tabelul 1.5 : Cifra de afaceri pe judeţe

MII LEI

Nr.

crt.

An / judeţe 2000 2001 2002 2003

1 Hunedoara - - 1793300 4605688

2 Timiş - - 1945513 5915999

3 Bihor - - 782741 3712942

4 Arad - - 677722 3656716

Total - - 5199276 17891345

Aceste cifre demonstrează că în 2003 activitatea a fost mai intensă în judeţul Timiş,

urmat de judeţul Hunedoara.

Pagina 8 din 207

Page 9: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 1.6 : Cifra de afaceri pe judeţe

Analiza pieţei de aprovizionare

În ceea ce priveşte piaţa de aprovizionare, încă din anul 1994 aceasta a fost dominată

rând pe rând de 3 firme mari: KRAFT JACOBS SUCHARD BRAŞOV, KANDIA

TIMIŞOARA şi actualmente ELITE ROMÂNIA SRL.

Dacă în cazul KRAFT JACOBS SUCHARD BRAŞOV contractul a fost reziliat din

iniţiativa acestuia cu consecinţe grave asupra activităţii societăţii, în cazul KANDIA

TIMIŞOARA contractul a fost reziliat din iniţiativa SC INDPRODCOM SRL.

Actualmente aprovizionarea cu marfă se face în proporţie de 99% de către firma

ELITE ROMÂNIA SRL care este şi furnizorul de echipamente (aparate de băuturi calde) şi

apreciem că pe termen lung nu există pericolul rezilierii acestui contract.

Pentru a vedea modul în care societatea şi-a achitat obligaţiile către furnizorii curenţi

urmărim evoluţia indicatorului durata de achitare a obligaţiilor curente (furnizori) DAO

( tabelul 1.6, respectiv figura 1.7) calculat cu relaţia:

Furnizori (marfă + utilităţi)

DAO = ----------------------------------

Pagina 9 din 207

Page 10: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Cifra de afaceri

Tabelul 1.6 : Durata de achitare a obligaţiilor curente

MII LEI

Nr.

crt.

An / indicator 2000 2001 2002 2003 2004

1 Furnizori 3958474 3884568 4595871 4799089 2485124

2 Cifra de

afaceri

38697992 34393911 36936547 46075881 1541568

6

3 DAO(zile) 37 41 45 37 58

Figura 1.7 : Durata de achitare a obligaţiilor curente

Analizând indicatorii durata de încasare a creanţelor şi durata de achitare a datoriilor

curente observăm că evoluţia acestora este favorabilă societăţii în sensul că se încasează

clienţii mult mai repede decât se plătesc furnizorii.

Acest lucru a făcut posibil ca în cursul anului 2004 să se diminueze linia de credit de

la 6.000.000 mii lei până la 4.000.000 mii lei, linie de credit care în cursul lunii aprilie 2004 a

ajuns să fie folosită numai în proporţie de 25%.

Pagina 10 din 207

Page 11: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

1.4 DOMENIU TEHNIC

La data analizei societatea are în proprietate 3 imobile cu terenul aferent (sediul

administrativ, magazin de desfacere cu amănuntul şi spaţiul de depozitare) precum şi un

număr de 381 echipamente tehnologice (automate de băuturi calde). În funcţie de

caracteristicile tehnice (capacitate de producţie) ele se grupează în :

aparate de tip SAECO

aparate de tip RHEAXS

aparate de tip COLIBRI

aparate de tip RHEAXM

aparate de tip BRIO 200

aparate de tip BRIO 250

aparate de tip FUTUREMA

- aparate de tip KIKO

aparate de tip SPAZIO.

Durata de funcţionare a acestor echipamente conform legislaţiei este de 7 ani.

Societatea aplică metoda de amortizare liniară. Începând cu achiziţionările din 2004

societatea a hotărât să aplice metoda de amortizare accelerată.

Pentru a face faţă ariei geografice extinse în care îşi desfăşoară activitatea societatea

deţine un număr de 19 mijloace de transport completat cu încă 6 autoturisme achiziţionate în

leasing operaţional .

1.5 DOMENIUL RESURSELOR UMANE ŞI AL MANAGEMENTULUI

În perioada analizată şi în cursul anului 2004 societatea îşi desfăşoară activitatea

numai cu personal angajat (salariaţi).

Facem menţiunea că asociatul unic are calitatea de angajat îndeplinind funcţia de

director general.

Evoluţia în timp pe perioada analizată a resurselor umane impune calcularea unor

indicatori care se referă la comportament precum şi indicatori de eficienţă a resurselor umane.

Pagina 11 din 207

Page 12: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Indicatori de comportament

-număr mediu scriptic – evoluţia este prezentată în tabelul 1.7, respectiv figura 1.8.

Tabelul 1.7 : Evoluţia numărului mediu scriptic

An / Element 2000 2001 2002 2003

Număr mediu scriptic

salariaţi

28 27 30 37

Figura 1.8: Evoluţia numărului mediu scriptic

gradul de utilizare a timpului Gut – rezultatele sunt prezentate în tabelul 1.8, respectiv

figura 1.9.

Timp efectiv lucrat

Gut = ------------------------------------- X 100

Timp maxim disponibil

Tabelul 1.8: Gradul de utilizare a timpului

ORE

An / Element 2000 2001 2002 2003

Timp efectiv lucrat 50368 48854 53402 67718

Timp max disponibil 56896 54864 60960 75184

Gut 89% 89% 87% 90%

Pagina 12 din 207

Page 13: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 1.9 : Gradul de utilizare a timpului

Timp max. disponibil = 254 zile după ce se scad sâmbetele, duminicile şi sărbătorile

legale

Indicatori de eficienţă a muncii

productivitatea muncii W calculată funcţie de cifra de afaceri este analizată în tabelul

1.9, respectiv figura 1.10.

Cifra de afaceri

W = -------------------------------------

Număr mediu personal

Tabelul 1.9: Evoluţia productivităţii muncii

An / Element 2000 2001 2002 2003

Cifra de afaceri 38697992 34393911 36936547 46075881

Număr mediu

personal

28 27 30 37

W mii lei / pers 1382071 1273849 1231218 1245294

Pagina 13 din 207

Page 14: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 1.10: Evoluţia productivităţii muncii

La data evaluării societatea are un număr de 32 de salariaţi cu contract permanent de

muncă repartizaţi pe puncte de lucru astfel (tabelul 1.10):

Tabelul 1.10 : Repartizarea salariaţilor pe puncte de lucru

Nr. crt. Punct de lucru Număr %

1 Sediu 4 13

2 Magazin cu amănuntul 7 22

3 Timişoara 6 19

4 Arad 4 12

5 Oradea 5 15

6 Deva aparate 6 19

7 Total 32 100

Structura personalului la 30.04.2004 pe categorii de personal (tabelul 1.11) este:

Tabelul 1.11 : Structura personalului pe categorii de personal

Nr. crt. Categorie de personal Număr %

1 Conducere 3 9

Pagina 14 din 207

Page 15: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

2 Personal de specialitate 2 6

3 Personal tehnic productiv 27 85

Total 32 100

Se observă ponderea mare a personalului direct productiv.

Structura personalului după gradul de pregătire profesională (tabelul 1.12).

Tabelul 1.12 : Structura personalului după gradul de pregătire profesională

Nr. crt. Categorie de personal Număr %

1 Studii superioare 8 33

2 Din care conducere 3

3 Studii medii 24 66

Total 32 100

DOMENIUL FINANCIAR – CONTABIL

Din capitolele anterioare au rezultat o serie de amănunte legate de SC

INDPRODCOM prin care s-au confirmat performanţele sale financiare.

Pentru a evidenţia influenţa activităţii comercializării băuturilor calde, din

multitudinea indicatorilor economico-financiari, prezentăm următoarele :

1.Rentabilitatea financiară RF măsoară excedentul de resurse financiare creat de

functionarea intreprinderii (tabelul 1.13, respectiv figura 1.11)

Profit brut

RF = ----------------------- X 100

Total venituri

Tabelul 1.13 : Evoluţia rentabilităţii financiare

Pagina 15 din 207

Page 16: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

MII LEI

Indicator 2000 2001 2002 2003

Profitul brut 1134417 71528 592946 1280741

Total venit 38727327 34439200 37318522 46338970

Rentabilitatea

financiară %

2,39 0,20 1,59 2,77

Figura 1.11 : Evoluţia rentabilităţii financiare

Datorită evoluţiei sale crescătoare, acest indicator exprimă starea de sănătate a afacerii

societăţii în cauză.

2. Rentabilitatea activităţii RA măsoară capacitatea intreprinderii de a-şi crea resurse

proprii de finanţare din activitate (tabelul 1.14, respectiv figura 1.12).

Capacitatea de autofinanţare

RA = -------------------------------------------------- X 100

Cifra de afaceri

CAF este surplusul financiar ce rămâne intreprinderii după plata partenerilor

(furnizori, salarii, impozite, dobânzi, dividende)

Pagina 16 din 207

Page 17: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CAF = Profit net +Cheltuieli amortizare + Cheltuieli cu active cedate – Venit din

cedare

Tabelul 1.14 : Rentabilitatea activităţii

MII LEI

Indicator 2000 2001 2002 2003

CAF 928286 190837 549108 3951727

CA 38699253 34402228 36936547 46075881

RA % 2,4 0,6 1,5 8,6

Figura 1.12 : Rentabilitatea activităţii

Privită în ansamblu, evoluţia crescătoare a acestui indicator reprezintă un punct

favorabil, valoarea lui însă rămâne sub valoarea acceptată de 10%.

Trendul mediu este oscilant cu tendintă de creştere.

Pagina 17 din 207

Page 18: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Pagina 18 din 207

Page 19: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Capitolul 2

FACILITĂŢI OLAP OFERITE DE ORACLE 9i

2.1. SCURT ISTORIC

Sistemele OLAP încă de la apariţia lor, au încercat să ofere un suport analitic adecvat

tuturor persoanelor cu putere de decizie de la orice nivel al companiei.

Cererile analitice sunt cereri complexe (de exemplu: „Cum se situează nivelul

vânzărilor pe luna curentă din judeţul Timiş faţă de planul prestabilit? Dar faţă de vânzările

din anul precedent?”), ce implică a alege date agregate, curente sau istorice.

Nivelul de procesare a datelor necesar pentru a răspunde unei cereri analitice este

fundamental diferit faţă de nivelul de procesare necesar răspunderii unei cereri tranzacţionale.

Următorul tabel evidenţiază principalele diferenţe (tabelul 2.1).

Tabelul 2.1: Principalele diferenţe între cererile tranzacţtionale şi cele analitice

Caracteristica Cereri tranzacţionale Cereri analitice

Operaţie tipică actualizare analiză

Vechimea datelor curente istorice

Nivel de analiză a datelor detaliu agregat

Volum date necesare minim extensiv

Tip interogare interogări individuale interogări iterative

Încă din anii ’70-’80, s-au dezvoltat sisteme informatice ce au permis analiza

multidimensională, înainte de a fi cunoscute sub numele de sisteme OLAP. Principalele

eforturi în dezvoltarea tehnologiei OLAP pot fi prezentate cronologic după cum urmează:

În 1962 Ken Iverson, în cartea sa „A programming language”, descrie primul limbaj

multidimensional, limbajul APL. Acest limbaj a fost implementat de IBM pe mainframe-uri,

la sfârşitul anilor 1960. Multe din conceptele acestui limbaj sunt folosite şi astăzi (de

exemplu, Adaytum Planning şi Lex 2000 folosesc limbajul APL).

La sfârşitul anilor 1960, John Little, doctor în fizică, Len Lodish, tânăr specialist în

marketing la Massachussetts Institute of Technology Sloan School şi Glen Urban, decanul de

Pagina 19 din 207

Page 20: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

la Sloan School, au încercat să utilizeze calculatoarele în aplicaţii matematice şi analitice. Au

încercat utilizarea analiticului în marketing, în special în marketing-ul bunurilor de consum.

Aceasta era o arie ideală de investigaţie, deoarece exista un volum mare de date brute

neprelucrate şi procesul decizional putea fi îmbunătăţit prin înţelegerea mai bună a datelor.

Efortul lor a condus la apariţia sistemelor de gestiune a deciziilor (Management Decision

Systems), în 1974. MDS-urile erau utilizate în special pentru crearea de modele matematice

pentru analize de marketing. A fost o muncă complexă de programare în Fortran, care a avut

ca rezultat o bibliotecă de funcţii analitice şi facilităţi de stocare a matricilor pe disc. John

Wirts a considerat că biblioteca de subrutine ar putea fi generalizată şi că facilităţile analitice

ar putea fi îmbunătăţite mult, pentru utilizatorul final, prin adăugarea facilităţilor de gestiune

a datelor. Acesta a fost un important pas în dezvoltarea primelor sisteme OLAP.

În 1972 funcţiile analitice şi facilităţile de gestiune a datelor au fost integrate într-un

limbaj, limbajul Express. După 30 de ani Express rămâne una din principalele tehnologii

OLAP folosite, conceptul şi modelele de date fiind neschimbate.

La începutul anilor 1970, firma Comshare a ales analiza financiară ca o activitate

centrală. Firma a achiziţionat un limbaj de modelare financiară numit FCS de la o firmă de

software britanică (EPS Consultants). Specialiştii firmei au căutat să facă din limbajul FCS,

un limbaj care să satisfacă cerinţele utilizatorilor pentru analiza multidimensională.

În 1978-1979, Comshare a considerat necesară trecerea la o nouă generaţie de limbaj

de modelare financiară, realizată prin combinarea funcţiilor analitice de modelare cu

tehnologia gestiunii datelor, în scopul de a gestiona volume mult mai mari de date asociate cu

conceptul de multidimensionalitate. Instrumentul rezultat a fost System W DSS, primul

instrument OLAP pentru aplicaţii financiare, care folosea conceptul de hypercub. Principala

sa utilizare era ca suport decizional financiar, utilizat în activitatea bugetară, de previziune şi

de planificare strategică. A introdus multe concepte cum ar fi: reguli complet neprocedurale,

vizualizare multidimensională a datelor, integrare cu datele relaţionale etc. Aşa cum Express

a devenit un instrument important în aplicaţiile de analiză de piaţă, System W a devenit o

forţă în planificare, analiză şi aplicaţii de raportare financiară, în anii 1980. Hyperion

Essbase, deşi nu este un descendent direct al lui System W, foloseşte multe din conceptele

utilizate de acesta.

În 1984 a apărut primul instrument ROLAP, Methafor, folosit în analiza de

marketing. A introdus noi concepte, care au devenit populare în anii 90, cum ar fi: calcule

distribuite client/server, procesare multidimensională a datelor relaţionale.

Pagina 20 din 207

Page 21: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

La mijlocul anilor ’80 a apărut termenul de EIS (Executive Information System). În

1985 apare Pilot Command Center, primul instrument OLAP stil EIS, cu arhitectură

client/server. Unele din aceste concepte au fost implementate în Pilot’s Analysis Server.

În 1990 Cognos Power Play devine primul instrument OLAP cu arhitectură desktop,

pentru Windows. Firma Cognos oferă şi versiuni pentru arhitectură client/server şi Web.

În 1991 Methafor este achiziţionat de consorţiul Apple-IBM Taligent.

Firma Arbor Software s-a constituit în 1991, cu scopul unic de a crea un server de

bază de date multidimensională şi multiutilizator, care s-a numit Essbase. Essbase a fost

introdus pe piaţă în 1992 şi s-a lansat şi sub sistemul de operare OS/2 şi Windows NT.

În 1993 Codd introduce termenul de OLAP şi cele 12 reguli referitoare la sistemele

OLAP. După ce a văzut Essbase, ca un exemplu de bază de date multidimensională, a ajuns

la concluzia că limbajul SQL nu a fost niciodată adecvat pentru analiza multidimensională. El

a afirmat că există o diferenţă semnificativă între tehnologia sistemelor multidimensionale şi

tehnologia sistemelor tranzacţionale.

În 1994 apare primul instrument ROLAP, Microstrategy DSS Agent, fără motor

multidimensional. Toată procesarea era executată cu limbajul SQL (multipass SQL), o

tehnică utilizată foarte des pentru baze de date foarte mari.

În 1995 apare primul OLAP hibrid, HOLOS 4.0 ce permite accesul atât la baze de

date relaţionale cât şi la multidimensionale. Multe din instrumentele OLAP folosesc această

arhitectură.

În 1995 Oracle achiziţionează Express. Ianuarie 1995 a marcat şi formarea consiliului

OLAP care a jucat un rol cheie în stabilirea sistemelor OLAP ca o categorie de software mai

bine înţeleasă şi cunoscută. Consiliul OLAP definea conceptul de OLAP ca „ o categorie de

instrumente software, care permit analiştilor, managerilor şi directorilor să înţeleagă esenţa

datelor printr-un acces rapid, consistent şi interactiv la o mare varietate de viziuni posibile ale

informaţiilor, care au fost obţinute prin transformarea datelor primare astfel încât să reflecte

dimensiunile reale ale intreprinderii aşa cum o percepe şi o întelege utilizatorul”.

În 1997 apare Microsoft OLEDB for OLAP, un standard OLAP API dezvoltat de

Microsoft, ca un set de obiecte COM şi interfeţe destinate de a oferi acces la sursele de date

multidimensionale prin OLEDB. OLEDB for OLAP dezvoltă un model pentru cuburi şi

dimensiuni, oferă un limbaj MDX (multidimensional expressions) pentru calcul şi vizualizare

a cuburilor.

Pagina 21 din 207

Page 22: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

În 1997 apare standardul MDIS (Metadata Interchange Specification) propus de un

grup de firme (IBM, Sybase, Informix) care oferă un mecanism standard de acces şi o

interfaţă standard pentru a gestiona metadatele.

În 1998 apare IBM DB2 OLAP Server, o versiune a lui Essbase, care utilizează date

stocate în baze de date relaţionale (schema stea).

În 1999 apare Microsoft OLAP Services ce utilizează o tehnologie achiziţionată de la

Panorama Software Systems şi cu o arhitectură de stocare complexă

(ROLAP/MOLAP/HOLAP).

În 2000, Microsoft redenumeşte Microsoft OLAP Services ca Microsoft Analysis

Services.

În 2002 Oracle lansează Oracle 9i Release 2 OLAP care integrează toate facilităţile

OLAP în baza de date relaţională Oracle.

2.2. CONCEPTE DE BAZĂ

Am considerat necesar a prezenta o serie de concepte utilizate şi anume: hypercubul

(cub n-dimensional), multicubul, dimensiunile, ierarhiile, măsurile şi fenomenul de

împrăştiere. Consiliul OLAP a propus un glosar de termeni ce se doreşte standardizat, de

aceea în prezentarea acestor concepte de bază am utilizat şi definiţiile date de Consiliul

OLAP.

CONCEPTUL DE CUB N-DIMENSIONAL

Conceptul de hypercub sau cub cu mai mult de trei dimensiuni (cub n-dimensional)

sau structură multidimensională este fundamental pentru înţelegerea sistemelor OLAP şi a

modelului multidimensional. Instrumentele OLAP folosesc conceptul de hypercub în acelaşi

mod în care foile de calcul tabelar folosesc conceptul de foaie de lucru (worksheet) şi bazele

de date relaţionale conceptul de tabelă. Toate vizualizările, rapoartele şi analizele sunt făcute

în termeni de hypercuburi (cuburi n-dimensionale).

Pagina 22 din 207

Page 23: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Consiliul OLAP defineşte hypercubul ca “un grup de celule de date aranjate după

dimensiunile datelor. De exemplu o foaie de calcul tabelar exemplifică o matrice

bidimensională cu celulele de date aranjate în rânduri şi coloane, fiecare fiind o dimensiune.

O matrice tridimensională poate fi vizualizată ca un cub cu fiecare dimensiune formând o faţă

a cubului. Dimensiunile tipice ale datelor dintr-o intreprindere sunt timpul, măsurile,

produsele, regiunile geografice, canalele de distribuţie etc.”

CONCEPTUL DE DIMENSIUNE

Conceptul de dimensiune este definit de Consiliul OLAP ca “un atribut structural al

unui cub ce constă dintr-o listă de membrii, pe care utilizatorii îi percep ca fiind de acelaşi

tip. De exemplu, toate lunile, trimestrele, anii formează dimensiunea Timp... O dimensiune

acţionează ca un index pentru identificarea valorilor dintr-o matrice multidimensională...

Dimensiunile oferă un mod foarte concis, intuitiv de organizare şi selectare a datelor pentru

explorare şi analiză”.

Dimensiunile sunt atribute de identificare a evenimentelor măsurabile sau a lucrurilor

pe care le analizăm. Spre deosebire de dimensiunile fizice care sunt bazate pe unghiuri şi sunt

limitate la trei, dimensiunile logice nu au astfel de limite. Frecvent numărul de dimensiuni

într-un set de date depăşeşte cele trei dimensiuni fizice (rând, coloană, pagină) ale ecranului

de afişare. Abilitatea instrumentului OLAP de a modela multiple dimensiuni de informaţii îl

face mult mai potrivit pentru a lucra cu seturi complexe de date, decât bazele de date

relaţionale şi foile de calcul tabelar. Dimensiunile au următoarele caracteristici:

furnizează informaţii descriptive despre fiecare indicator (variabilă);

conţin în general date statistice şi sunt esenţiale pentru analiză. Un model

multidimensional ce oferă un număr mare de atribute dimensionale permite analize cât mai

complexe şi mai variate;

într-un cub n-dimensional o dimensiune este reprezentată printr-o axă;

într-o schemă stea sunt tabelele care se dispun radial în jurul tabelei de fapte şi se mai

numesc tabele de dimensiuni.

De exemplu, într-o bază de date pentru analiza vânzărilor se identifică următoarele

dimensiuni: Timp, Regiune/Locaţie, Client, Agent de vânzare, Produs.

Pagina 23 din 207

Page 24: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

O dimensiune conţine mai mulţi membri. Un membru este “un nume distinct sau un

identificator folosit pentru a determina poziţia unui element de dată (în schema stea apare sub

denumirea de atribut dimensional)”. De exemplu, toate lunile, trimestrele şi anii formează

dimensiunea Timp şi toate oraşele, regiunile şi ţările dimensiunea Locaţie. Un membru poate

aparţine la una sau mai multe ierarhii sau poate să nu fie inclus într-o ierarhie (independent).

De exemplu, în dimensiunea Produs membrul “culoare” nu este inclus în nici o ierarhie.

CONCEPTUL DE IERARHIE

O ierarhie este un atribut al unei dimensiuni. Cele mai multe dimensiuni au o structură

multi-nivel sau ierarhică. Timpul este o dimensiune ierarhică multi-nivel (ore, zile,

săptămâni, luni, trimestre şi ani), Locaţia geografică este o dimensiune ierarhică (vecini,

oraşe, state şi ţări). În cele mai multe activităţi ale unei firme, ierarhiile sunt o necesitate. Ar

fi imposibil de a funcţiona o firmă, dacă toate datele sale ar fi limitate la nivel tranzacţional.

De exemplu, este necesar de a păstra informaţii despre volumul vânzărilor lunare, pe

trimestru, pe an, pentru a vedea care produse se vând mai bine şi care mai prost. Criteriile

după care datele sunt agregate pentru analiză şi raportare trebuie să fie aceleaşi cu factorii

folosiţi în procesul decizional.

Pentru a identifica poziţia unui membru într-o dimensiune se folosesc conceptele de

înălţime şi adâncime în ierarhie. Înălţimea se stabileşte de jos în sus. Din acest motiv nivelul

(L0) al ierarhiei reprezintă nodurile frunză ale ierarhiei (înălţimea cea mai mică). Adâncimea

în ierarhie este stabilită de sus în jos. Există posibilitatea ca doi membri, care au aceeaşi

înălţime, să aibă adâncimi diferite şi invers (structuri arborescente neechilibrate). Structurile

arborescente neechilibrate sunt implementate cu succes în bazele de date multidimensionale,

bazele de date relaţionale fiind necorespunzătoare.

Ierarhiile dimensionale pot fi simetrice sau asimetrice. În dimensiunea Timp există o

ierarhie simetrică. Cu ierarhiile simetrice se pot referi membrii prin nivelul lor ierarhic.

În glosarul de termeni OLAP se specifică că “membrii dimensiunilor pot fi organizaţi

pe baza relaţiilor de tip părinte-copil, unde un membru părinte reprezintă consolidarea

(agregarea) membrilor copil. Rezultatul este o ierarhie şi relaţiile părinte/copil sunt relaţii

ierarhice”.

Pagina 24 din 207

Page 25: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Într-o dimensiune pot exista mai multe ierarhii. Alegerea nivelurilor intermediare de

grupare sau agregare este importantă pentru înţelegerea şi abilitatea de a lua decizii, deoarece

datele au numai un nivel de detaliu, un nivel de agregare complet, dar multe niveluri

intermediare. Fiecare direcţie de agregare scoate în evidenţă unii factori şi-i ascunde pe alţii.

Numărul de niveluri intermediare, cum ar fi grupuri de produse după preţ, grupuri de produse

după profit, după tipul produsului şi producător, permite să experimentăm diferite moduri de

a privi şi înţelege datele. Aceasta este una din ariile de convergenţă între structurile

multidimensionale şi analiza statistică.

Ierarhiile sunt fundamentul pentru agregarea datelor şi pentru navigarea între

nivelurile de detaliu dintr-un cub n-dimensional. Deşi nu toate dimensiunile conţin ierarhii,

toate aplicaţiile din lumea reală implică dimensiuni ierarhice. Numărul de ierarhii distincte

într-o structură multidimensională este egal cu produsul dintre numărul de ierarhii din fiecare

dimensiune.

Unele instrumente OLAP permit numai o singură ierarhie pe dimensiune. În acest caz,

fiecare ierarhie este tratată ca o dimensiune separată.

Combinaţia de multiple dimensiuni şi multiple niveluri pe dimensiune constituie

esenţa unui cub n-dimensional sau hypercub.

O celulă într-un cub n-dimensional este definită de intersecţia unui membru din

fiecare dimensiune. Unele celule conţin date de intrare cum ar fi vânzările zilnice, altele

conţin date derivate. Valorile datelor derivate sunt definite cu ajutorul formulelor. Cu cât sunt

mai multe dimensiuni şi ierarhii în cub, cu atât este mai complexă vecinătatea din jurul unei

celule şi există mai multe direcţii după care se pot vizualiza datele. Într-un cub n-dimensional

(cu un nivel ierarhic pe dimensiune), fiecare celulă are 2n vecini imediaţi sau direcţii de

vizualizare. De exemplu, o celulă într-o foaie de calcul tabelar are patru vecini (patru celule

adiacente), iar o celulă într-un cub tridimensional are şase. Când se adaugă ierarhii, numărul

de direcţii de vizualizare creşte.

Ce tip de date pot fi stocate într-un cub n-dimensional? Deşi majoritatea datelor

stocate în cuburile n-dimensionale sunt numerice, orice tip de date de la text la grafice şi

chiar sunete pot fi multidimensionale. Multe instrumente OLAP oferă abilitatea de a popula

cuburile n-dimensionale cu date text. Datele numerice sunt mai potrivite pentru aplicaţiile

OLAP, deoarece au o organizare multidimensională şi se pot agrega. Alte tipuri de date pot

beneficia de organizarea multidimensională, dar apar probleme datorate agregării lor. Totuşi

cele mai multe date sursă, la nivel de intreprindere, sunt de tip caracter. Din acest motiv,

datele de tip şir de caractere vor deveni mult mai importante pentru instrumentele OLAP.

Pagina 25 din 207

Page 26: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Date cum ar fi: culoarea, adresa, tipul de ambalaj, tipul de client sunt factori esenţiali pentru

analiză.

CONCEPTUL DE MĂSURĂ

O măsură (variabilă) este un indicator de performanţă prin care se poate analiza

performanţa activităţii modelate (de regulă un atribut numeric al unui element din colecţia de

fapte). Valorile unui indicator se modifică continuu. Pentru fiecare combinaţie posibilă între

dimensiuni, există sau nu o valoare corespunzatoare a indicatorilor. Nu orice atribut numeric

este un indicator. De exemplu, “dimensiunea ambalajului” este un atribut numeric şi totusi nu

este un indicator ci un atribut dimensional. Dacă valoarea atributului numeric variază

continuu (de exemplu: costul de livrare, cantitatea vândută, volumul vânzărilor) atunci

atributul este un indicator, iar dacă atributul este perceput mai mult ca o constantă (de

exemplu: dimensiunea ambalajului, descriere produs, culoare) atunci este un atribut

dimensional. Indicatorii pot fi clasificaţi în:

- indicatori de bază (de exemplu: volumul vânzărilor, cantitatea vândută, costurile,

numărul de clienţi);

- indicatori derivaţi care se obţin prin combinarea indicatorilor de bază (de exemplu

profitul).

O altă clasificare este dată de Ralph Kimball în cartea sa “The Data Warehouse

Toolkit” şi anume după posibilitatea indicatorilor de a se însuma după dimensiuni:

- indicatori aditivi care se pot însuma după toate dimensiunile. De exemplu,

indicatorul “volumul vânzărilor” se poate calcula pentru o categorie de produse sau pentru o

anumită regiune sau pentru o anumită perioadă de timp. Volumul vânzărilor, cantitatea

vândută şi costurile sunt aditive. Aceasta înseamnă că are sens de a aduna lei sau cantităţi de-

a lungul oricărei combinaţii timp, produs, magazin.

- indicatori semiaditivi care se pot însuma numai după unele dimensiuni. De exemplu,

indicatorul “numărul de clienţi” este semiaditiv , deoarece se poate calcula numărul de clienţi

într-o anumită perioadă de timp sau pentru o anumită regiune, dar nu este aditiv de-a lungul

dimensiunii Produs. Dacă pentru fiecare produs (dintr-o categorie de produse) se cunoaşte

numărul de clienţi şi dorim să aflăm numărul de clienţi pentru categoria de produse, nu se pot

Pagina 26 din 207

Page 27: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

aduna aceste numere. Rezultatul poate fi eronat, deoarece pot exista clienţi, care au cumpărat

mai multe tipuri de produse, din categoria respectivă.

- indicatori neaditivi care nu se pot însuma după nici o dimensiune (de exemplu

profitul marginal). Variabilele neaditive pot fi combinate cu alte variabile pentru a deveni

aditive.

CONCEPTUL DE MULTICUB

Un cub n-dimensional este de fapt un set de variabile ce utilizează aceleaşi dimensiuni

de identificare. Întrebarea care apare este dacă se poate adăuga un număr nelimitat de

dimensiuni la un cub n-dimensional şi dacă pentru modelarea unei activităţi complexe este

suficient un singur cub n-dimensional.

Figura 2.3: Model multicub

Cel mai simplu mod de reprezentare a datelor unei aplicaţii multidimensionale este cel

al unui spaţiu cartezian definit de toate dimensiunile aplicaţiei (spaţiul datelor). Totuşi datele

multidimensionale sunt împrăştiate şi celulele de date nu sunt distribuite în mod egal în

Pagina 27 din 207

Page 28: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

spaţiul multidimensional. Proiectanţii de instrumente OLAP au adoptat o varietate de strategii

pentru a trata fenomenul de împrăştiere dar şi gruparea datelor. Instrumente ca Essbase,

Power Play utilizează structura hypercub, o structură logică de cub simplu, dar cu un model

sofisticat de compresie a datelor. Cealaltă structură, multicubul, este mai des întâlnită. În

aplicaţiile multicub, proiectanţii descompun baza de date într-un set de structuri

multidimensionale, fiecare fiind compusă dintr-un subset de dimensiuni ale bazei de date.

CONCEPTUL DE ÎMPRĂŞTIERE

Conceptul de împrăştiere este frecvent asociat cu datele multidimensionale. Termenul

de împrăştiere a fost utilizat cu semnificaţia de valoare lipsă, valoare inaplicabilă şi valoare

zero. Primele două cazuri sunt considerate date invalide (concept de null). Codd în cele 18

reguli pentru OLAP, sugerează ca modelele OLAP respectă regula privind valorile null, a

modelului relaţional. Existenţa unui număr mare de valori zero nu este totuşi un exemplu real

de împrăştiere. Valoarea zero este validă ca orice alt număr. Confuzia a apărut, deoarece în

aplicaţiile OLAP apare un număr mare de valori zero, precum şi volume mari de date lipsă şi

invalide. Tehnicile pentru optimizarea fizică a stocării unui număr mare de valori repetate

sunt similare şi uneori aceleaşi cu tehnicile pentru optimizarea fizică a stocării de volume

mari de date lipsă şi invalide. Totuşi valorile lipsă şi cele invalide nu sunt date valide. Ele nu

pot fi tratate în acelaşi mod ca orice altă valoare. De aceea, sunt necesare tehnici speciale

pentru aceste cazuri. Tratamentul impropriu al valorilor null poate cauza calcule incorecte.

Acurateţea calculelor este de o importanţă crucială pentru analiza oricărui set de date,

indiferent că este sau nu multidimensional. Problema tratării datelor împrăştiate este una

foarte importantă şi este frecvent dezbătută în lumea bazelor de date.

Logicienii au crezut că există numai două valori logice: adevărat şi fals. Regulile

logice, care se aplică la bazele de date, sunt exprimate în funcţie de aceste două valori.

Problema apare totuşi când se introduc date invalide. Dar conform logicii, o propoziţie şi

inversa sa nu pot avea ambele valoarea adevărat. Nu ştim dacă este adevărat sau fals,

deoarece datele sunt lipsă. Conceptul de “invalid” este similar cu conceptul de “lipsă” în

sensul că nu se poate prelucra ca o valoare validă, dar este diferit în sensul că ar putea fi

greşit introdusă o valoare în acel câmp. Datele lipsă şi cele invalide se introduc regulat în

toate tipurile de baze de date, inclusiv cele multidimensionale. Codd a schimbat semnificaţia

Pagina 28 din 207

Page 29: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

termenului de negaţie. Pentru propoziţii adevărate şi false, negaţia unui termen produce un

termen diferit cu o valoare adevărată diferită. Negaţia lui adevărat este fals şi negaţia lui fals

este adevărat. Pentru propoziţii cu valori lipsă sau invalide, negaţia unui termen este el însuşi.

Deci negaţia unei valori lipsă este “lipsă” şi negaţia unei valori invalide este “invalid”.

Îmbunătăţirea proiectarii bazei de date ar putea elimina datele invalide. Cele două

tipuri de date (lipsă şi invalide) trebuie totuşi să fie tratate individual, deoarece ele afectează

calculele în diferite moduri.

2.3. REGULILE LUI CODD

Caracteristici de bază:

1. o viziune conceptuală multidimensională

Codd considera că viziunea utilizatorului asupra intreprinderii este multidimensională

şi de aceea viziunea conceptuală a modelelor OLAP trebuie să fie, de asemenea,

multidimensională.

2. manipularea intuitivă a datelor

Codd recomanda ca manipularea datelor (operaţiile de drill down, drill up, drill

across) să fie făcute direct în celulele unui model, fără a solicita utilizarea meniurilor.

Dimensiunile definite în modelul analitic ar trebui să conţină toate informaţiile pe baza cărora

utilizatorul să poată efectua diverse analize.

3. accesibilitate

Sistemele OLAP trebuie să prezinte o singură viziune logică a datelor din

intreprindere. Sursele de date în modelul OLAP trebuie să fie transparente la utilizator. Codd

considera că şi utilizatorii finali pot fi, de asemenea o sursă de date.

4. surse de date variate

Pagina 29 din 207

Page 30: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Codd considera că un sistem OLAP trebuie să fie capabil să lucreze cu date stocate fie

în baze de date multidimensionale (MOLAP) cât şi în baze de date relaţionale (ROLAP).

5. modele de analiză OLAP

Codd considera că instrumentele OLAP trebuie să suporte patru modele de analiză:

explicativ, direct, contemplativ şi formativ. Cu alte cuvinte instrumentele OLAP trebuie să

permită cel putin realizarea rapoartelor parametrizate, analize de tip „ce se întâmplă dacă?”

(simulare) şi de „urmărire a unui scop” (optimizare), operaţii de tip drill down, roll up, slice

şi dice.

6. arhitectură client/server

Un sistem OLAP trebuie să permită arhitectură client/server. Server-ul OLAP trebuie

să fie suficient de inteligent astfel încât diverşi clienţi să se poată conecta la el cu minimum

efort de integrare şi de programare.

transparenţă

Sistemele OLAP trebuie să conţină interfeţe pentru diverse instrumente client şi să

permită acces la tipuri de date eterogene.

8. suport multiutilizator

Instrumentele OLAP trebuie să asigure acces concurent, integritatea şi securitatea

datelor.

Caracteristici speciale:

9. denormalizarea datelor

Pagina 30 din 207

Page 31: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Codd sugerează că prelucrarea datelor într-un mediu OLAP nu trebuie să afecteze

datele externe ce servesc ca sursă. Instrumentele OLAP sunt folosite pentru a procesa colecţii

mari de date, actualizate periodic, de aceea trebuie să aibă abilitatea de a stabili legături

persistente cu sursele externe de date, pentru a asigura sincronizarea între sursele externe şi

hypercub (cubul de date). Deoarece sistemele OLAP sunt în general separate de sistemele

sursă, legăturile servesc ca funcţii de transformare. Ele indică cum se transformă datele din

tabele sau foi de calcul tabelar în date multidimensionale. Legăturile pot descrie relaţii

structurale, atributele membrilor sau conţinutul hypercuburilor. Legăturile oferă o

infrastructură persistentă pentru importarea şi exportarea datelor şi a metadatelor. Ele variază

în funcţie de tipul informaţiei adusă în cub şi de tipul sursei de date, de la care informaţia este

obţinută.

10. stocarea rezultatelor generate de instrumentul OLAP

Sistemele OLAP trebuie să stocheze datele separat de sistemele tranzacţionale.

Această cerinţă apare ca urmare a diferenţelor ce există între datele operaţionale şi cele

destinate suportului decizional.

11. manipularea valorilor lipsă

Valorile lipsă sunt diferite de valorile zero şi cele invalide. Termenul de împrăştiere a

fost utilizat cu semnificaţia de valoare lipsă, valoare inaplicabilă şi valoare zero. Primele

două cazuri sunt considerate date invalide (conceptul de null). Codd sugerează că modelele

OLAP respectă regula privind valorile null, a modelului relaţional. Existenţa unui număr

mare de valori zero nu este totuşi un exemplu real de împrăştiere. Valoarea zero este validă

ca orice alt număr. Problema tratării datelor împrăştiate este una foarte importantă şi este

frecvent dezbătută în domeniul bazelor de date. Cele două tipuri de date (lipsă şi invalide)

trebuie totuşi să fie tratate individual, deoarece ele afectează calculele în moduri diferite.

12. modul de tratare al valorilor lipsă

Valorile lipsă sunt ignorate de instrumentul OLAP, indiferent de sursa lor.

Pagina 31 din 207

Page 32: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Modul de prezentare al datelor:

13. flexibilitatea rapoartelor

Codd considera că orice subset de membri ai unei dimensiuni poate fi mapat la orice

rând, coloană sau pagină a ecranului de afişare. Cu alte cuvinte, aranjamentul axelor în

raportare trebuie să fie la libera alegere a utilizatorului.

14. performanţa raportării

Această regulă nu trebuie să varieze semnificativ cu numărul de dimensiuni sau cu

mărimea bazei de date. Principalii factori care afectează performanţa raportării sunt:

- modul cum sunt realizate calculele. Ele pot fi antecalculate sau sunt realizate la

momentul interogării.

- locul unde sunt procesate calculele (client/server).

Aceşti factori prezintă o importanţă mai mare decât mărimea bazei de date, numărul

de dimensiuni sau complexitatea raportării.

15. ajustarea automată a nivelului fizic

Codd cere sistemelor OLAP să-şi modifice automat schema fizică a bazei de date, în

funcţie de tipul modelului logic şi de volumul datelor.

Controlul dimensiunilor:

16. dimensionalitatea generică

Codd considera că dimensiunile trebuie să fie echivalente structural şi operaţional,

adică să permită ierarhii multiple, toate tipurile de operaţii multidimensionale şi în acelaşi

timp să poate fi actualizate.

17. dimensiuni şi niveluri de agregare nelimitate

Pagina 32 din 207

Page 33: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Din punct de vedere tehnic, un produs nu poate îndeplini această regulă, resursele

calculatorului fiind limitate. Puţine aplicaţii OLAP necesită mai mult de opt sau zece

dimensiuni şi puţine ierarhii conţin mai mult de şase nivele. Codd afirmă că ar trebui stabilit

un număr maxim de dimensiuni, 15-20 de dimensiuni.

18. operaţii între dimensiuni nerestrictive

În analiza multidimensională a datelor, toate dimensiunile sunt create şi tratate egal.

Limbajul de manipulare a instrumentelor OLAP trebuie să permită calcule şi să asigure

modalităţi de manipulare a datelor între orice număr de dimensiuni.

Aceste reguli au fost extinse în mai 1995 şi au fost structurate de Codd în patru grupe,

denumite „caracteristici”. Caracteristicile sunt rareori menţionate şi putin folosite.

EXEMPLE DE INSTRUMENTE OLAP

Business Objects Americans este lider în furnizarea de instrumente suport de decizie

incluzând interogare, raportare, analiza proceselor on-line, data mining şi administrare SSD

pentru arhitectură client/server şi mediu Internet:

Business Objects permite dezvoltarea de aplicaţii suport de decizie cu facilităţi de

interogare şi raportare. Asigură acces la diferite surse de date (depozite de date/centre de date,

baze de date multidimensionale, fişiere text, pachete de aplicaţii, sisteme SAP). Folosind

facilitatea VBA permite utilizatorilor să modifice şi să extindă nucleul funcţional al

produsului Business Objects (se pot crea noi funcţii, noi comenzi sau subprograme).

Developer Suite permite integrarea completă a lui Business Objects cu alte aplicaţii şi

cuprinde următoarele componente: Business Objects, WebIntelligence (server de Web),

Broadcast Agent şi o componentă pentru vizualizarea rapoartelor.

Cognos oferă instrumente pentru inteligenţa afacerii, medii de dezvoltare a

aplicaţiilor.

Power Play este un instrument de analiză şi raportare multidimensională folosit pentru

a oferi informaţii utile managerilor. Este un instrument foarte scalabil (până la câteva mii de

Pagina 33 din 207

Page 34: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

utilizatori), cuburile pot fi create pe client sau pe servere Unix. Ele pot fi create ca fişiere într-

un sistem de gestiune de fişiere sau ca tabele într-o bază de date relaţională (Oracle sau

Sybase). Permite o metodologie de proiectare a aplicaţiilor iterativă.

Impromptu permite utilizatorilor să creeze rapoarte complexe fără să cunoască

limbajul SQL sau structura bazei de date. Power Play şi Impromptu se folosesc pentru

aplicaţii de analiză a vânzărilor, analiză financiară, controlul calităţii. Instrumentele pot

importa date din peste o sută de surse de date relaţionale şi multidimensionale.

Holistic Systems, Inc este un membru al grupului Seagate Software Information

Management şi este cel mai puternic furnizor de instrumente pentru inteligenţa afacerii.

Holistic Systems este complet dedicat pentru activitatea de marketing, fiind un lider în BI.

Holos este un mediu de dezvoltare pentru aplicaţii BI, încorporează facilităţi EIS, SSD şi

OLAP, cu o arhitectură pe trei niveluri, pentru firme de dimensiuni foarte mari. În versiunea

5.0 a fost introdusă facilitatea de data mining, bazată pe reţele neuronale, integrată cu nivelul

analitic foarte puternic al lui Holos.

Pilot Software, Inc este o firmă a corporaţiei The Dun & Bradstreet, care dezvoltă

instrumente suport de decizie interactive pentru manageri şi analişti. Pilot Decision Support

Suite constă din cinci componente:

Pilot Desktop este un mediu monoutilizator pentru analiză interactivă de afaceri cu un

set complet de instrumente multidimensionale, ce permit utilizatorilor să facă operaţii de drill

down, roll up şi pivotare prin datele agregate. Include un motor OLAP cu cunoştinţe de timp

şi instrumente pentru analiza de excepţii. Sursele de date pot fi relaţionale.

Pilot Analysis Server este un server OLAP multiutilizator ce oferă multe facilităţi de

modelare, include o bibliotecă de funcţii.

Pilot Designer este un instrument pentru crearea tuturor tipurilor de aplicaţii vizuale

de tip suport de decizie. Include un limbaj pentru scripturi ce este compatibil cu Visual Basic.

Pilot Analysis Library este o bibliotecă opţională de module de analiză ce permite

utilizatorilor să accelereze implementarea de soluţii suport de decizie complexe.

Pilot Excel Add-In este o componentă opţională ce permite utilizatorilor Excel de a

integra facilităţile mediului Pilot în soluţiile Excel.

MicroStrategy, Inc este lider în soluţii ROLAP şi oferă următoarele produse OLAP:

DSS Server (motor relaţional-OLAP), clienţi (DSS Agent Relational OLAP, DSS Objects

pentru dezvoltarea de aplicaţii OLAP, DSS Web Relational OLAP – client pentru Web), DSS

Administrator (client pentru depozite de date), DSS Executive EIS (instrument de proiectare).

Pagina 34 din 207

Page 35: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Kenan Systems Corp oferă soluţii pentru firmele din domeniul telecomunicaţiilor,

servicii financiare, comerţ. Oferă următoarele produse:

Acumate Server este un mediu de dezvoltare de aplicaţii, incluzând un limbaj

procedural multidimensional (MSPL) şi instrumente de analiză complexe. Serverul include

un set de instrumente de încărcare a datelor, pentru accesarea depozitelor de date şi a

sistemelor operaţionale eterogene.

Acutrieve este o aplicaţie suport de decizie optimizată pentru analişti.

Acumate Workbench este o interfaţă grafică ce permite utilizatorilor să folosească

avantajele mediului Windows, precum şi a limbajului multidimensional MSPL.

Acumate Web este un motor generator HTML ce poate fi utilizat pentru a permite

raportare ad-hoc şi statică folosind tehnologia Web.

Informix Software, Inc oferă următoarele produse OLAP:

INFORMIX MetaCube este un motor de analiză complex, ce transformă Informix

Online Dynamic Server într-un server OLAP foarte performant.

INFORMIX MetaCube Explorer este un instrument SSD pentru utilizatori ce oferă o

interfaţă simplă pentru acces la depozitele de date şi realizarea de rapoarte.

INFORMIX MetaCube Warehouse Manager este un instrument grafic pentru

administrarea metadatelor ce descriu depozitul de date.

INFORMIX MetaCube Warehouse Optimizer analizează automat depozitul de date

pentru a recomanda agregarea optimă şi strategii de performanţă.

INFORMIX MetaCube for Excel extinde mediul foaie de calcul tabelar pentru a oferi

acces de tip wizard la depozitul de date.

Arbor Software Corporation oferă instrumente OLAP pentru activitatea de planificare

şi analiză a afacerilor:

Essbase Analysis Server este un server de baze de date multidimensional optimizat

pentru operaţii de planificare şi analiză a afacerilor, cu următoarele caracteristici: arhitectură

client/server, acces concurent la citire/scriere, stochează volume mari de date, permite calcule

analitice complexe, navigare flexibilă prin date, timp de răspuns mic, permite aplicaţii OLAP

robuste ce accesează direct sisteme OLTP sau un centru de date.

Essbase Spreadsheet Add-In permite integrarea facilităţilor oferite de instrumentele de

tip foaie de calcul tabelar (Excel, Lotus) cu facilităţile OLAP.

Essbase Aplication Manager este folosit pentru a construi, modifica şi gestiona

modele analitice, securitatea accesului la date, reguli de încărcare a datelor.

Pagina 35 din 207

Page 36: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Wired for OLAP este un instrument de prezentare şi analiză ce operează atât pe client

cât şi pe server.

Essbase Objects este un instrument puternic ce permite dezvoltarea de aplicaţii

OLAP.

IBM Corporation:

Componenta de prezentare oferă un set de facilităţi de vizualizare, navigare şi

raportare. Motorul OLAP permite reprezentarea multidimensională a schemei stea, calcule

analitice complexe şi agregări. Unele soluţii OLAP includ şi un nivel suplimentar:

Componenta de aplicaţie. Această componentă oferă logica afacerii, specifică pentru

subiectul analizat (de exemplu marketing şi vânzări).

Oracle Corporation oferă următoarele produse OLAP:

Oracle Express Server/Oracle Personal Express este un server OLAP. Datele sunt

stocate într-o bază de date multidimensională. In 2002, Oracle lanseaza Oracle 9i Release 2

OLAP care integrează toate facilităţile OLAP în baza de date relaţională Oracle.

Oracle Express Administrator este un utilitar grafic pentru definirea, întreţinerea şi

popularea bazelor de date multidimensionale Express.

Oracle Express Relational Access Manager (RAM) permite ca Express Analyzer să

acceseze datele stocate într-o bază de date relaţională, care a fost configurată cu Oracle

Relational Acces Administrator (RAA).

Oracle Express Analyzer este un instrument OLAP folosit pentru analiza datelor şi

realizarea rapoartelor.

Oracle Express Objects permite crearea de aplicaţii OLAP şi briefing-uri complexe

care pot fi rulate în Express Analyzer, precum şi realizarea de programe în limbaj Express,

prin care se controlează comportamentul aplicaţiei. Este un element cheie în Oracle

Integrated Business Intelligence Tools, fiind integrat cu Oracle Discoverer.

Oracle Express Spreadsheet Add-In permite afişarea datelor multidimensionale într-o

foaie de tip calcul tabelar Excel.

Oracle Express Web Agent permite crearea de aplicaţii Express ce pot fi lansate în

execuţie folosind un browser Web.

Aplicaţiile Oracle Express (Oracle Sales Analyzer şi Oracle Financial Analyzer) sunt

aplicaţii preconstruite pentru analiza vânzărilor şi a pieţei şi analiză financiară.

SNAPI (structured N dimensional application programming interface) este o

bibliotecă de funcţii C care permite ca aplicaţiile client Windows să poată comunica cu

serverul Express. Local SNAPI permite clienţilor să se conecteze la Personal Express, iar

Pagina 36 din 207

Page 37: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Remote SNAPI la serverul Express. ExpressCommunication Arhitecture (XCA) permite

comunicarea între Personal Express şi Express Server şi între instanţe diferite ale serverului

Express.

2.5. ORACLE 9I OLAP

Oracle 9i OLAP integrează toate facilităţile analitice oferite de Oracle Express Server

în baza de date relaţională Oracle. Astfel putem afirma că SGBD Oracle 9i este un mediu

integrat relaţional-obiectual-multidimensional:

- Datele pot fi stocate într-un depozit de date sau într-un spaţiu de lucru analitic.

Tipul de analiză făcut de fiecare aplicaţie în parte determină cea mai bună alegere în

modul de depozitare a datelor. Trebuie examinate beneficiile fiecărei metode de stocare în

funcţie de aplicaţie şi trebuie decis care dintre acestea se potriveşte mai bine cu cerinţele.

Pentru stocarea informaţiilor, se poate opta pentru una din următoarele alternative:

În întregime în baze de date relaţionale. Informaţiile sunt stocate în întregime într-un

depozit de date şi puse la dispoziţie aplicaţiilor Java prin metadate. În timpul sesiunilor

utilizatorilor, informaţiile sunt selectate şi manipulate în baza de date relaţională. Această

soluţie este în mod obişnuit denumită Relational OLAP (ROLAP). Baza de date relaţională

este modul preferat de stocare a informaţiei pentru marea majoritate a aplicaţiilor de

interogare şi raportare care necesită acces de tip read-only la informaţie. Pentru aceste

aplicaţii, baza de date relaţională oferă scalabilitate în susţinerea eficientă a unor seturi foarte

mari de date printr-un singur set de instrumente administrative.

În întregime într-un spaţiu de lucru analitic multidimensional. Informaţiile sunt

încărcate în dimensiuni şi variabile în spaţiul de lucru. În timpul sesiunilor utilizator,

informaţiile sunt selectate şi manipulate în spaţiul de lucru analitic. Această soluţie este

denumită Multidimensional OLAP (MOLAP). Spaţiile de lucru analitice ar trebui folosite ca

un mod persistent de stocare a informaţiei pentru aplicaţiile ce suportă funcţii de analiză

predictivă precum modele, previziuni şi scenarii de tip “cum ar fi dacă...”. Alte opţiuni de

design, ca tipurile de ierarhii sau folosirea de metode non-aditive de agregare, ar putea face

ca spaţiul de lucru analitic să fie modul preferat pentru stocarea datelor.

Pagina 37 din 207

Page 38: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Distribuite între baza de date relaţională şi spaţiul de lucru analitic. Implementarea

acestui model poate, desigur, varia mult din moment ce reuneşte celelalte două soluţii. O

soluţie distribuită poate fi de dorit atunci când o aplicaţie necesită capacităţi de calcul

avansate şi viteza unei solutii MOLAP combinată cu eficienţa stocării într-o bază de date

relaţională. Această soluţie este denumită în mod obişnuit Hybrid OLAP (HOLAP).

Pe lângă alegerea locului de stocare a informaţiei se pune problema alegerii exacte a

ceea ce ar trebui stocat. Informaţiile agregate pot să fie generate şi stocate ca un pas în

mentenanţa datelor, sau pot să fie agregate de câte ori este necesar ca răspuns la o cerere.

Dacă informaţiile sunt deja puse la dispoziţie, atunci timpul de răspuns este mai rapid. În

orice caz, va fi nevoie de mai mult spaţiu de depozitare pentru a găzdui datele adiţionale.

Atunci când se decide ce anume se stochează trebuie luate în considerare influenţele a

mai mulţi factori: cât de frecvent este necesară data agregată; cât timp este necesar pentru

generarea datei; dacă timpul necesar pentru generarea datei se situează în limite acceptabile;

cât spatiu pe disc este necesar pentru depozitarea datei sau dacă există opţiunea extinderii

mediului de stocare.

- Serviciile OLAP oferă Java OLAP API, un motor pentru calcul şi un spaţiu de lucru

analitic. Aceste facilităţi permit construirea de aplicaţii analitice ce suportă calcule complexe

de tip statistic, matematic şi financiar alături de funcţii de analiză predictivă precum

previziune, modelare, consolidare, alocări şi scenarii manageriale.

Serviciile OLAP conţin următoarele componente: Oracle Java OLAP API, unul sau

mai multe servicii OLAP care rulează ca procese-fiu ale instanţei bazei de date, un depozit

pentru metadate pentru fiecare instanţă de bază de date şi instrumente incluse în Oracle

Enterprise Manager pentru a crea metadate OLAP şi pentru a lucra cu serviciile OLAP. Toate

instrumentele necesare pentru lucrul cu serviciile OLAP sunt integrate în Oracle Enterprise

Manager. Nu este necesară folosirea unui set separat de instrumente.

OLAP Services Instance Manager este principalul instrument în managementul

serviciilor OLAP.

Se poate folosi Instance Manager pentru a efectua următoarele sarcini în

administrarea sistemului:

pornirea şi oprirea serviciilor existente, cât şi crearea unor servicii adiţionale

Pagina 38 din 207

Page 39: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

monitorizarea sesiunilor utilizatorilor

adăugarea sau ştergerea unor componente opţionale, pentru a le putea folosi pe cele

care sunt necesare utilizând cât mai puţine resurse

ajustarea cu fineţe a parametrilor de operare astfel încât serviciile OLAP să

funcţioneze optim într-un mediu unic de procesare a datelor

Componenta OLAP a Oracle Enterprise Manager generează metadate pentru uzul

aplicaţiilor. Aceste metadate sunt folosite pentru a identifica faptele disponibile pentru

analiză, cât şi pentru a crea şi popula obiectele multidimensionale. Aceste obiecte sunt

necesare pentru a procesa cererile analitice folosind date stocate permanent într-un depozit de

date.

Aplicaţiile OLAP pot interoga dicţionarul de metadate pentru a afla ce date sunt

disponibile pentru ele pentru a analiza şi a afişa. În timp ce datele sunt stocate în tabele într-

un depozit de date Oracle, metadatele identifică date în termeni de obiecte multidimensionale

aşa cum vor deveni prin serviciile OLAP: dimensiuni, măsuri şi atribute. Mai mult,

metadatele definesc ierarhiile dimensiunilor necesare pentru a agrega datele în nivele de

detaliu coerente.

- Oracle BI Beans completează serviciile OLAP punând la dispoziţie un set de

aplicaţii OLAP preconstruite. BI Beans poate fi folosit în Oracle JDeveloper sau în alte medii

de dezvoltare Java pentru construirea de aplicaţii analitice ce pot fi implementate drept clienţi

Java sau HTML.

Pentru a dezvolta aplicaţii OLAP, Oracle oferă programatorilor posibilitatea de a

alege metoda de interacţiune cu aceste metadate şi anume:

LIMBAJUL DE PROGRAMARE JAVA

Java este limbajul Internet-ului şi de asemenea este limbajul aplicaţiilor OLAP.

Folosind Java, un dezvoltator de aplicaţii poate scrie o aplicaţie de sine stătătoare sau un

“applet”, care este un program ce poate fi inclus într-o pagină HTML şi executat într-un

browser. Fiind un limbaj orientat obiect, independent de platforma pe care se lucrează,

Pagina 39 din 207

Page 40: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

optimizat pentru reţea şi securizat, Java a început să câştige rapid teren în faţa unor limbaje ca

C++ şi Visual Basic, devenind limbajul preferat al programatorilor:

Orientat obiect. Java permite programatorilor să se concentreze asupra datelor şi

asupra metodelor de manipulare a datelor, în loc să se concentreze asupra unor proceduri

abstracte; programatorul defineşte obiectul necesar, în loc să definească paşii necesari pentru

a crea acel obiect. Aproape totul în Java este definit ca obiect.

Independent de platforma pe care se lucrează. Compilatorul Java crează cod byte care

este interpretat la momentul execuţiei de Java Virtual Machine (JVM). Ca rezultat, acelaşi

program poate fi rulat pe toate platformele Windows, Unix, Macintosh, unde JVM a fost

instalat. Toate browser-ele importante au JVM încorporat.

Optimizat pentru reţea. Java a fost conceput să funcţioneze într-o reţea, ceea ce

permite programelor Java să trateze resursele la distanţă la fel de uşor precum resursele

locale.

Securitate. Codul Java este de două tipuri: “acceptat” şi “neacceptat”, iar accesul la

resursele sistemului este determinat de această caracteristică. Codul local este considerat de

încredere sau “acceptat” pentru a avea acces complet la resursele sistemului, dar codul

descărcat de la distanţă (care este un “applet”) nu este de încredere. Modelul de securitate

Java de tip “sandbox” oferă un mediu foarte restrâns pentru codul “neacceptat”, care nu este

de încredere. De exemplu, codul “neacceptat” nu poate avea drept de citire/scriere către

fişierele aflate în sistemul local, nu poate rula/executa programe, nu poate încărca librării, nu

poate defini metode native sau face conexiuni în reţea exceptând calculatorul gazdă de

origine. Un manager de securitate determină resursele sistemului la care poate avea acces un

applet. Totuşi, un applet cu semnatură, care este identificat ca fiind de la o sursă sigură, are

acces complet la resursele sistemului la fel ca şi un cod local.

Pentru a dezvolta o aplicaţie OLAP se foloseşte limbajul de programare Java. Java

permite scrierea de aplicaţii ce sunt independente de platforma pe care se lucrează şi sunt

uşor de implementat pe Internet.

Java este limbajul de programare preferat pentru un număr din ce în ce mai mare de

profesionişti în dezvoltarea software. Pentru aceia care au lucrat cu C sau C++, trecerea la

Java este uşoară deoarece oferă un mediu familiar în timp ce se evită multe dintre deficienţele

limbajului de programare C. Creat de Sun Microsystems, Java este un limbaj securizat,

orientat obiect, portabil şi multithread.

Pagina 40 din 207

Page 41: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

OLAP API este o interfaţă de tip aplicaţie Java ce oferă acces la date de tip

multidimensional pentru aplicaţii de tip analitic. OLAP API preia datele stocate într-o bancă

sau depozit de date (data warehouse) şi le depune în cache-ul multidimensional OLAP pentru

manipularea lor prin motorul său analitic. Clasele Java din OLAP API oferă toate funcţiile

necesare unei aplicaţii OLAP: conexiunea la o instanţă OLAP; autentificarea şi validarea

utilizatorilor; accesul la date în SGBDR Oracle, acces controlat de permisiunile pe care le au

acei utilizatori validaţi; selectarea şi manipularea datelor pentru analiza afacerii.

BI Beans simplifică dezvoltarea aplicaţiei oferind aceste funcţii ca JavaBeans. Mai

mult, BI Beans include JavaBeans pentru prezentarea informaţiei în grafice, tabele etc.

Odată cu dezvoltarea tehnologiei Internet, din ce în ce mai multe companii realizează

cât ar putea să câştige doar prin schimbarea modului în care le sunt implementate aplicaţiile.

Tradiţionalele aplicaţii “thick-client” (aplicaţii cu client performant) implementează multe

dintre funcţiile lor pe calculatorul utilizatorului, acest lucru necesitând o mare proporţie de

cod instalat. Totuşi, a trecut timpul când era necesară o întreagă echipă de tehnicieni pentru a

instala şi menţine aplicaţii software pe sute şi mii de calculatoare individuale pentru o gamă

largă de utilizatori. În opoziţie, aplicaţiile Java “thick-client” descarcă software-ul necesar pe

calculatoarele client în mod automat la momentul execuţiei aplicaţiei.

De asemenea, administratorii de sistem pot implementa aplicaţii “thin client”

(aplicaţii cu client de tip browser) care nu descarcă nici un fel de cod Java pe calculatoarele

client. Aceste aplicaţii rulează pe servere pe care utilizatorii din lumea întreagă le pot accesa

doar folosind un client java cum ar fi browser-ul lor Web.

Indiferent dacă se foloseşte o configuraţie de tip “thick-client” (client performant) sau

“thin-client” (client de tip browser) aplicaţiile Java oferă o soluţie imediată problemelor ce

intervin în lucrul cu o comunitate largă de utilizatori, care în mod obişnuit deţin o varietate de

platforme hardware şi software incompatibile.

UTILIZAREA MODULELOR JAVABEANS PENTRU INTELIGENŢA AFACERII

Modulele JavaBeans pot fi considerate blocuri de cod “prefabricate” folosite pentru

dezvoltarea aplicaţiei. Aceste blocuri sunt piese reutilizabile de cod Java care pot fi asamblate

repede şi uşor într-o aplicaţie.

Modulele BI Beans oferă principalele blocuri pentru o aplicaţie OLAP: conexiunea la

baza de date; autentificarea şi validarea utilizatorilor; selectarea şi preluarea datelor; afişarea

Pagina 41 din 207

Page 42: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

datelor într-o mare varietate de tabele şi formate grafice. Folosind BI Beans, se pot crea

aplicaţii cu utilizabilitate şi interfaţă prietenoasă şi comună, permiţând utilizatorilor să câştige

experienţă rapid cu noul produs.

Sunt disponibile două grupe de BI Beans:

Beans de prezentare (Presentation BI Beans). Afişează date într-o bogată varietate de

formate, astfel încât variaţiile şi tendinţele pot fi detectate cu uşurinţă (de exemplu: Graph,

Table şi Crosstabs). Pot fi implementate atât pentru arhitecturi cu client performant cât şi

pentru cele cu client de tip browser. Arhitecturile cu client performant se pretează

utilizatorilor ce fac analize complexe, necesitând utilizarea sistemului pentru perioade extinse

de timp şi cu un volum mare de interacţiune (de exemplu utilizatori ce creează rapoarte).

Arhitecturile cu client de tip browser se potrivesc mai bine utilizatorilor la distanţă ce

folosesc o conexiune cu o lăţime de bandă joasă şi a căror nevoi analitice sunt reduse. Ele pot

fi incluse într-un portal sau un site web pentru aceşti utilizatori.

OLAP BI Beans preiau şi manipulează informaţiile. OLAP BI Beans foloseşte OLAP

API pentru conectarea la sursa de date, pentru definirea cererilor, pentru manipularea setului

de date rezultat şi returnarea rezultatelor către Presentation BI Beans pentru afişare.

BI Beans de prezentare suportă tehnici de navigare precum forare (“drilling”),

pivotare (“pivoting”) şi paginare (“paging”):

Forarea afisează valorile de pe nivelele inferioare, contribuind astfel la un agregat de

nivel înalt, cum ar fi, spre exemplu, oraşele ce contribuie la un total pe judeţ.

Pivotarea roteşte cubul de date astfel încât membrii dimensiunii ce apar pe axa X a

unui grafic vor apărea ulterior pe axa Y, sau membrii dimensiunii ce marcau coloanele într-

un tabel încrucişat (crosstab) vor marca acum rândurile. Spre exemplu, dacă rândurile indică

produsele şi coloanele indică regiunile, cubul poate fi pivotat astfel încât coloanele să indice

produsele şi rândurile să indice regiunile.

Paginarea se ocupă de dimensiuni adiţionale afişând fiecare membru separat într-un

grafic, tabel sau tabel încrucişat decât să le adune în coloane sau rânduri. De exemplu, un

utilizator ar putea să solicite vizualizarea separată a fiecarei perioade de timp în loc să i se

afişeze toate perioadele de timp pe acelaşi grafic.

BI Beans de prezentare permit schimbarea modului de afişare a unui anumit set de

date. În plus, chiar valorile datelor pot afecta acest mod de afişare.

Formatarea numerica. Afişarea numerică poate fi modificată schimbând mărimea,

numărul de zecimale şi de zero-uri, simbolul valutei de referinţă, notaţia de negativitate şi aşa

Pagina 42 din 207

Page 43: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

mai departe. Simbolul valutei şi factorii de mărime pot fi afişaţi în capetele de

rânduri/coloane mai degrabă decât în fiecare celulă.

Formatarea “stoplight”. Culoarea, marginile, caracterele folosite şi asa mai departe

pentru celule pot fi corelate cu datele efective, astfel încât informaţiile problematice sau

excepţionale să fie aduse în prim plan în comparaţie cu celelalte informaţii.

Rang. În rapoartele bazate pe rang, este afişată valoarea rangului numeric al fiecărei

dimensiuni pe baza valorii măsurii.

Datele sunt prezentate utilizatorilor prin grafice bi sau tri-dimensionale de diverse

tipuri cum ar fi: bare, arii, linii, felii, inele, dispersii, baloane, piramide şi model “bursă de

valori”, bazat pe serii de câte 3 valori. Multe dintre graficele bidimensionale pot fi afişate

clustered, stivă, dual-Y, procentual, orizontale, verticale sau cu efect tridimensional.

Graficele de tip bară, linie şi arie pot fi combinate astfel încât rânduri individuale din

cubul de date să poată fi specificate ca unul dintre aceste tipuri de grafice. De asemenea se

pot specifica tipul şi forma marcajului, tipul liniilor, culoare şi dimensiune, culori de umplere

pentru o mai bună lizibilitate a listelor rând-cu-rând.

Imaginea graficului poate fi copiată în clipboard-ul sistemului şi exportat ca GIF sau

alte formate de imagine.

Utilizatorii pot face zoom în şi din afara ariei selectate dintr-un grafic şi de asemenea

pot face scroll pe axe.

De asemenea, informaţiile se pot prezenta şi sub forma unui tabel bidimensional,

similar unui spreadsheet. Mai multe dimensiuni pot fi aşezate de-a lungul rândurilor şi

coloanelor, iar dimensiunile adiţionale pot apărea ca pagini separate. Pentru personalizare

avem: stilul, marimea, culoarea şi sublinierea caractererelor, culori de fond individuale pentru

fiecare celulă, formate pentru margini, aliniere text.

Utilizatorii pot naviga prin informaţii fie cu mouse-ul, fie cu tastatura, pot adăuga

rânduri sau coloane pentru afişarea de rezultate şi pot edita celule pentru analize de tip “cum

ar fi dacă...”.

Informaţiile pot fi prezentate şi într-un format asemănător unei tabele, unde măsurile

sunt tratate individual.

BI Beans oferă facilităţi de tip wizard care pot fi folosite atât de dezvoltatorii

aplicaţiei în crearea mediului iniţial cât şi de utilizatorii finali în personalizarea aplicaţiei

pentru a se potrivi cu nevoile lor particulare:

Construirea unei cereri. Tabelele de fapte şi viziunile/tabelele virtuale conţin adesea

mai multe informaţii decât cele de care sunt direct interesaţi utilizatorii. Aducerea unor mari

Pagina 43 din 207

Page 44: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cantităţi de informaţii poate de asemenea degrada performanţele şi acest lucru nu e necesar.

În plus faţă de selectarea măsurilor, se poate limita volumul de date adus printr-o cerere

selectând membrii dimensiunii dintr-o listă sau folosind un set de condiţii. O selecţie poate fi

salvată şi folosită din nou doar prin selectarea numelui acesteia dintr-o listă.

Generarea de măsuri personalizate (“custom”). Se pot defini noi măsuri personalizate

ale căror valori sunt calculate din informaţiile stocate în baza de date. BI Beans oferă

utilizatorilor posibilitatea de a-şi crea propriile calcule, măsuri, tocmai datorită faptului că un

administrator de baze de date nu poate anticipa nevoile tuturor utilizatorilor.

ORACLE JDEVELOPER

Oracle JDeveloper oferă un mediu integrat de dezvoltare pentru dezvoltarea de

aplicaţii Java. JDeveloper se bucură de o integrare deplină cu baza de date Oracle şi cu BI

Beans Wizard. Iată câteva dintre facilităţile JDeveloper:

- Instrument de diagnosticare (debugger) la distanţă, în mod grafic, cu inspector,

watch-uri, puncte de stop.

- Interfaţă multi-document (MDI)

- Facilitate “Codecoach” ce ajută la optimizarea codului.

- Generare de aplicaţii 100% Java, applet-uri, servlet-uri, Javabeans etc. Codul

generat este lipsit de orice fel de însemne de proprietate sau marcaje.

- Browser de baze de date Oracle.

INTERFAŢA ORACLE OLAP API

Oracle OLAP API este o interfaţă de programare de aplicaţii Java pentru serviciile

OLAP. Este un limbaj de interogare care selectează şi manipulează datele dintr-un depozit de

date pentru a le afişa într-un client Java. Blocurile analitice BI Beans sunt construite folosind

acest API; se poate extinde (sau chiar înlocui) funcţionalitatea oferită de BI Beans folosind

clase Java.

Aplicaţiile OLAP au în mod obişnuit interfaţa utilizator orientată obiect, unde

utilizatorii manipulează obiecte ce reprezintă grupări organizate ale datelor/informaţiilor.

Astfel, există o legătură naturală între o interfaţă utilizator orientată obiect şi un API orientat

Pagina 44 din 207

Page 45: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

obiect cum este Oracle OLAP API. OLAP API exploatează această legătură naturală oferind

acele obiecte necesare aplicaţiei ce se potrivesc comportamentului utilizatorilor finali.

Limbajele orientate obiect, cum ar fi Java, manipulează informaţiile prin aplicarea de

metode asupra obiectelor. Această abordare permite obiectelor să-şi menţină o stare curentă şi

să suporte modificări incrementale la acestă stare. Această abordare oferă un suport excelent

pentru acţiuni tipice OLAP cum ar fi forare şi rotaţie.

De exemplu, o activitate de bază pentru utilizatorii de aplicaţii OLAP este rafinarea

cererilor. Un utilizator are o întrebare în minte şi alcătuieşte o cerere pentru a afla răspunsul.

În cele mai multe situaţii, rezultatul iniţial al cererii îl forţează pe utilizator să caute mai în

profunzime pentru o soluţie, probabil prin forare (“drilling”), pentru a vedea mai multe

informaţii detaliate sau prin rotaţia raportului spre o mai bună corelare cu datele. OLAP API

este capabil să folosească acest rezultat al unei cereri ca dată de intrare pentru o altă cerere.

Cererile analitice sunt prin natura lor iterative. Un analist formulează o cerere,

studiază rezultatul şi apoi formează noi cereri pe baza acestui rezultat. De vreme ce într-o

analiză a afacerii probabilitatea de a avea nevoie de aceleaşi informaţii pentru a răspunde la

cereri succesive este foarte mare, OLAP API păstrează metadatele într-un cache astfel încât

să fie disponibile pe tot parcursul sesiunii de lucru. Folosind cursori multidimensionali,

OLAP API poate accesa aleator regiuni disparate ale setului de rezultate. Aceasta permite

unei aplicaţii să primească doar informaţiile de interes curent în loc de întreaga informaţie din

setul de rezultate.

Pentru primirea datelor dintr-un depozit de date, OLAP API generează instrucţiuni

SQL. În preluarea datelor se folosesc multe dintre cele mai noi inovaţii din Oracle 9i, inclusiv

rescrierea cererilor, rollup concatenat şi altele.

OLAP API generează comenzi SQL pentru a selecta şi manipula informaţiile stocate

în baza de date. Aceste comenzi SQL pot include funcţii “N-pass” cum ar fi: RANK,

PERCENTILE, TOPN, BOTTOMN, LAG, LEAD, SUM, AVG, MIN, MAX, COUNT, şi

STDDEV.

OLAP API oferă facilităţi de calcul extinse în plus faţă de cele care pot fi folosite în

mod eficient în alte soluţii OLAP, cum ar fi:

suprimarea rândurilor, coloanelor sau paginilor cu valori nule, 0 sau NA (not

applicable).

calcule pe rânduri şi coloane

măsuri ca dimensiuni.

Pagina 45 din 207

Page 46: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Calculele adiţionale ca modelarea, previziunea şi scenariile de tip “cum ar fi dacă...”

pot fi făcute asupra datelor în spaţiul de lucru analitic.

LIMBAJUL DE MANIPULARE ORACLE OLAP (ORACLE OLAP DML)

Oracle OLAP DML este un limbaj de manipulare a datelor care extinde suportul

analitic al interfeţei OLAP API pentru a include facilităţi precum previziunea, modelarea şi

scenariile de tip “cum ar fi dacă...”. Operează asupra datelor care sunt stocate (permanent sau

temporar) în obiecte multidimensionale din spaţiul de lucru analitic.

Arhitectura unei aplicaţii OLAP:

ARHITECTURA UNEI APLICAŢII OLAP CU CLIENT PERFORMANT (“THICK-

CLIENT”)

Componentele unei aplicaţii OLAP cu client performant sunt grupate pe trei nivele ce

pot fi pe platforme separate sau pe aceeaşi platformă:

- Nivelul clientului Java. O aplicaţie Java poate să ruleze ori într-un browser ori direct

în Java Runtime Environment (JRE). BI Beans, care sunt dedicate prezentării datelor şi

metadatelor, rulează de asemenea pe acest nivel.

- Nivelul serverului de aplicaţii. “Creierul” aplicaţiei rulează pe acest nivel, care

include OLAP API şi OLAP BI Beans, acestea fiind construite utilizând OLAP API.

- Nivelul serverului de date. Acest nivel este format din SGBDR Oracle şi serviciile

OLAP, fiind nivelul unde sunt stocate informaţiile, selectate şi manipulate. Pe acest nivel

rulează şi o componentă OLAP API.

Pagina 46 din 207

Page 47: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 2.1: Arhitectura unei aplicaţii OLAP cu client performant

ARHITECTURA UNEI APLICAŢII OLAP CU CLIENT DE TIP BROWSER

(“THIN-CLIENT”)

Componentele unei aplicaţii OLAP cu client de tip browser sunt grupate pe două

nivele ce pot fi pe platforme separate sau pe aceeaşi platformă:

- Nivelul serverului de aplicaţii. “Creierul” aplicaţiei rulează pe acest nivel, care

include un server web, OLAP API şi OLAP BI Beans, atât de prezentare cât şi analitice.

- Nivelul serverului de date. Acest nivel este format din SGBDR Oracle şi serviciile

OLAP, fiind nivelul unde informaţiile sunt stocate, selectate şi manipulate. Pe acest nivel

rulează şi o componentă OLAP API.

Pagina 47 din 207

Page 48: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 2.2: Arhitectura unei aplicaţii OLAP cu client de tip browser

Tipuri de aplicaţii OLAP dezvoltate cu Oracle 9i:

Aplicaţiile ce suportă analiza activităţii se grupează în următoarele mari categorii:

Raportare standard şi ad-hoc

Raportare analitică

Analiză predictivă

Oracle pune la dispoziţie tehnologia pentru toate aceste tipuri de aplicaţii. Serviciile

OLAP şi instrumentele sale pentru dezvoltare sunt construite în mod special pentru aplicaţii

cu raportare analitică şi pentru aplicaţii cu analiză predictivă.

Aplicaţiile analitice pot suporta mai multe faţete ale unei activităţi de afaceri şi oferă

rezultatele aşteptate ale unei investiţii. Iată doar câteva exemple de aplicaţii analitice:

Contabilitate. Analiză pentru previziune, bugetare, costuri şi profitabilitate, şi

consolidare

Resurse umane. Consolidarea aptitudinilor, optimizarea şi planificarea muncii

Distribuţie. Planificare şi optimizare

Pagina 48 din 207

Page 49: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Automatizarea vânzărilor. Analiză teritorială

Marketing. Analize de piaţă

Producţie. Planificarea şi previziunea cererilor

Medicină. Analiza ieşirilor

Servicii financiare. Analiza şi managementul riscurilor.

Analiză comparativă între Oracle Express Server 6.x şi Oracle 9i OLAP

Tabelul 2.2: Facilităţi noi oferite de Oracle 9i OLAP faţă de Oracle Express Server

6.x

1. Oracle OLAP este instalat ca o opţiune în Oracle Enterprise Edition, şi este

acum integrat în baza de date relaţională Oracle. Oracle OLAP rulează în

nucleul bazei de date.

2. Spaţiu de lucru analitic. În Oracle 9i, termenul de “bază de date” se referă doar

la bazele de date relaţionale. Un spaţiu de lucru analitic este păstrat/stocat ca un

LOB într-o bază de date relaţională. Nu există fişiere cu extensia “.db”.

Sarcinile administrative pentru Oracle OLAP sunt unite cu setul de

instrumente pentru baza de date.

3. Oracle Enterprise Manager include instrumentele pentru administrarea Oracle

OLAP, oferind o interfaţă comună pentru toate platformele. Pachete variate de

PL/SQL extind funcţionalitatea curentă disponibilă prin Oracle Enterprise

Manager şi oferă o alternativă la folosirea acestuia.

Informaţiile de performanţă pot fi colectate într-un sistem de tabele asemănător

cum în alte baze de date Oracle se prezintă statisticile de performanţă.

OLAP Instance Manager, “oesmgr” şi “oescmd” nu sunt disponibile.

4. Oracle OLAP rulează în cadrul nucleului de bază de date Oracle. O sesiune

Oracle OLAP este în permanenţă conectată la baza de date, deschiderea unei

conexiuni nemaifiind astfel un pas separat sau opţional.

Transferul de date între obiectele unui spaţiu de lucru analitic (cum ar fi

Pagina 49 din 207

Page 50: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

variabile sau dimensiuni) şi tabelele relaţionale se poate face în următoarele

moduri:

Comanda SQL a OLAP DML preia datele în dimensiuni şi variabile pentru

viitoare operaţii şi manipulări. O nouă comandă SQL IMPORT facilitează

transferul brut de date din tabelele relaţionale către spaţiul de lucru analitic, iar

o nouă comandă SQL INSERT DIRECT va facilita transferul de date din

spaţiul de lucru analitic în tabelele relaţionale.

Un pachet PL/SQL, CWM2_OLAP_AW_CREATE, oferă proceduri pentru

crearea unui spaţiu de lucru analitic din tabele relaţionale sau metadate din

OLAP Catalog cât şi pentru generarea de vizualizări ale spaţiului de lucru.

Folosind funcţii SQL pentru tabele, o aplicaţie SQL are acum posibilitatea de a

manipula şi a extrage informaţiile dintr-un spatiu de lucru analitic. Express

Server nu permitea ca transferul de date să fie iniţiat din extern.

ODBC nu este disponibil, şi deci accesul la baze de date de alt tip nu este

posibil direct din Oracle OLAP.

Oracle Express Relational Access Administrator şi Oracle Express Relational

Access Manager nu sunt disponibile.

5. Oracle OLAP permite aplicaţiilor să-şi poată accesa informaţiile

multidimensionale direct printr-un Java API sau SQL. Programele Express SPL

pot fi executate folosind oricare dintre metodele de programare. Trebuie

revăzute toate programele SPL pentru a înlătura comenzile care nu mai sunt

disponibile şi pentru a beneficia de avantajele noilor functionalităţi. Pachetul

CWM2_OLAP_AW_CREATE conţine proceduri pentru crearea de spaţii de

lucru analitice şi generarea de vizualizări ale acestora. Se pot crea metadate

OLAP Catalog pentru uzul OLAP API, sau se poate folosi SQL pentru a rula

direct în comparaţie cu aceste vizualizări ale datelor multidimensionale.

Nu se pot rula aplicaţii Windows C++, HTML sau Java care au fost proiectate

pentru folosirea cu Express Server.

6. Aplicaţiile pentru Oracle OLAP pot fi dezvoltate în Java folosind OLAP API.

OLAP Worksheet oferă un mediu interactiv pentru a dezvolta proceduri în

OLAP DML sau SQL. Procedura DBMS_AW execută o comandă OLAP DML

din interiorul unui program SQL.

Nu se poate face conectarea la Oracle OLAP folosind Express Administrator,

Pagina 50 din 207

Page 51: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Personal Express sau Express Connection Utility.

7. Oracle OLAP oferă conectivitate prin Oracle Call Interface (OCI) şi prin Java

Database Connectivity (JDBC).

OLAP Worksheet foloseşte XCA pentru comunicarea cu spaţiul de lucru

analitic. Totuşi, XCA nu poate fi folosit pentru aplicaţii dezvoltate de utilizatori

şi poate produce rezultate neaşteptate.

SNAPI nu mai este disponibil.

8. În Oracle OLAP, administratorul bazei de date defineşte obiecte

multidimensionale şi metadatele OLAP asociate în baza de date relaţională

folosind pachete PL/SQL pentru uzul OLAP API.

OLAP Worksheet permite administratorilor de baze de date cât şi

dezvoltatorilor de aplicaţii să creeze obiecte în spaţiul de lucru analitic prin

executarea de comenzi DML. Pentru ca aceste obiecte să poată fi accesate de

OLAP API trebuie definită o metadată potrivită în spaţiul analitic. Oracle

Express Administrator nu este disponibil în Oracle OLAP, iar metadata din

Oracle Express Objects generată nu poate fi folosită de OLAP API.

9. Odată cu trecerea la Oracle OLAP s-au efectuat numeroase schimbări asupra

Express Stored Procedure Language (acum denumit OLAP Data Manipulation

Language sau OLAP DML).

Comenzi noi. S-a adăugat suport la OLAP DML în următoarele direcţii:

Agregare paralelă

Alocare

Execuţie dinamică de modele

Transfer de date între spaţiul de lucru analitic şi tabelele relaţionale

Funcţii de manipulare la nivel de byte

Funcţii de conversie a datelor

Noi tipuri de date

Comenzi învechite. S-a renunţat la suport în următoarele direcţii:

EXTCALL

ODBC

Pagina 51 din 207

Page 52: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

SNAPI

XCA

Comenzi ale sistemului de operare

Tabelul 2.2: Terminologii Express/Oracle 9i OLAP

Express Oracle 9i OLAP

oesdba olapdba

SNAPI Java OLAP API

Oracle Express Objects JDeveloper

Express Basic Java

Express Administrator AW Manager

OESCMD şi linia de comandă a administratorului OLAP Worksheet

Bază de date Express Spaţiu de lucru analitic

Oracle Express Server parte a Oracle 9i OLAP

Express Instance Manager parte a Oracle 9i OLAP

Express Agent OLAP Agent

Express SPL (sau 4GL) OLAP DML

RAA director OLAP în OEM

RAM automat (nu mai este necesară

folosirea RAM deoarece datele

relaţionale pot fi accesate direct)

Capitolul 3

INSTRUMENTE UTILIZATE PENTRU REALIZAREA

SISTEMULUI OLAP (ORACLE 9I JDEVELOPER)

Oracle Jdeveloper 10g este un mediu integrat de dezvoltare (IDE) pentru dezvoltarea

de aplicaţii şi servicii web, folosind ultimele standarde în domeniile Java, XML şi SQL.

Începând cu versiunea 9.0.1, JDeveloper este scris complet în Java, versiunile anterioare fiind

un hibrid capabil să ruleze numai pe platforme Windows. Oracle JDeveloper 10g, un

Pagina 52 din 207

Page 53: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

instrument 100% bazat pe tehnologia Java, este un mediu integrat de dezvoltare multi-

platformă ce poate rula pe Windows, Linux şi diverse distribuţii de Unix.

Oracle JDeveloper 10g pune la dispoziţia programatorilor un set de instrumente bine

integrate în scopul de a dezvolta şi implementa în mod productiv servicii şi aplicatii la un cost

redus. Pentru a maximiza productivitatea dezvoltatorilor software, Oracle JDeveloper este

capabil să susţină o aplicaţie pe toată durata ciclului de dezvoltare, folosind instrumente

integrate pentru modelarea, codarea, depanarea, testarea, profilarea, ajustarea şi

implementarea acesteia.

Printre noile facilităţi oferite de JDeveloper se numără abordarea declarativă şi

vizuală a dezvoltării precum şi inovativa Oracle Application Development Framework

(Oracle ADF), ce contribuie la simplificarea procesului de dezvoltare şi reduce semnificativ

timpul alocat codării, oferind o productivitate neegalată şi o multitudine de posibilităţi în

privinţa alegerii tehnologiilor cu care se lucrează.

Oracle JDeveloper se axează pe dezvoltarea de aplicaţii Java folosind J2EE, J2SE sau

J2ME pentru dispozitive mici. J2EE este un set de specificaţii folosit în construirea de

aplicaţii multi-nivel folosind limbajul Java. J2EE este o platformă robustă, securizată şi

scalabilă ce constituie fundaţia pentru multe din aplicaţiile de astăzi.

În plus, noua versiune a JDeveloper pune la dispoziţia

dezvoltatorilor de aplicaţii XML facilităţi puternice precum XML Schema Modeler, accesul

direct la codul XML precum şi inspectorul de tag-uri XML. Pentru a completa setul de

instrumente necesare unui programator, Oracle JDeveloper pune la dispoziţie un mediu

complet de dezvoltare şi modelare pentru construirea de obiecte şi proceduri cu baza de date,

dovedind că este un mediu singular şi bine integrat, capabil să ofere programatorului o

interfaţă consistentă şi prietenoasă.

Figura 3.1: Java, XML şi SQL – o combinaţie excepţională

Scopul Oracle JDeveloper 10g este de a face programarea în J2EE mai simplă şi mai

accesibilă. Pentru a putea atinge acest scop, Oracle JDeveloper se concentrează pe abordarea

Pagina 53 din 207

Page 54: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

progrămarii în J2EE atât în mediul vizual cât şi în mediul declarativ. Pentru a simplifica şi

mai mult problema, Oracle a creat o infrastructură de dezvoltare J2EE – Oracle Application

Development Framework (Oracle ADF) - ce implementează tipare de design, eliminând astfel

necesitatea codării unei infrastructuri.

Figura 3.2: Oracle JDeveloper 10g (10.1.2)

Un aspect distinctiv al Oracle JDeveloper constă în faptul că aceeaşi experienţă

productivă de dezvoltare poate fi folosită pe diverse stive de tehnologii. Spre exemplu,

programatorii pot alege să implementeze o aplicaţie OLAP folosind clase Java simple,

componentele de Business Intelligence din Oracle ADF sau serviciile Web. Indiferent de

tehnologia aleasă, Oracle JDeveloper va produce o cale declarativă de creare a acestui nivel

cât şi mecanisme vizuale pentru a uşura munca programatorilor.

Ajungând la concluzia că fiecare programator Java are un nivel de experienţă şi

cunoştinţe diferit cât şi propriul stil de abordare a dezvoltării, Oracle JDeveloper oferă o

multitudine de abordări de dezvoltare, ce includ Model Driven Architecture (MDA –

Arhitectură bazată pe modele), dezvoltare declarativă sau pur şi simplu codare manuală,

programatorii putând opta pentru metoda ce se potriveşte cel mai bine stilului lor.

Oracle JDeveloper oferă posibilitatea programatorilor de a folosi ultimele standarde

tehnologice în dezvoltarea aplicaţiilor ce pot rula pe platfome hardware şi software multiple.

Pagina 54 din 207

Page 55: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Aplicaţiile construite cu Oracle JDeveloper pot fi implementate pe orice server compatibil

J2EE şi pot accesa orice bază de date compatibilă JDBC.

În aceeaşi direcţie, Oracle încurajează instrumentele şi platformele open-source,

oferind funcţionalităţi pentru Struts, Ant, JUnit şi CVS. Această integrare dă posibilitatea

programatorilor de a folosi instrumentele open-source, optimizând astfel procesul de

dezvoltare.

JDeveloper pune de asemenea la dispoziţie un SDK (Software Developer’s Kit) de

extensie ce lasă programatorii să adauge posibilităţi noi şi să-şi personalizeze mediul de

dezvoltare. Oracle JDeveloper este construit ca un set de extensii peste o platformă IDE

nucleu. Programatorii pot să pornească sau să oprească aceste extensii după bunul lor plac,

personalizând astfel un IDE potrivit nevoilor fiecăruia. API-ul folosit de echipa JDeveloper în

dezvoltarea programului este pus în forma sa completă la dispoziţia programatorilor şi a

companiilor în domeniu care sunt interesate de integrarea sau îmbunătăţirea JDeveloper-ului.

De-a lungul anilor se observă că cele mai bune metode şi tipare de design au evoluat

pentru platforma J2EE. Problema care persistă însă în implementarea acestor metode este

necesitatea de a scrie mult cod de infrastructură. Oracle JDeveloper 10g încearcă să înlature

acest inconvenient.

Oracle JDeveloper 10g include Oracle Application Development Framework (Oracle

ADF). Acest cadru de lucru simplifică dezvoltarea în J2EE prin minimizarea necesităţii de a

scrie cod ce implementează tipare de design sau infrastructură a aplicaţiei. Oracle ADF le

pune la dispoziţie ca parte a cadrului de lucru şi conţine atât servicii în timpul execuţiei cât şi

funcţionalităţi de dezvoltare. Este un pas evolutiv, o îmbunătăţire şi o extensie a cadrelor de

lucru existente în versiunile anterioare de JDeveloper.

Oracle ADF este bazat pe tiparul de design Model-View-Controller (MVC). MVC

separă arhitectura unei aplicaţii pe 3 niveluri:

Model – se ocupă de interacţiunea cu sursele de date şi de logica afacerii,

View – se ocupă de interfaţa aplicaţiei cu utilizatorul,

Controller – se ocupă cu mersul fluent al aplicaţiei şi acţionează ca interfaţă între

nivelurile Model şi View.

Independenţa fiecărui nivel faţă de celelalte rezultă într-o arhitectură cuplată lejer,

fapt ce ajută la o mentenanţă mai uşoară şi creşte reuzabilitatea codului. Oracle ADF pune la

dispoziţie o metodă uşoară de a implementa arhitectura MVC.

Pagina 55 din 207

Page 56: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Oracle ADF este bazat pe 4 niveluri, lăsând programatorii să aleagă tehnologia

preferată în implementarea fiecăruia:

Business Services – asigură accesul la date din diferite surse şi se ocupă de logica

afacerii. Asigură servicii de persistenţă a datelor, managementul tranzacţiilor şi execuţie a

logicii afacerii. Poate fi implementat folosind simple clase Java, servicii Web sau

componentele pentru afaceri din Oracle ADF.

Model – asigură un nivel abstract deasupra nivelului Business Services, permiţând

nivelelor View şi Controller să lucreze în mod consistent cu diferite implementări ale

nivelului Business Services. Felul unic în care este implementat nivelul Model în Oracle ADF

conferă aplicaţiei puterea arhitecturilor orientate pe servicii. Nivelul Model permite

dezvoltarea cu uşurinţă a aplicaţiei ca un set de servicii ce pot fi refolosite în diferite aplicaţii.

Controller – pune la dispoziţie un mecanism pentru a controla mersul fluent al

aplicaţiei. De exemplu, aplicaţiile bazate pe interfaţă Web sunt compuse din multiple pagini

cu conţinut dinamic, pe acest nivel făcându-se trecerea de la o pagină la alta. Cea mai

proeminentă arhitectură pentru aplicaţii Web Java se bazează pe un servlet ce acţionează ca

un controller, ADF folosind Apache Jakarta Struts.

View – pune la dispoziţie interfaţa aplicaţiei cu utilizatorul, folosind pentru aceasta

HTML, componente Java sau variaţii de XML. Acest nivel poate fi implementat într-o

interfaţă web, una client-server sau chiar una pentru dispozitive wireless.

Oracle JDeveloper simplifică programarea J2EE prin oferirea de instrumente vizuale

şi declarative pentru fiecare nivel al Oracle ADF.

Oracle JDeveloper include o diagramă de clase UML care ajută la modelarea şi

generarea de clase Java simple, servicii Web, componente de afaceri pentru Oracle ADF etc.

Programatorii pot aduce tabele din browser-ul bazei de date în diagramă, generând în acelaşi

timp şi acele servicii ce vor realiza interfaţa Java către aceste tabele.

Componentele pentru afaceri din Oracle ADF reprezintă o infrastructură axată pe

crearea de obiecte ce implementează nivelul Business Services peste o bază de date, într-o

manieră declarativă. Este posibil astfel accesul la servicii precum managementul tranzacţiilor,

inspecţia resurselor sau declararea de reguli de validare.

Pagina 56 din 207

Page 57: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Pentrul nivelul Controller, Oracle JDeveloper asigură un modelator de ordonare a paginilor în

mersul aplicaţiei, bazat pe Jakarta Struts. Acest modelator aduce o interfaţă vizuală ce

simplifică procesul de planificare al mersului fluent al aplicaţiei. Programatorii pot să

modeleze ordinea paginilor printr-un simplu proces de drag-and-drop al componentelor Struts

în diagramă (figura 3.3).

Figura 3.3: Modelatorul de ordonare a paginilor (STRUTS)

Oracle JDeveloper pune la dispoziţie un editor vizual atât pentru aplicaţiile bazate pe

HTML cât şi pe cele clasice bazate pe componente Swing. Programatorii pot folosi paleta de

componente pentru a adăuga componente vizuale la interfaţa aplicaţiei cu utilizatorul. Paleta

de componente poate fi extinsă cu orice JavaBean standard sau librărie de tag-uri JSP.

Inspectorul de proprietăţi poate fi folosit pentru a defini în mod declarativ atributele

componentelor vizuale. Editorul vizual este sincronizat în orice moment cu codul sursă,

lăsând modul de editare preferat la alegerea fiecăruia.

Paleta de control a datelor oferă o perspectivă a nivelului Business Services, oferind

programatorilor posibilitatea de a lega la acest nivel diversele componente ale aplicaţiei

printr-un simplu drag-and-drop.

Pentru aplicaţiile bazate pe pagini Web există ADF UIX, un set de componente pentru

definirea de interfeţe cu utilizatorul avansate, folosind HTML.

Pagina 57 din 207

Page 58: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Oracle 9i JDeveloper oferă suport complet pentru intregul ciclu de viaţă al dezvoltării

aplicaţiei (figura 3.4).

Figura 3.4: Schema ciclului de viaţă al unei aplicaţii

În dezvoltarea unei aplicaţii vom întâlni întotdeauna mai multe etape decât cea de

codare efectivă. Oracle JDeveloper susţine prin diverse instrumente integrate toate etapele

necesare dezvoltării unei aplicaţii mature: modelare, depanare, testare, profilare, optimizare şi

implementare.

JDeveloper 10g oferă instrumente integrate pentru modelare UML, foarte importante

în conceperea şi analizarea aplicaţiei. Printre aceste instrumente amintim un modelator de

clase (Class Modeler), un modelator de utilizări (Use Case Modeler) şi un modelator de

activităţi (Activity Modeler), fiind folosite pentru modelare conceptuală şi consolidarea

documentaţiei aplicaţiei.

Programatorii pot folosi facilitatea Class Modeler pentru a vizualiza şi genera clase

Java. Funcţionalitatea de generare în două sensuri sincronizează codul şi modelul indiferent

dacă schimbările sunt făcute în editorul de cod sau în Class Modeler. Facilitatea de inginerie-

inversă permite programatorilor să construiască modele din codul existent deja. Class

Modeler implementează un profil UML pentru BC4J ce oferă programatorilor un mediu

Pagina 58 din 207

Page 59: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

vizual de programare pentru definirea componentelor aplicaţiilor BC4J. Astfel de

componente includ obiecte-entitate, ce reprezintă obiectele persistente ale afacerii din

domeniul studiat.

Figura 3.5: Class Modeler (Diagrama de clase)

Activity Modeler este folosit pentru a modela procese de afaceri pentru integrarea în

aplicaţii e-business. Programatorii folosesc această facilitate pentru a vizualiza şi genera

integrarea între aplicaţiile e-business, fie că sunt într-un intranet al unei companii fie că ele

comunică prin Internet. Activity Modeler permite programatorilor să modeleze mersul

proceselor şi să capteze date semantice adiţionale ce definesc procesele executabile, rutarea şi

alinierea. Procesul este exprimat în termeni de activităţi, subsisteme (ce se ocupă de

activităţile din interiorul partiţiilor) şi rutare.

Modelarea în JDeveloper este completată de modelatorul Struts de ordonare a

paginilor şi de modelatorul de baze de date, folosit pentru generarea şi captura schemelor de

structură a bazei de date.

Depanarea codului este una din etapele esenţiale ale dezvoltării aplicaţiei, JDeveloper

incluzând un depanator (Debugger) rapid şi puternic ce oferă o metodă vizuală de a analiza

Pagina 59 din 207

Page 60: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

codul. Depanatorul integrat suportă depanarea “la cald”, ceea ce înseamnă că programatorul

poate aduce modificări codului sursă chiar în timpul sesiunii de depanare. Se pot seta puncte

de întrerupere (breakpoints) şi se poate avansa înainte sau înapoi către orice punct al codului

sursă în timpul depanării. Depanatorul mai include şi o vizualizare a stivei de memorie.

JDeveloper pune la dispoziţia dezvoltatorilor de aplicaţii bazate pe Swing un

depanator al interfeţei cu utilizatorul (UI Debugger). Prin crearea de instantanee şi afişarea

ierarhică a obiectelor într-o interfaţă grafică, depanatorul oferă o metodă facilă de

monitorizare a interfeţei cu utilizatorul în timpul execuţiei.

Depanatorul JDeveloper include deasemenea capacitatea de a depana codul PL/SQL

din baze de date.

Depanarea se poate face local sau la distanţă, fiind posibilă examinarea codului în

timp ce acesta este executat pe un container J2EE aflat la distanţă. Programatorii de aplicaţii

J2EE pot folosi containerul ce vine integrat în Oracle JDeveloper pentru a-şi putea testa codul

JSP sau Servlet fară a fi nevoie să instaleze un server de aplicaţii de sine-stătător.

Jdeveloper oferă numeroase şi puternice instrumente pentru îmbunătăţirea calităţii

codului Java prin identificarea potenţialelor zone cu probleme, cum ar fi probleme de

performanţă, folosirea inadecvată a memoriei sau blocaje.

Execution Sampling Profiler. Este folosit pentru a localiza problemele de performanţă

prin determinarea acelor metode din interiorul codului care folosesc timpii cei mai lungi de

execuţie. Profilatorul ia o mostră la intervale regulate de timp şi înregistrează locul unde se

află firul de execuţie la momentul înregistrării. Mostrele sunt apoi analizate şi afişate la

sfârşitul sesiunii de profilare. Programatorii pot interacţiona cu informaţiile din fereastra

profilatorului analizând în profunzime zonele unde se presupune că se găsesc probleme de

performanţă. De asemenea există informaţii despre felul în care sunt accesate metodele

precum şi frecvenţa accesărilor. Astfel, folosind acest instrument, este foarte uşoară

identificarea cu exactitate a locului unde aplicaţia pierde intervale semnificative de timp.

Următorul pas este îmbunătăţirea codului. Aici este locul lui CodeCoach.

CodeCoach. Este un instrument ce oferă consultanţă în ceea ce priveşte calitatea şi

performanţa programelor Java. După folosirea profilatorului pentru identificarea zonelor cu

probleme, utilizatorul poate rula CodeCoach pe acest cod pentru a primi indicaţii practice în

îmbunătăţirea calităţii codului. Instrumentul poate chiar să rezolve probleme simple în mod

automat.

Pagina 60 din 207

Page 61: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Memory Profiler. Este un instrument puternic pentru depistarea pierderilor de

memorie. Ca şi Execution Sampling Profiler, acesta ia mostre la intervale regulate de timp şi

rata utilizatorului cum şi unde este alocată şi eliberată memoria pe parcursul execuţiei

programului. Pentru probleme complexe de memorie, combinaţia dintre Memory Profiler şi

instrumentele de depanare, cum ar fi fereastra HEAP şi fereastra de clase încărcate, poate

identifica cu exactitate sursa pierderilor de memorie.

Event Profiler. Este un instrument ce se dovedeşte foarte folositor atunci când

aplicaţia este construită pe mai multe nivele. La un nivel mai ridicat decât Execution

Sampling Profiler, acest profilator depistează lungimea unor evenimente specifice, indiferent

unde sunt executate. Spre exemplu, o aplicaţie JSP poate cere informaţii unei componente

BC4J care la rândul ei trimite o interogare către baza de date. Event Profiler poate face cu

uşurinţă un rezumat al timpilor cheltuiţi în execuţia unei astfel de cereri şi felul în care se

compară cu alte evenimente ale aplicaţiei.

Code Audit. Ajută organizaţiile în implementarea unor standarde de codare prin

analizarea codului Java şi confruntarea aderării acestuia la standardele de codare impuse.

Code Audit ajută la găsirea şi repararea devierilor de la regulile impuse. Există posibilitatea

adăugării unor noi reguli de audit peste cele deja existente în JDeveloper.

Code Metrics. Oferă o metodă uşoară de a evalua complexitatea şi structura codului

Java, analizând parametri precum adâncimea arborelui de moştenire, numărul instrucţiunilor

sau complexitatea buclelor codului.

Implementarea aplicaţiilor J2EE este mult simplificată de noul Oracle JDeveloper

10g. Există o metodă declarativă de a crea descriptorul de implementare al aplicaţiei.

Împachetarea este făcută cu ajutorul unui Wizard care creează fişiere standard WAR, EAR

sau JAR din proiect. Aceste fişiere standard pot fi implementate apoi către orice server de

aplicaţii compatibil J2EE. Este posibilă implementarea printr-un sigur click din IDE într-un

container ce poate fi Oracle Application Server, Apache Tomcat, Jboss etc.

Pentru aplicaţiile bazate pe Swing, JDeveloper pune la dispoziţie un Wizard care

împachetează aplicaţia într-o aplicaţie Java Web-Start, simplificând astfel procesul de

implementare pe maşinile client.

Oracle JDeveloper este integrat cu instrumente software de configurare şi

management al ciclului de viaţă al codului, oferind astfel posibilitatea lucrului în echipă.

Versiunea standard de Oracle JDeveloper 10g este integrată cu Oracle SCM, CVS şi

Rational ClearCase, aceste facilităţi putând fi aplelate prin Wizard sau prin opţiunile

Pagina 61 din 207

Page 62: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

meniului. Programatorii pot adăuga sau şterge fişiere, controla istoricul versiunii, check-in,

check-out, bloca fişiere sau pot compara versiunile fişierelor.

Oracle JDeveloper oferă de asemenea şi suport WebDAV pentru sharing-ul fişierelor

pe protocolul HTTP.

JDeveloper ajută programatorii să construiască aplicaţii de afaceri şi comerţ electronic

utilizând Java, XML, HTML, SQL şi PL/SQL şi pune la dispoziţie diverse editoare şi

instrumente grafice pentru fiecare din aceste limbaje.

Oracle XML Developers Kit (XDK) este integrat în JDeveloper, oferind multiple

moduri de a manipula, crea şi transforma codul XML. Oracle JDeveloper are un nou editor de

XML asistat de scheme. O schemă XML defineşte structura unui document XML. O nouă

facilitate denumită Code Insight foloseşte schema XML pentru a valida codul XML şi oferă o

listă de alternative valide pentru atribute sau elemente XML pe măsură ce programatorul

tastează.

Alte facilităţi pentru lucrul cu XML se referă la colorarea sintaxei, verificarea

sintaxei, o vizualizare arborescentă a structurii şi manipularea prin intermediul Property

Inspector.

Oracle JDeveloper 10g oferă facilităţi extinse pentru managementul conexiunilor şi

vizualizarea elementelor componente ale unei baze de date, la toate acestea adăugându-se

suport îmbunătăţit pentru secvenţele PL/SQL şi un SQL Worksheet încorporat.

Managementul conexiunilor. Jdeveloper permite crearea de conexiuni reutilizabile,

menţinându-se detaliile unei conexiuni precum: utilizator, parolă, numărul portului,

calculatorul gazdă şi identificatorul bazei de date. Aceste conexiuni pot fi refolosite în diverse

stadii ale ciclului de dezvoltare atunci când:

Se vizualizează obiectele bazei de date

Se editează şi se compilează cod PL/SQL (proceduri, funcţii, pachete, declanşatoare,

etc.)

Se execută şi se modifică instrucţiuni SQL

Se accesează date dintr-o aplicaţie BC4J, JSP, DAC şi/sau XSQL

Se implementează cod Java în server

Vizualizarea obiectelor bazei de date. Conexiunile din Connection Navigator oferă o

vizualizare schematică a mai multor obiecte din baza de date:

Tabele şi tabele virtuale

Secvenţe

Sinonime

Pagina 62 din 207

Page 63: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Cod PL/SQL şi clase Java implementate

Obiecte Oracle

JDeveloper permite vizualizarea acestor tipuri de obiecte, inclusiv detalii despre

obiectul selectat (figura 3.6).

Figura 3.6: Vizualizarea obiectelor bazei de date

Editorul de cod PL/SQL. Editorul de cod din JDeveloper 10g permite programatorului

să editeze obiecte PL/SQL precum proceduri, funcţii şi pachete, fiind ajutat de facilităţi

precum colorarea sintaxei şi capacitatea de a rula sau depana aceste secvenţe direct din

JDeveloper. Editorul PL/SQL permite lucrul direct asupra codului sursă din baza de date.

Pentru a compila codul sursă PL/SQL, JDeveloper trimite noul cod sursă către baza de date şi

lasă serverul să se ocupe de compilare. Când apar eventuale erori, acestea sunt afişate în

JDeveloper.

SQL Worksheet. Incepând cu versiunea 10g, editorul de SQL este înlocuit de un SQL

Worksheet încorporat. În afara afişării rezultatelor execuţiei unei secvenţe de comenzi SQL,

editorul SQL poate afişa şi planul de execuţie al secvenţei, ajutând astfel la optimizarea

accesului la baza de date.

Pagina 63 din 207

Page 64: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Capitolul 4

PROIECTAREA ŞI REALIZAREA UNUI SISTEM OLAP PENTRU S.C.

INPRODCOM S.R.L.

4.1. STUDIUL ŞI ANALIZA PROCESULUI DECIZIONAL CURENT ŞI A

CERINŢELOR INFORMAŢIONALE

4.1.1. Studiul şi analiza procesului decizional curent

Din datele prezentate în capitolul 1, reiese clar că la data analizei 95% din cifra de

afaceri a SC INPRODCOM SRL DEVA o reprezintă veniturile realizate din vânzarea

băuturilor calde prin intermediul automatelor de băuturi.

Este de la sine înţeles ca în aceste condiţii, conducerea societăţii să fie interesată să

cunoască în orice moment evoluţia acestor vânzări, costurile aferente, rentabilitatea fiecărui

aparat şi implicit rentabilitatea unui contract încheiat cu un beneficiar, modul de încasare a

băuturilor calde, comportamentul fiecărui agent faţă de client, faţă de păstrarea şi întreţinerea

în bune condiţii a aparatelor şi a integrităţii gestiunii de ingrediente.

Societatea începe să desfăşoare această activitate, cod CAEN 5263 „Comerţ cu

amănuntul care nu se efectuează prin magazin” în luna februarie a anului 2002.

Anterior acestei date, societatea SC INPRODCOM SRL DEVA a fost selecţionată de

catre SC ELITE ROMÂNIA SA ca unic distribuitor pentru acest tip de activitate, alegere care

s-a făcut dintr-un număr destul de mare de societăţi.

Alegerea SC ELITE SA s-a bazat în principal pe următoarele:

experienţa de peste zece ani în comerţul en-gros şi cu amănuntul a SC INPRODCOM

SRL

cunoaşterea pieţei de desfacere pe raza judeţului Hunedoara

spaţii de depozitare mari

parcul auto bine dezvoltat

recomandările primite de SC INPRODCOM SRL din partea unor bănci şi instituţii ale

statului (Registrul Comerţului, Direcţia Generală a Finanţelor Publice Hunedoara etc.)

Pagina 64 din 207

Page 65: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Între cele două societăţi s-a încheiat un contract comercial care stipulează pe scurt

următoarele:

SC ELITE SA are următoarele obligaţii:

vinde cu plata în rate, lunar, într-o perioadă de cinci ani, în baza comenzii lansate de

SC INPRODCOM, automatele de băuturi calde;

vinde cu plata la treizeci de zile, în baza comenzilor lansate de SC INPRODCOM,

ingredientele (zahăr, cafea, ceai etc.) necesare producerii băuturilor calde;

pune la dispoziţia SC INPRODCOM , în baza comenzilor lansate contra cost, piesele

de schimb necesare reparaţiei şi întreţinerii automatelor de băuturi calde;

acordă asistenţă tehnică în instruirea personalului, cercetarea pieţei etc;

stabileşte că SC INPRODCOM este unic distribuitor pentru comercializarea

băuturilor calde pe raza judeţelor Hunedoara, Timiş, Arad, Oradea, Caraş Severin, iar printr-

un act adiţional încheiat la contractul semnat, începând cu aprilie 2004 şi judeţul Mehedinţi.

SC INPRODCOM SRL are următoarele obligaţii:

să achite contravaloarea automatelor de băuturi calde la termenele scadente (lunar),

într-o perioadă de cinci ani;

să achite contravaloarea ingredientelor în termen de treizeci de zile;

să organizeze reţeaua de distribuţie în judeţele nominalizate, în condiţii de maximă

rentabilitate, asigurând cu resurse proprii spaţii pentru birouri, spaţii de depozitare, parc auto

şi personal operativ;

să emită o scrisoare de garanţie bancară în favoarea SC ELITE SA în valoare de un

miliard lei, garanţie pentru automatele de băuturi calde care se plătesc eşalonat;

să se preocupe constant de creşterea vânzărilor de băuturi calde asfel încât volumul

tranzacţiilor cu ingrediente să aibă un trend ascendent;

să raporteze periodic volumul vânzărilor (cantitativ şi valoric), performanţele din

fiecare judeţ etc.

În figura 4.1 se prezintă structura organizatorică a activităţii analizate şi factorii

implicaţi:

Pagina 65 din 207

Page 66: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.1: Structura organizatorică a activităţii de comercializare a băuturilor calde

O descriere succintă a modului în care se desfăşoară practic activitatea, o considerăm

utilă în vederea evidenţierii factorilor implicaţi (automate de cafea, agenţi, beneficiari etc).

În urma încheierii unui contract, în vederea comercializării băuturilor calde, la sediul

unui BENEFICIAR (societate comercială, instituţie publică, bancă, şcoală etc.) este instalat

un AUTOMAT DE BĂUTURI CALDE care va fi gestionat de un AGENT.

AUTOMATUL DE BĂUTURI CALDE este un echipament tehnic care produce în

mod automat maximum cincisprezece tipuri de băuturi calde (REŢETE):

cafea scurtă

cafea lungă

cafea cu lapte

cappucino

ciocolată caldă

cappucino cu ciocolată

cafea cu ciocolată

ceai

lapte

Pagina 66 din 207

Page 67: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cappucino french vanilla

cafea ness

ness cu lapte

cappucino cu ness

ciocolată cu lapte

ciocolată cu lapte şi ness,

consumând pe bază de reţete ingredientele depozitate.

Aparatul are în dotare CONTOARE , care afişează numărul băuturilor produse. Există

două tipuri de CONTOARE:

- CONTORGENERAL: instrument ce măsoară şi afişează numărul total de REŢETE

produse indiferent de tipul lor.

- CONTORPARŢIAL: instrument ce măsoară şi afişează numărul total de REŢETE

de un anumit tip (exemplu: contor parţial pentru cafea, contor parţial pentru ceai, contor

parţial pentru cappucino etc)

CONTORGENERAL este foarte important deoarece indică nivelul vânzărilor şi

implicit banii ce trebuie ridicaţi din APARAT.

În dotarea SC INPRODCOM SRL există mai multe TIPURI de automate de cafea:

model BRIO în două variante: BRIO 200 şi BRIO 250

model COLIBRI

model FUTUREMA

model KIKKO

model RHEA în două variante: RHEA XL şi RHEA XM

model SAECO

model SPAZIO.

Ultimul factor implicat în activitate este AGENTUL, care este o persoană angajată cu

contract de muncă, ce gestionează o parte din BENEFICIARI.

În esenţă un AGENT trebuie să studieze piaţa, să gasească noi BENEFICIARI, să

întreţină periodic AUTOMATELE de care răspunde, dar în primul rând să raporteze, pe baza

CONTOARELOR, numărul de băuturi consumate şi să încaseze banii din APARATE de la

BENEFICIARI. Toate aceste informaţii sunt consemnate zilnic în „Raport de gestiune

aparate”. Conţinutul acestui document îl putem grupa în:

Pagina 67 din 207

Page 68: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

date generale:

număr matricol APARAT

locaţia aparatului (BENEFICIARULUI)

luna raportului

tipul APARATULUI (BRIO, COLIBRI etc.)

contor general la începutul lunii

contor general la sfârşit de lună.

date aferente fiecărei vizite la BENEFICIAR:

data vizitei

număr porţii încasate

preţul din contract

valoarea încasată

valoarea contorului general

număr de porţii pe tipuri de băutura (cafea lungă, cafea scurtă etc.)

4.1.2. Stabilirea cerinţelor informaţionale

Societatea doreşte analiza următorilor indicatori:

productivitatea unui AUTOMAT identificat prin MATRICOL:

numărul total de băuturi calde comercializate

productivitatea fiecărui tip de automat:

numărul total de băuturi calde comercializate, într-o lună sau an

pentru fiecare AGENT:

numărul total de BENEFICIARI deserviţi de fiecare agent, într-o lună sau an

numărul de băuturi calde comercializate, pe total şi pe tipuri, într-o lună sau an

pentru fiecare ORAŞ sau ZONĂ:

numărul de băuturi calde consumate pe total şi pe tipuri într-o lună sau an

Pagina 68 din 207

Page 69: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

topul BENEFICIARILOR pe baza numărului de băuturi calde comercializate, într-o

lună sau an

topul AGENŢILOR pe baza numărului de băuturi calde comercializate, într-o lună

sau an

pentru total societate:

număr de băuturi calde consumate pe total şi pe tipuri într-o lună sau an

valoarea băuturilor comercializate

preţul mediu

topul BENEFICIARILOR pe baza numărului total de băuturi calde comercializate,

într-o lună sau an

topul AGENŢILOR pe baza numărului total de băuturi calde comercializate, într-o

lună sau an

topul AGENŢILOR pe baza numărului de beneficiari deserviţi, într-o lună sau an

4.2. PROIECTAREA MODELULUI MULTIDIMENSIONAL CONCEPTUAL

4.2.1. Identificarea variabilelor

În urma studiului cerinţelor informaţionale ale societăţii, se identifică următoarele

variabile:

număr de beneficiari (nr_benef): semiaditivă;

număr de băuturi calde comercializate (cant_vândută): aditivă;

preţ mediu jeton (preţ_jet): neaditivă;

Pentru fiecare variabilă se vor stabili factorii de care depinde sau în funcţie de care

variază (dimensiunile cubului) şi anume:

variabila număr de beneficiari (nr_benef) are ca dimensiuni: Timp, Agent.

variabila număr de băuturi calde comercializate (cant_vândută), are ca dimensiuni:

Timp, Aparat, Agent, Beneficiar, Tipbăutură.

Pagina 69 din 207

Page 70: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

variabila preţ mediu jeton (pret_jet) are ca dimensiuni: Timp, Beneficiar.

Tipuri de analize:

numărul total de băuturi calde comercializate de un APARAT pe lună şi pe an, prin

agregare după TIMP;

număr total de băuturi calde comercializate, detaliat pe tipuri de automate pe lună şi

pe an, prin agregare după TIMP;

număr total de băuturi calde comercializate, detaliat pe tipuri de automate, pentru o

anumită locaţie geografică, pe lună şi pe an, prin agregare după TIMP;

număr total de băuturi calde comercializate de fiecare agent, pe lună şi pe an, prin

agregare după TIMP;

număr total de băuturi calde comercializate, detaliat pe tipuri de băuturi, pentru

fiecare locaţie geografică în parte, pe lună şi pe an, prin agregare după TIMP;

numărul total de beneficiari deserviti de un AGENT pe luna şi pe an, prin agregare

după TIMP;

Topul clienţilor, în funcţie de numărul total de băuturi comercializate, pe an şi lună;

Topul agenţilor, în funcţie de numărul total de băuturi comercializate, pe total firmă,

pe an şi lună;

Topul agenţilor, in funcţie de numărul total de beneficiari deserviţi;

valoarea băuturilor comercializate, pe total, pe lună şi pe an, prin agregare după

TIMP;

4.2.2. Identificarea dimensiunilor şi ierarhiilor

Se identifică urmatoarele dimensiuni ierarhice:

Dimensiunea AGENT are o structură ierarhică, cu nivelulurile: L1=Ţară (Ţara în care

activează agentul respectiv), L2=Judeţ (Judeţul în care activează agentul respectiv),

L3=Agent.

Pagina 70 din 207

Page 71: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Dimensiunea APARAT are o structură ierahică, cu nivelurile: L1=Categ (toate

aparatele), L2=Tip (tipuri aparate), L3=Matricol, L4=Ben (beneficiar), L5=Locaţie (oraş),

L6=Judeţ, L7=Ţară şi patru ierarhii: DUPA_BENEFICIAR (cu nivelurile L7, L6, L4, L3),

DUPĂ_JUDEŢ (cu nivelurile L7, L6, L3), DUPĂ_LOCAŢIE (cu nivelurile L7, L6, L5, L3)

şi STANDARD (L1, L2, L3).

Dimensiunea BENEFICIAR are o structură ierahică, cu nivelurile: L1=Top (toţi

beneficiarii), L2=Judeţ, L3=Locaţie (oraş), L4=Ben (beneficiar) şi două ierarhii: PE_JUDEŢ

(cu nivelurile L1, L2, L4) şi STANDARD (L1, L2, L3, L4).

Dimensiunea TIMP are o structură ierahică, cu nivelurile: An, Trim (trimestru), Lună.

Dimensiunea TIPBAUTURĂ are o structură ierahică, cu nivelurile: L1=Categ (toate

tipurile de băuturi calde), L2=Băutură (denumirile băuturilor calde).

4.2.3. Definirea cuburilor n-dimensionale sau a structurii multicub

Pentru a reduce fenomenul de împrăştiere s-a ales o structură multicub cu trei cuburi

n-dimensionale şi anume:

Cubul n-dimensional cu dimensiunile: Agent, Beneficiar, Tipbăutură, Aparat, Timp şi

variabila băuturi calde comercializate (cant_vândută).

Cubul n-dimensional cu dimensiunile: Agent, Timp şi variabila: număr de beneficiari

(nr_benef).

Cubul n-dimensional cu dimensiunile: Beneficiar, Timp şi variabila: preţ mediu al

unui jeton (preţ_jet).

Structura multicub are o singură dimensiune globală: Timp.

Pagina 71 din 207

Page 72: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

4.2.4. Rafinarea modelului multidimensional

O componentă cheie a modelării multidimensionale este definirea formulelor, şi în

special al formulelor de agregare:

valoare băuturi calde comercializate (valoare) = cant_vândută * preţ_jet (preţul

mediu).

De asemenea, se vor realiza agregări după toate dimensiunile existente. Pentru fiecare

dimensiune se stabilesc nivelurile de granulaţie şi anume:

Dimeniunea Agent are nivelul de granulaţie: agent.

Dimeniunea Aparat are nivelul de granulaţie: matricol (matricolul automatului de

cafea).

Dimeniunea Beneficiar are nivelul de granulaţie: ben (beneficiar).

Dimeniunea Timp are nivelul de granulaţie: lună.

Dimeniunea Tipbăutură are nivelul de granulaţie: băutură.

Pentru fiecare variabilă din cuburile n-dimensionale se stabileşte metoda de agregare

a fiecărei dimensiuni din cub, după cum urmează:

Variabila cant_vândută este agregată după dimensiunile AGENT, APARAT,

BENEFICIAR, TIMP şi TIPBĂUTURĂ prin metoda SUM (sumă).

Variabila nr_benef este agregată după dimensiunile AGENT şi TIMP prin metoda

SUM (sumă).

Variabila preţ_jet este agregată după dimensiunile BENEFICIAR şi TIMP prin

metoda AVG (medie).

Pagina 72 din 207

Page 73: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

4.3. PROIECTAREA LOGICĂ

S-au identificat următorele tabele de fapte:

Tabela de fapte FAPTE1 (TIMP_LEAVES, APARAT_LEAVES,

BAUTURĂ_LEAVES, BENEFICIAR_LEAVES, AGENT_LEAVES: varchar2(30),

CANT_VÂNDUTĂ: number(20), PREŢ_JET: number(20)) cu tabelele de dimensiuni Timp

(AN: varchar2(30), TRIM: varchar2(30), LUNĂ: varchar2(30)), Aparat (L1=CATEG:

varchar2(30), L2=TIP: varchar2(30), L3=MATRICOL: varchar2(30), L4=BEN:

varchar2(30), L5=LOCAŢIE: varchar2(30), L6=JUDEŢ: varchar2(30), L7=ŢARĂ:

varchar2(30)), Tipbăutură (L1=CATEG: varchar2(30), L2=BĂUTURĂ: varchar2(30)),

Beneficiar (L1=TOP: varchar2(30), L2=JUDEŢ: varchar2(30), L3=LOCAŢIE: varchar2(30),

L4=BEN: varchar2(30)), Agent (L1=ŢARĂ: varchar2(30), L2=JUDEŢ: varchar2(30),

L3=AGENT: varchar2(30));

Tabela de fapte FAPTE2 (TIMP_LEAVES, AGENT_LEAVES: varchar2(30),

NR_BENEF: number(20)) cu tabelele de dimensiuni Timp (AN: varchar2(30), TRIM:

varchar2(30), LUNĂ: varchar2(30)), Agent (L1=ŢARĂ: varchar2(30), L2=JUDEŢ:

varchar2(30), L3=AGENT: varchar2(30)).

Tabela de fapte FAPTE3 (TIMP_LEAVES, BENEFICIAR_LEAVES: varchar2(30),

PREŢ_JET: number(10)) cu tabelele de dimensiuni Timp (AN: varchar2(30), TRIM:

varchar2(30), LUNĂ: varchar2(30)), Beneficiar (L1=TOP: varchar2(30), L2=JUDEŢ:

varchar2(30), L3=LOCAŢIE: varchar2(30), L4=BEN: varchar2(30)).

4.4. PROIECTAREA FIZICĂ

Pentru stabilirea aproximativă a dimensiunii bazei de date relaţionale se utilizează

modul de calcul propus de Ralph Kimball, mod ce se bazează pe câteva premise. Considerăm

Pagina 73 din 207

Page 74: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

că fiecare atribut are maxim 4Bytes. De asemenea considerăm că pentru tabelele de fapte ce

au un număr mic de atribute, dimensiunea indexului principal creat de cheia compusă este de

60-80% din tabela de fapte. Tabelele de dimensiuni şi indecşii asociaţi vor fi foarte mici în

comparaţie cu tabela de fapte şi indexul asociat.

În cazul nostru s-au folosit nivelurile de granulaţie stabilite anterior, iar dimensiunea

bazei de date relaţionale s-a calculat aproximativ astfel:

Dimensiunea AGENT: 31 de agenţi

Dimensiunea APARAT: 412 matricole

Dimensiunea BENEFICIAR: 546 beneficiari

Dimensiunea TIMP: 21 luni (din mai 2003 până în ianuarie 2005)

Dimensiunea TIPBĂUTURĂ: 15 tipuri de băuturi

Numărul de înregistrări din tabela de fapte FAPTE1 = 32721. Teoretic ar fi trebuit

introduse chiar şi liniile care agregate nu dau nici un rezultat, cum ar fi cuplarea unui agent ce

acţionează în judeţul Hunedoara cu un beneficiar din Timiş. Asta ar fi dus la un număr uriaş

de înregistrări, adică 31*412*546*21*15 = 2196656280. De aceea sunt introduse numai

cuplările coerente.

Numărul de atribute cheie pentru tabela de fapte FAPTE1: 5

Numărul de atribute din tabela de fapte FAPTE1: 1

Numărul total de atribute din tabela de fapte FAPTE1: 6

Dimensiunea tabelei de fapte FAPTE1 = 32721 * 6 atribute * 4Bytes/atribut =

785304Bytes.

Dimensiunea indexului principal pe cheia compusă a tabelei = 80% * 785304Bytes =

628243.2 Bytes.

Numărul de înregistrări din tabela de fapte FAPTE2 = 314. Din nou, sunt introduse

numai cuplările coerente, unii agenţi activând de-abia din anul 2004.

Numărul de atribute cheie pentru tabela de fapte FAPTE2: 2

Numărul de atribute din tabela de fapte FAPTE2: 1

Numărul total de atribute din tabela de fapte FAPTE2: 3

Dimensiunea tabelei de fapte FAPTE2 = 314 * 3 atribute * 4Bytes/atribut =

3768Bytes.

Pagina 74 din 207

Page 75: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Dimensiunea indexului principal pe cheia compusă a tabelei = 80% * 3768Bytes =

3014.4 Bytes.

Numărul de înregistrări din tabela de fapte FAPTE3 = 3914. Din nou, sunt introduse

numai cuplările coerente.

Numărul de atribute cheie pentru tabela de fapte FAPTE3: 2

Numărul de atribute din tabela de fapte FAPTE3: 1

Numărul total de atribute din tabela de fapte FAPTE3: 3

Dimensiunea tabelei de fapte FAPTE3 = 3914 * 3 atribute * 4Bytes/atribut =

46968Bytes.

Dimensiunea indexului principal pe cheia compusă a tabelei = 80% * 46968Bytes =

37574.4 Bytes.

Dimensiunea totală este deci de: 785304 + 628243.2 + 3768 + 3014.4 + 46968 +

37574.4 = 1504872Bytes, adica aproximativ 1469Kbytes ~ 1.5 MB.

4.5. CONSTRUIREA SISTEMULUI OLAP

Pentru realizarea sistemului OLAP s-a utilizat SGBD Oracle 9i:

1. S-a instalat Oracle 9i Release 2 (9.2.0.1) Enterprise Edition cu opţiunea de bază de

date iniţială de tip “General purpose” (sau cu “Data warehouse”) în directorul OraHome92.

La finele instalării s-a apăsat butonul: ”Password management” pentru a modifica parolele

pentru: SYS, SYSTEM, OLAPSYS, SH (de exemplu: pentru fiecare cont în parte am ales

parola “florea”) şi pentru a debloca (UNLOCK) ultimele două conturi mentţionate. Aceste

parole au fost notate pentru a fi folosite ulterior.

2. S-a descărcat patch set-ul 9.2.0.6: p3948480_9206_WINNT.zip de pe Metalink

(metalink.oracle.com) (pentru acest pas este necesară introducerea unui cont valid - utilizator,

parolă - pe Metalink).

Pagina 75 din 207

Page 76: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

3. Pentru instalarea patch set-ului se opresc toate instanţele bazei de date Oracle 9i cu

prioritate normală sau imediată.

De asemenea, se opresc Listener-ul şi toate celelalte servicii ce rulează în directorul

ORACLE HOME (OraHome92) unde se va instala patch set-ul. Pe o platformă Windows se

va deshide Control Panel/Administrative Tools/Services şi se vor opri toate serviciile ce incep

cu “OraHome92”.

4. Se dezarhivează conţinutul patch-ului într-un director temporar.

5. Se lansează în execuţie setup.exe din directorul temporar. Acesta va porni Oracle

Universal Installer 10.1.0.3.

6. Se instalează patch set-ul în ORACLE HOME selectând sursa: fişierul temp_dir\

stage\products.jar

7. După instalarea patch set-ului:

a). Dacă Jserver este instalat se modifică dimensiunea spaţiului tabel SYSTEM

(minim 10MB spaţiu liber) utilizând instrumentul Oracle Enterprise Manager (Storage—

Tablespaces—SYSTEM) (figura 4.2).

Pagina 76 din 207

Page 77: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.2: Spaţiul tabel SYSTEM

b). Se verifică spaţiul tabel XDB. Trebuie să fie cel puţin 50MB spaţiu liber. Se

modifică acest spaţiu în acelaşi mod ca şi pentru spaţiul tabel SYSTEM (figura 4.3).

Pagina 77 din 207

Page 78: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.3: Spaţiul tabel XDB

c). Se modifică parametrii: SHARED_POOL_SIZE şi JAVA_POOL_SIZE din

fişierul de parametri ai bazei de date:

Se porneşte baza de date:

SQL> STARTUP

Dacă este necesar, se introduc următoarele comenzi pentru a determina dacă sistemul

foloseşte un fişier cu parametrii de iniţializare (initsid.ora) sau un fişier cu parametrii server-

ului (spfiledbname.ora):

SQL> SHOW PARAMETER PFILE;

Această comandă afişează numele şi locaţia fişierului cu parametrii server-ului sau

numele şi locaţia fişierului cu parametrii de iniţializare.

Se determină valorile curente ale acestor parametri:

SQL> SHOW PARAMETER SHARED_POOL_SIZE;

SQL> SHOW PARAMETER JAVA_POOL_SIZE;

Pagina 78 din 207

Page 79: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Dacă sistemul foloseşte un fişier cu parametrii serverului:

Dacă este necesar, se setează valoarea parametrului de iniţializare

SHARED_POOL_SIZE (la cel puţin 150MB):

SQL> ALTER SYSTEM SET SHARED_POOL_SIZE='150M' SCOPE=spfile;

Dacă este necesar, se setează valoarea parametrului de iniţializare

JAVA_POOL_SIZE (la cel puţin 150MB):

SQL> ALTER SYSTEM SET JAVA_POOL_SIZE='150M' SCOPE=spfile;

Dacă sistemul foloseşte un fişier cu parametrii de iniţializare, dacă este necesar, se vor

schimba valorile parametrilor SHARED_POOL_SIZE şi JAVA_POOL_SIZE (la cel puţin

150MB) în fişierul initsid.ora.

Se opreşte baza de date:

SQL> SHUTDOWN

d). După instalarea patch set-ului:

Utilizatorul membru al grupului administratorilor pe server-ul de baze de date va

parcurge următorii paşi:

Se va folosi SQL*Plus pentru conectarea la baza de date, iar conectarea se va face cu

utilizatorul SYS cu rol de SYSDBA:

sqlplus /NOLOG

CONNECT SYS/password AS SYSDBA

Se vor executa următoarele comenzi SQL*Plus:

SQL> STARTUP MIGRATE

SQL> SPOOL patch.log

SQL> @ORACLE_BASE\ORACLE_HOME\rdbms\admin\catpatch.sql

SQL> SPOOL OFF

Se reporneşte baza de date:

SQL> SHUTDOWN

SQL> STARTUP

Pagina 79 din 207

Page 80: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Se execută script-ul utlrp.sql pentru a recompila toate pachetele PL/SQL ce sunt

invalide. Acest pas este opţional, dar recomandat.

SQL> @ORACLE_BASE\ORACLE_HOME\rdbms\admin\utlrp.sql

8. Se instalează JDeveloper 10g 10.1.2 (se descarcă de pe OTN: www.oracle.com –

Technologies şi se dezarhivează într-un director, spre exemplu Jdev10. Nu este necesar ca

acesta să fie un ORACLE HOME).

9. Se instalează BI Beans 10.1.2 (se descarcă de pe OTN: www.oracle.com –

Technologies şi se dezarhivează în directorul Jdev10, scriind peste fişierele existente atunci

cand este cazul).

10. Se instalează schema BIBDEMO:

Se crează un director pe calculatorul pe care se află baza de date Oracle. Acest

director de instalare este locaţia unde se vor regăsi fişierele necesare pentru construirea

schemei BIBDEMO.

Se lansează în execuţie bibdemo.bat din fereastra Command Prompt, folosind

următoarea sintaxă:

bibdemo.bat <calea către fişierele bazei de date Oracle>

De exemplu:

bibdemo.bat e:\OraHome92\oradata\proiect

Trebuie introdusă acum parola pentru utilizatorul SYS ca SYSDBA.

Execuţia acestui program durează aproximativ 15-20 minute. Este normal ca acesta să

se oprească din când în când.

Apoi, se poate verifica conexiunea la OLAP:

bi_checkconfig.bat -h ana -po 1521 -sid proiect -u bibdemo -p bibdemo -q

returnează:

E:\JDev10\bibeans\bi_checkconfig>bi_checkconfig.bat -h ana -po 1521 -sid proiect

-u bibdemo -p bibdemo -q

Pagina 80 din 207

Page 81: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

BI Beans Diagnostics(v1.0.2.0) 4/7/05

=============================================================

==================

JDEV_ORACLE_HOME .......................... = e:\jdev10

JAVA_HOME ................................. = e:\jdev10\jdk

JDeveloper version ........................ = 10.1.2.0.0.1811

BI Beans release description .............. = BI Beans 10.1.2 Production Release

BI Beans component number ................. = 10.1.2.52.0

BI Beans internal version ................. = 3.2.1.0.13

Connect to database ....................... = Successful

JDBC driver version ....................... = 10.1.0.3.0

JDBC JAR file location .................... = E:\JDev10\jdbc\lib

Database version .......................... = 9.2.0.6.0

OLAP Catalog version ...................... = 9.2.0.6.0

OLAP AW Engine version .................... = 9.2.0.6.0

OLAP API Server version ................... = 9.2.0.6.0

BI Beans Catalog version .................. = N/A; not installed in bibdemo

OLAP API JAR file version ................. = "10.1.0.3.0"

OLAP API JAR file location ................ = e:\jdev10\jdev\lib\ext

Load OLAP API metadata .................... = Successful

Number of metadata folders ................ = 3

Number of metadata measures ............... = 16

Number of metadata dimensions ............. = 13

Testing sample query for measures and dimensions

(S=Schema, C=Cube, M=Measure, D=Dimension)

------------------------------------------------

1/35) Measure PRET JET ................. = Successful

S=ANA, C=CUB1, M=PRET_JET

2/35) Dimension AGENT .................. = Successful

S=ANA, D=AGENT

3/35) Dimension BENEFICIAR ............. = Successful

Pagina 81 din 207

Page 82: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

S=ANA, D=BENEFICIAR

4/35) Dimension TIMP ................... = Successful

S=ANA, D=TIMP

5/35) Dimension APARAT ................. = Successful

S=ANA, D=APARAT

6/35) Dimension TIPBAUTURA ............. = Successful

S=ANA, D=TIPBAUTURA

7/35) Measure CANT VANDUTA ............. = Successful

S=ANA, C=CUB1, M=CANT_VANDUTA

8/35) Measure NR BENEF ................. = Successful

S=ANA, C=CUB2, M=NR_BENEF

9/35) Measure PRET JET ................. = Successful

S=ANA, C=CUB3, M=PRET_JET

10/35) Dimension AGENT .................. = Successful

S=ANA, D=AGENT

11/35) Dimension APARAT ................. = Successful

S=ANA, D=APARAT

12/35) Dimension BENEFICIAR ............. = Successful

S=ANA, D=BENEFICIAR

13/35) Dimension TIMP ................... = Successful

S=ANA, D=TIMP

14/35) Dimension TIPBAUTURA ............. = Successful

S=ANA, D=TIPBAUTURA

15/35) Measure Budget ................... = Successful

S=BIBDEMO, C=BIBDEMO_BUDGET_CUBE, M=BUDGET

16/35) Measure Actual ................... = Successful

S=BIBDEMO, C=BIBDEMO_ACTUAL_CUBE, M=ACTUAL

17/35) Measure Close Price .............. = Successful

S=BIBDEMO, C=BIBDEMO_STKPRICE_CUBE, M=STKPRICE_CLOSE

18/35) Measure Stock Volume ............. = Successful

S=BIBDEMO, C=BIBDEMO_STKPRICE_CUBE, M=STKPRICE_VOLUME

19/35) Measure Open Price ............... = Successful

S=BIBDEMO, C=BIBDEMO_STKPRICE_CUBE, M=STKPRICE_OPEN

20/35) Measure High Price ............... = Successful

Pagina 82 din 207

Page 83: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

S=BIBDEMO, C=BIBDEMO_STKPRICE_CUBE, M=STKPRICE_HIGH

21/35) Measure Low Price ................ = Successful

S=BIBDEMO, C=BIBDEMO_STKPRICE_CUBE, M=STKPRICE_LOW

22/35) Dimension Division ............... = Successful

S=BIBDEMO, D=DIVISION

23/35) Dimension Line Items ............. = Successful

S=BIBDEMO, D=LINE

24/35) Dimension Time ................... = Successful

S=BIBDEMO, D=TIME

25/35) Dimension Day .................... = Successful

S=BIBDEMO, D=DAY

26/35) Dimension Stock .................. = Successful

S=BIBDEMO, D=STOCK

27/35) Measure Costs .................... = Successful

S=BIBDEMO, C=ANALYTIC_CUBE, M=F.COSTS

28/35) Measure Promotion ................ = Successful

S=BIBDEMO, C=ANALYTIC_CUBE, M=F.PROMO

29/35) Measure Quota .................... = Successful

S=BIBDEMO, C=ANALYTIC_CUBE, M=F.QUOTA

30/35) Measure Units .................... = Successful

S=BIBDEMO, C=ANALYTIC_CUBE, M=F.UNITS

31/35) Measure Sales .................... = Successful

S=BIBDEMO, C=ANALYTIC_CUBE, M=F.SALES

32/35) Dimension Channel ................ = Successful

S=BIBDEMO, D=CHANNEL

33/35) Dimension Geography .............. = Successful

S=BIBDEMO, D=GEOGRAPHY

34/35) Dimension Product ................ = Successful

S=BIBDEMO, D=PRODUCT

35/35) Dimension Time ................... = Successful

S=BIBDEMO, D=TIME

Metadata output location .................. = E:\JDev10\bibeans\bi_checkconfig\b

i_metadata.txt

Pagina 83 din 207

Page 84: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

De asemenea, se poate testa conexiunea la OLAP cu schema demo BIBDEMO din

JDeveloper, în felul următor:

Se selectează opţiunea JDeveloper / New Workspace

Se selectează opţiunea Project1 / New... / Business Inteligence / Designer

Se selectează BI Designer Wizard şi la: Step 2 of 4: OLAP Data Source: se face o

nouă conexiune OLAP. Apoi se parcurg următorii paşi:

Pas 1 (figura 4.4):

Figura 4.4: Crearea unei conexiuni OLAP – Pas 1

Pas 2 (figura 4.5):

Pagina 84 din 207

Page 85: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.5: Crearea unei conexiuni OLAP – Pas 2

Pas 3 (figura 4.6):

Pagina 85 din 207

Page 86: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.6: Crearea unei conexiuni OLAP – Pas 3

Pas 4 (figura 4.7):

Pagina 86 din 207

Page 87: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.7: Crearea unei conexiuni OLAP – Pas 4

Pas 5 (figura 4.8):

Figura 4.8: Crearea unei conexiuni OLAP – Pas 5

Apoi:

1). S-au creat două spaţii tabel şi anume: un spaţiu tabel de tip permanent: ANA

(figura 4.9), de dimensiune 200MB; şi un spaţiu tabel de tip temporar: ANATEMP (figura

4.10), de dimensiune 50MB.

Pagina 87 din 207

Page 88: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.9: Spaţiul tabel ANA

Figura 4.10: Spaţiul tabel ANATEMP

Pagina 88 din 207

Page 89: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

2). S-a creat un nou utilizator: ANA (figura 4.11), utilizând opţiunea Create like...

asupra utilizatorului BIBDEMO. Rolurile acestuia se pot observa în figura 4.12.

Figura 4.11: Utilizatorul ANA

Figura 4.12: Rolurile utilizatorului ANA

Pagina 89 din 207

Page 90: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

3). Sistemul OLAP va utiliza ca surse de date următoarele tabele:

a). Tabela AGENT (figura 4.13):

Figura 4.13: Tabela AGENT

Codul SQL pentru crearea tabelei AGENT:

CREATE TABLE "ANA"."AGENT" ("AGENT" VARCHAR2(30) NOT NULL,

"AGENT_LLABEL"

VARCHAR2(30) NOT NULL, "AGENT_SLABEL"

VARCHAR2(30) NOT NULL, "JUDET" VARCHAR2(30) NOT NULL,

"JUDET_LLABEL"

VARCHAR2(30) NOT NULL, "JUDET_SLABEL"

VARCHAR2(30) NOT NULL, "TARA" VARCHAR2(30) NOT NULL,

"TARA_LLABEL"

VARCHAR2(30) NOT NULL, "TARA_SLABEL"

VARCHAR2(30) NOT NULL, "TELEFONAG" VARCHAR2(10) NOT NULL,

"TIPCONTACT" VARCHAR2(30) NOT NULL, PRIMARY KEY("AGENT"))

Pagina 90 din 207

Page 91: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

TABLESPACE "ANA";

create sequence seq_agent

start with 1

increment by 1

nomaxvalue;

create or replace TRIGGER trig_agent

before insert on agent

for each row

begin

select CONCAT('AG',LPAD(seq_agent.nextval,3,'0')),CONCAT('AGENT

',LPAD(seq_agent.nextval,3,'0')) into :new.agent, :new.agent_slabel from dual;

end;

/

b). Tabela TIPBĂUTURĂ (figura 4.14):

Figura 4.14: Tabela TIPBĂUTURĂ

Pagina 91 din 207

Page 92: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Codul SQL pentru crearea tabelei TIPBĂUTURĂ:

CREATE TABLE "ANA"."TIPBAUTURA" ("BAUTURA" VARCHAR2(30) NOT

NULL,

"BAUTURA_LLABEL" VARCHAR2(30) NOT NULL, "BAUTURA_SLABEL"

VARCHAR2(30) NOT NULL,

"CATEG" VARCHAR2(30) NOT NULL,

"CATEG_LLABEL" VARCHAR2(30) NOT NULL, "CATEG_SLABEL"

VARCHAR2(30) NOT NULL,

PRIMARY

KEY("BAUTURA"))

TABLESPACE "ANA";

c). Tabela APARAT (figura 4.15):

Figura 4.15: Tabela APARAT

Codul SQL pentru crearea tabelei APARAT:

Pagina 92 din 207

Page 93: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CREATE TABLE "ANA"."APARAT" ("MATRICOL" VARCHAR2(30) NOT

NULL,

"TIP" VARCHAR2(30) NOT NULL, "TIP_LLABEL" VARCHAR2(30) NOT

NULL, "TIP_SLABEL" VARCHAR2(30) NOT NULL,

"CATEG" VARCHAR2(30) NOT NULL, "CATEG_LLABEL" VARCHAR2(30)

NOT NULL, "CATEG_SLABEL" VARCHAR2(30) NOT NULL,

"BEN" VARCHAR2(30) NOT NULL, "LOCATIE" VARCHAR2(30) NOT NULL,

"LOCATIE_LLABEL" VARCHAR2(30) NOT NULL, "LOCATIE_SLABEL"

VARCHAR2(30) NOT NULL,

"JUDET" VARCHAR2(30) NOT NULL, "JUDET_LLABEL" VARCHAR2(32)

NOT NULL, "JUDET_SLABEL" VARCHAR2(30) NOT NULL,

"TARA" VARCHAR2(10) NOT NULL, "TARA_LLABEL" VARCHAR2(30) NOT

NULL, "TARA_SLABEL" VARCHAR2(30) NOT NULL,

PRIMARY KEY("MATRICOL"), FOREIGN KEY("BEN")

REFERENCES "ANA"."BENEFICIAR"("BEN"))

TABLESPACE "ANA";

d). Tabela TIMP (figura 4.16):

Pagina 93 din 207

Page 94: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.16: Tabela TIMP

Codul SQL pentru crearea tabelei TIMP:

CREATE TABLE "ANA"."TIMP" ("TIMP_LUNA" VARCHAR2(30) NOT

NULL, "TIMP_LUNA_LLABEL" VARCHAR2(60), "TIMP_LUNA_SLABEL"

VARCHAR2(30), "TIMP_TRIM"

VARCHAR2(30), "TIMP_TRIM_LLABEL" VARCHAR2(60),

"TIMP_TRIM_SLABEL" VARCHAR2(30),

"TIMP_AN" VARCHAR2(30), "TIMP_AN_LLABEL" VARCHAR2(60),

"TIMP_AN_SLABEL" VARCHAR2(30),

"TIMP_SFARSIT_LUNA" DATE NOT NULL, "TIMP_SFARSIT_TRIM" DATE

NOT NULL, "TIMP_SFARSIT_AN" DATE NOT NULL,

"TIMP_DURATA_LUNA" NUMBER(2), "TIMP_DURATA_TRIM" NUMBER(2),

"TIMP_DURATA_AN" NUMBER(3), PRIMARY KEY("TIMP_LUNA"))

TABLESPACE "ANA";

e). Tabela BENEFICIAR (figura 4.17):

Figura 4.17: Tabela BENEFICIAR

Pagina 94 din 207

Page 95: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Codul SQL pentru crearea tabelei BENEFICIAR:

CREATE TABLE "ANA"."BENEFICIAR" ("BEN" VARCHAR2(30) NOT NULL,

"BEN_LLABEL" VARCHAR2(100) NOT NULL, "BEN_SLABEL"

VARCHAR2(30) NOT NULL, "LOCATIE" VARCHAR2(30) NOT NULL, "JUDET"

VARCHAR2(30) NOT NULL, "JUDET_LLABEL" VARCHAR2(60) NOT NULL,

"JUDET_SLABEL" VARCHAR2(30) NOT NULL, "TOP" VARCHAR2(30) NOT NULL,

"TOP_LLABEL" VARCHAR2(30) NOT NULL, "TOP_SLABEL" VARCHAR2(30) NOT

NULL,

"ADRESA" VARCHAR2(150) NOT NULL, "TELEFON" VARCHAR2(12) NOT

NULL, "PERSCONTACT" VARCHAR2(30) NOT NULL, "DATACONTRACTARE"

DATE NOT NULL, "AGENT" VARCHAR2(30) NOT NULL, "PRETJET"

NUMBER(10) NOT NULL, PRIMARY KEY("BEN"), FOREIGN KEY("AGENT")

REFERENCES "ANA"."AGENT"("AGENT")) TABLESPACE "ANA";

create sequence seq_beneficiar

start with 1

increment by 1

nomaxvalue;

create or replace TRIGGER trig_beneficiar

before insert on beneficiar

for each row

begin

select

CONCAT('BEN',LPAD(seq_beneficiar.nextval,5,'0')),CONCAT('BENEFICIAR

',LPAD(seq_beneficiar.nextval,5,'0')) into :new.ben, :new.ben_slabel from dual;

end;

4). Sistemul OLAP va utiliza scheme stea cu următoarele tabele de dimensiuni:

Stabilirea tabelelor de dimensiuni:

AGENT (figura 4.18):

Pagina 95 din 207

Page 96: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.18: Dimensiunea AGENT

Dimensiunea AGENT este de tip normal, cu o structură ierahică pe trei nivele: Ţară,

Judeţ, Agent. Conţine numele agenţilor, judeţul şi ţara în care aceştia îşi desfăşoară

activitatea.

APARAT (figura 4.19):

Pagina 96 din 207

Page 97: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.19: Dimensiunea APARAT

Dimensiunea APARAT este de tip normal, cu şapte nivele: L1=Categ (toate

aparatele), L2=Tip (tipuri aparate), L3=Matricol, L4=Ben (beneficiar), L5=Locaţie (oraş),

L6=Judeţ, L7=Ţară şi trei ierarhii: După_beneficiar (L7, L6, L5, L4, L3), După_judeţ (L7,

L6, L5, L3), Standard (L1, L2, L3).

BENEFICIAR (figura 4.20):

Figura 4.20: Dimensiunea BENEFICIAR

Dimensiunea BENEFICIAR este de tip normal, cu patru nivele: L1=Top (toţi

beneficiarii), L2=Judeţ, L3=Locaţie (oraş), L4=Ben (beneficiar) şi două ierarhii: Pe_judeţ

(L1, L2, L4), Standard (L1, L2, L3, L4).

Pagina 97 din 207

Page 98: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

TIMP (figura 4.21):

Figura 4.21: Dimensiunea TIMP

Dimensiunea TIMP este de tip time, cu trei nivele: An, Lună, Trim (trimestru) şi o

ierarhie: Standard (An, Lună, Trim).

TIPBĂUTURĂ (figura 4.22):

Pagina 98 din 207

Page 99: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.22: Dimensiunea TIPBĂUTURĂ

Dimensiunea TIPBĂUTURĂ este de tip normal, cu două nivele: L1=Categ (toate

tipurile de băuturi calde), L2=Băutură (denumirile băuturilor calde) şi o ierarhie: Standard

(L1, L2).

Tabelele de fapte:

FAPTE1 (figura 4.23)

Pagina 99 din 207

Page 100: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.23: Tabela de fapte FAPTE1

Tabela FAPTE1 conţine toate combinaţiile posibile ale cheilor primare din tabelele

TIMP, APARAT, TIPBĂUTURĂ, BENEFICIAR şi AGENT, care astfel agregate returnează

o cantitate vândută nenulă. Este tabela folosită la crearea cubului CUB1, având

cheie primară compusă, iar coloanele CANT_VANDUTĂ şi PREŢ_JET reprezentând

măsurile cubului.

FAPTE2 (figura 4.24)

Figura 4.24: Tabela de fapte FAPTE2

Tabela FAPTE2 formează un produs cartezian cu cheile din tabelele TIMP şi

AGENT, fiind de o dimensiune mult mai redusă comparativ cu FAPTE1. Este tabela ce stă la

baza cubului CUB2, ce are ca măsură cuantumul beneficiarilor, evidenţiat de coloana

NR_BENEF.

FAPTE3 (figura 4.25)

Pagina 100 din 207

Page 101: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.25: Tabela de fapte FAPTE3

Tabela FAPTE3 formează un produs cartezian cu cheile din tabelele TIMP şi

BENEFICIAR, fiind de o dimensiune mult mai redusă comparativ cu FAPTE1. Este tabela ce

stă la baza cubului CUB3, ce are ca măsură preţul mediu al unui jeton, evidenţiat de coloana

PREŢ_JET.

Cuburile n-dimensionale:

CUB1 (figura 4.26)

Figura 4.26: Schema topologică a cubului CUB1

Pagina 101 din 207

Page 102: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CUB2 (figura 4.27)

Figura 4.27: Schema topologică a cubului CUB2

CUB2 vine în completarea primului, aducând posibilitatea determinării unor statistici

coerente în funcţie de numărul de beneficiari, în funcţie de timp, agent constatator sau locaţie.

CUB3 (figura 4.28)

Figura 4.28: Schema topologică a cubului CUB3

CUB3 oferă posibilitatea determinării unor statistici coerente în funcţie de preţul

mediu al unui jeton, şi implicit valoarea băuturilor comercializate, în funcţie de timp şi

beneficiar.

Directorul măsurilor:

Odată cu crearea cubului se stabilesc şi măsurile ce fac parte din analiză. În mod

implicit, Oracle OLAP tratează drept măsuri toate coloanele de tip NUMBER ce nu sunt

cheie primară în tabela de fapte. Măsurile se depozitează într-un director aflat în Oracle

Enterprise Manager la secţiunea Warehouse / OLAP (figura 4.29), fie la crearea directorului,

fie manual ulterior.

Pagina 102 din 207

Page 103: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.29: Directorul de măsuri DATE VÂNZĂRI

Interfaţa sistemului OLAP a fost construită utilizând instrumentul Jdeveloper 10g şi

este prezentată în figura 4.30.

Figura 4.30: Interfaţa sistemului OLAP

Sistemul OLAP permite următoarele tipuri de analize:

Evoluţia grafică a numărului de băuturi calde comercializate pe fiecare automat de

cafea în parte în anii 2003, 2004 şi 2005 (figura 4.31)

Pagina 103 din 207

Page 104: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Evoluţia grafică a numărului de băuturi calde comercializate pe tipuri de automate de

cafea, în anii analizaţi (figura 4.32)

Evoluţia grafică a numărului de băuturi calde comercializate pe zone geografice, pe

beneficiarii existenţi în fiecare din aceste zone şi pe fiecare automat de cafea în parte, în anii

analizaţi (figura 4.33)

Evoluţia grafică a numărului de băuturi calde comercializate pe fiecare agent în parte,

în anii analizaţi (figura 4.34)

Evoluţia grafică a numărului de băuturi calde comercializate pe fiecare agent în parte,

pe zone geografice şi pe fiecare tip de băutură, în anii analizaţi (figura 4.35)

Evoluţia grafică a numărului total de beneficiari deserviţi de un agent, în anii analizaţi

(figura 4.36)

Topul clienţilor, în funcţie de numărul total de băuturi comercializate, în anul 2003

(figura 4.37)

Topul clienţilor, în funcţie de numărul total de băuturi comercializate, în anul 2004

(figura 4.38)

Topul clienţilor, în funcţie de numărul total de băuturi comercializate, în anul 2005

(figura 4.39)

Topul agenţilor, în funcţie de numărul total de băuturi comercializate, în anul 2003

(figura 4.40)

Topul agenţilor, în funcţie de numărul total de băuturi comercializate, în anul 2004

(figura 4.41)

Topul agenţilor, în funcţie de numărul total de băuturi comercializate, în anul 2005

(figura 4.42)

Topul agenţilor, în funcţie de numărul de beneficiari deserviţi, în anul 2003 (figura

4.43)

Topul agenţilor, în funcţie de numărul de beneficiari deserviţi, în anul 2004 (figura

4.44)

Topul agenţilor, în funcţie de numărul de beneficiari deserviţi, în anul 2005 (figura

4.45)

Evoluţia grafică a valorii totale a băuturilor comercializate şi a preţului mediu al unui

jeton, în anii analizaţi (figura 4.46)

Pagina 104 din 207

Page 105: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.31: Evoluţia numărului de băuturi calde comercializate /aparat /timp

Pagina 105 din 207

Page 106: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.32: Evoluţia numărului de băuturi calde comercializate /tip aparat /timp

Pagina 106 din 207

Page 107: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.33: Evoluţia numărului de băuturi calde comercializate /locaţie geografică

/beneficiar /aparat

Figura 4.34: Evoluţia numărului de băuturi calde comercializate /agent /timp

Pagina 107 din 207

Page 108: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.35: Evoluţia numărului de băuturi calde comercializate /agent /locaţie

geografică /tip de băutură

Pagina 108 din 207

Page 109: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.36: Numărul de beneficiari deserviţi de un agent /timp

Pagina 109 din 207

Page 110: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.37: Topul clienţilor în anul 2003 în funcţie de numărul de băuturi calde

comercializate

Figura 4.38: Topul clienţilor în anul 2004 în funcţie de numărul de băuturi calde

comercializate

Pagina 110 din 207

Page 111: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.39: Topul clienţilor în anul 2005 în funcţie de numărul de băuturi calde

comercializate

Pagina 111 din 207

Page 112: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.40: Topul agenţilor în anul 2003 în funcţie de numărul de băuturi calde

comercializate

Pagina 112 din 207

Page 113: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.41: Topul agenţilor în anul 2004 în funcţie de numărul de băuturi calde

comercializate

Pagina 113 din 207

Page 114: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.42: Topul agenţilor în anul 2005 în funcţie de numărul de băuturi calde

comercializate

Pagina 114 din 207

Page 115: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.43: Topul agenţilor în anul 2003 în funcţie de numărul de beneficiari

deserviţi

Pagina 115 din 207

Page 116: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.44: Topul agenţilor în anul 2004 în funcţie de numărul de beneficiari

deserviţi

Pagina 116 din 207

Page 117: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.45: Topul agenţilor în anul 2005 în funcţie de numărul de beneficiari

deserviţi

Pagina 117 din 207

Page 118: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Figura 4.46: Valoarea băuturilor comercializate şi preţul mediu

CONCLUZII

În această lucrare s-a proiectat şi s-a realizat un sistem OLAP. Pentru ca acest lucru să

fie posibil s-au studiat o serie de concepte necesare proiectării bazei de date. De asemenea,

pentru ca realizarea sistemului OLAP să fie posibilă s-au studiat şi “testat” instrumentele

Oracle Enterprise Manager cu al său OLAP Management şi JDeveloper 10g cu facilităţile

specifice pentru inteligenţa afacerii.

Oracle Enterprise Manager este un instrument uşor de utilizat atât pentru utilizatorii

experimentaţi cât şi pentru cei ce se află la început de drum. Oferă utilizatorilor wizard-uri

pentru crearea de dimensiuni, cuburi şi măsuri.

Cât despre JDeveloper 10g, acesta este un instrument bine integrat, uşor de

implementat şi cu o interfaţă prietenoasă. Nu necesită cunoştinţe avansate de Java, oferind

posibilitatea implementării în mod vizual. JDeveloper va genera o mare parte din cod,

Pagina 118 din 207

Page 119: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

utilizatorul având deci posibilitatea să se concentreze în realizarea interfeţei, adăugând cu

uşurinţă elementele grafice necesare. De asemenea, sunt disponibile wizard-uri pentru crearea

de elemente vizuale ca: grafice, tabele sau tabele încrucişate. Iar pentru o şi mai mare

uşurinţă în dezvoltare, JDeveloper oferă wizard-uri pentru crearea de calcule, formule între

diferitele măsuri disponibile sau calcule pentru a evidenţia evoluţia anumitor măsuri într-o

perioadă de timp.

Lucrarea de faţă experimentează modul în care se poate realiza un sistem OLAP cu

noile instrumente şi tehnologii oferite de Oracle şi se doreşte a fi un ghid practic, deosebit de

necesar atât celor familiarizaţi cu vechiul Express Server, cât şi pentru aceia ce vor să

debuteze în domeniul depozitelor de date şi al inteligenţei afacerii prin utilizarea unor

instrumente de ultimă generaţie.

ANEXA 1

CODUL SURSĂ PENTRU CREAREA BAZEI DE DATE

Codul SQL şi PL/SQL folosit la crearea sistemului:

Pentru simplificarea instalării s-a creat un fişier executabil de tip BATCH,

ana_schema.bat, care se apelează din linia de comandă, primind ca parametru calea către

directorul care conţine fişierele bazei de date. În cazul de faţă:

ana_schema.bat E:\OraHome92\oradata\proiect

Conţinutul fişierului sursă ana_schema.bat cât şi al fişierelor SQL apelate din acesta

este detaliat în cele ce urmează:

ana_schema.bat – fişierul sursă de unde sunt apelate scripturile ce creează efectiv

@echo off

if "%1" == "" goto helptopic

set NLS_LANG_BIBSAVE=%NLS_LANG%

set NLS_NUMERIC_BIBSAVE=%NLS_NUMERIC_CHARACTERS%

Pagina 119 din 207

Page 120: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

set NLS_DATE_BIBSAVE=%NLS_DATE_LANGUAGE%

set NLS_LANG=AMERICAN_AMERICA.UTF8

set NLS_NUMERIC_CHARACTERS=.,

set NLS_DATE_LANGUAGE=AMERICAN

echo \*\*\*

echo \*\*\* MAKE SURE your ORACLE_HOME, ORACLE_SID, PATH, and so on

are

echo \*\*\* set appropriately! This script must be able to utilize

echo \*\*\* sqlplus and sqlldr in order to load information into your

echo \*\*\* instance!

echo \*\*\*

echo \*\*\* This also assumes that CwMLite has already been installed.

echo \*\*\*

echo .

echo \*\*\* Next procedure will drop and recreate user ANA

echo \*\*\* Please enter the SYS AS SYSDBA password

sqlplus "sys as sysdba" @mkana.sql %1

echo Initializarea schemei ANA - creating TABLES

sqlplus ana/florea @tkgsxini1.sql

echo Incarcarea datelor in tabela AGENT

sqlplus ana/florea @loadAGENT.sql

echo Incarcarea datelor in tabela TIMP

sqlplus ana/florea @loadTIMP.sql

echo Incarcarea datelor in tabela TIPBAUTURA

sqlplus ana/florea @loadTIPBAUTURA.sql

echo Incarcarea datelor in tabela BENEFICIAR

sqlplus ana/florea @loadBENEFICIAR.sql

Pagina 120 din 207

Page 121: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

echo Incarcarea datelor in tabela APARAT

sqlplus ana/florea @loadAPARAT.sql

echo Incarcarea datelor in tabela de fapte FAPTE1

sqlplus ana/florea @loadFAPTE1.sql

echo Incarcarea datelor in tabela de fapte FAPTE2

sqlplus ana/florea @loadFAPTE2.sql

echo Incarcarea datelor in tabela de fapte FAPTE3

sqlplus ana/florea @loadFAPTE3.sql

echo Initializarea schemei ANA - crearea DIMENSIUNILOR

sqlplus ana/florea @tkgsxini2.sql

echo Crearea cuburilor CUB1, CUB2 si CUB3 in CWM

echo sqlplus ana/florea @create_analytic_cube.sql

echo Running metadata refresh

echo \*\*\* Please enter the OLAPSYS password.

sqlplus olapsys @metadatafix.sql

echo

echo \*\*\*

echo \*\*\* DONE. Scriptul s-a terminat cu succes!

echo \*\*\*

goto end

:helptopic

echo .

echo Va rugam sa specificati locatia fisierului ce contine datele bazei cu care se

lucreaza.

echo exemplu:

Pagina 121 din 207

Page 122: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

echo ana_schema E:\OraHome92\oradata\proiect

echo .

:end

mkana.sql – fişierul ce creează utilizatorul ANA cât şi spaţiile tabel ANA şi

ANATEMP

drop user ana cascade;

drop tablespace ana including contents;

drop tablespace anatemp including contents;

create tablespace ana datafile

'&1/ana_01.dbf' size 200M reuse autoextend on

next 16K maxsize unlimited extent management local autoallocate;

create temporary tablespace anatemp tempfile

'&1/anatemp_01.dbf' size 50M reuse autoextend

on next 10240K MAXSIZE 32767M EXTENT MANAGEMENT LOCAL

UNIFORM SIZE 1024K;

create user ana identified by florea default tablespace ana

temporary tablespace anatemp quota unlimited on ana;

grant global query rewrite, query rewrite, unlimited tablespace,

connect, resource, dba, olap_dba, create materialized view to ana;

quit;

tkgsxini1.sql – fişierul ce creează toate tabelele, iar pentru AGENT şi BENEFICIAR

se creează câte o secvenţă şi un trigger ce ajută la auto-incrementarea cheilor primare din cele

două tabele.

Rem NAME

Rem tkgsxini1.sql - Initializarea schemei ANA

Rem

Rem DESCRIPTION

Pagina 122 din 207

Page 123: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Rem Crearea tabelelor si triggerelor/secventelor aferente.

Rem

CREATE TABLE "ANA"."AGENT" ("AGENT" VARCHAR2(30) NOT NULL,

"AGENT_LLABEL"

VARCHAR2(30) NOT NULL, "AGENT_SLABEL"

VARCHAR2(30) NOT NULL, "JUDET" VARCHAR2(30) NOT NULL,

"JUDET_LLABEL"

VARCHAR2(30) NOT NULL, "JUDET_SLABEL"

VARCHAR2(30) NOT NULL, "TARA" VARCHAR2(30) NOT NULL,

"TARA_LLABEL"

VARCHAR2(30) NOT NULL, "TARA_SLABEL"

VARCHAR2(30) NOT NULL, "TELEFONAG" VARCHAR2(10) NOT NULL,

"TIPCONTACT" VARCHAR2(30) NOT NULL, PRIMARY KEY("AGENT"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."BENEFICIAR" ("BEN" VARCHAR2(30) NOT NULL,

"BEN_LLABEL" VARCHAR2(100) NOT NULL, "BEN_SLABEL"

VARCHAR2(30) NOT NULL, "LOCATIE" VARCHAR2(30) NOT NULL,

"JUDET" VARCHAR2(30) NOT NULL, "JUDET_LLABEL" VARCHAR2(60)

NOT NULL, "JUDET_SLABEL" VARCHAR2(30) NOT NULL,

"TOP" VARCHAR2(30) NOT NULL, "TOP_LLABEL" VARCHAR2(30) NOT

NULL, "TOP_SLABEL" VARCHAR2(30) NOT NULL,

"ADRESA" VARCHAR2(150) NOT NULL, "TELEFON" VARCHAR2(12) NOT

NULL, "PERSCONTACT" VARCHAR2(30) NOT NULL, "DATACONTRACTARE"

DATE NOT NULL, "AGENT" VARCHAR2(30) NOT NULL, "PRETJET"

NUMBER(10) NOT NULL, PRIMARY

KEY("BEN"), FOREIGN KEY("AGENT")

REFERENCES "ANA"."AGENT"("AGENT"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."APARAT" ("MATRICOL" VARCHAR2(30) NOT

NULL,

Pagina 123 din 207

Page 124: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

"TIP" VARCHAR2(30) NOT NULL, "TIP_LLABEL" VARCHAR2(30) NOT

NULL, "TIP_SLABEL" VARCHAR2(30) NOT NULL,

"CATEG" VARCHAR2(30) NOT NULL, "CATEG_LLABEL" VARCHAR2(30)

NOT NULL, "CATEG_SLABEL" VARCHAR2(30) NOT NULL,

"BEN" VARCHAR2(30) NOT NULL, "LOCATIE" VARCHAR2(30) NOT NULL,

"LOCATIE_LLABEL" VARCHAR2(30) NOT NULL, "LOCATIE_SLABEL"

VARCHAR2(30) NOT NULL,

"JUDET" VARCHAR2(30) NOT NULL, "JUDET_LLABEL" VARCHAR2(32)

NOT NULL, "JUDET_SLABEL" VARCHAR2(30) NOT NULL,

"TARA" VARCHAR2(10) NOT NULL, "TARA_LLABEL" VARCHAR2(30) NOT

NULL, "TARA_SLABEL" VARCHAR2(30) NOT NULL,

PRIMARY KEY("MATRICOL"), FOREIGN KEY("BEN")

REFERENCES "ANA"."BENEFICIAR"("BEN"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."TIMP" ("TIMP_LUNA" VARCHAR2(30) NOT

NULL, "TIMP_LUNA_LLABEL" VARCHAR2(60), "TIMP_LUNA_SLABEL"

VARCHAR2(30), "TIMP_TRIM"

VARCHAR2(30), "TIMP_TRIM_LLABEL" VARCHAR2(60),

"TIMP_TRIM_SLABEL" VARCHAR2(30),

"TIMP_AN" VARCHAR2(30), "TIMP_AN_LLABEL" VARCHAR2(60),

"TIMP_AN_SLABEL" VARCHAR2(30),

"TIMP_SFARSIT_LUNA" DATE NOT NULL, "TIMP_SFARSIT_TRIM" DATE

NOT NULL, "TIMP_SFARSIT_AN" DATE NOT NULL,

"TIMP_DURATA_LUNA" NUMBER(2), "TIMP_DURATA_TRIM" NUMBER(2),

"TIMP_DURATA_AN" NUMBER(3), PRIMARY KEY("TIMP_LUNA"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."TIPBAUTURA" ("BAUTURA" VARCHAR2(30) NOT

NULL,

"BAUTURA_LLABEL" VARCHAR2(30) NOT NULL, "BAUTURA_SLABEL"

VARCHAR2(30) NOT NULL,

"CATEG" VARCHAR2(30) NOT NULL,

Pagina 124 din 207

Page 125: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

"CATEG_LLABEL" VARCHAR2(30) NOT NULL, "CATEG_SLABEL"

VARCHAR2(30) NOT NULL,

PRIMARY

KEY("BAUTURA"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."FAPTE1" ("TIMP_LEAVES" VARCHAR2(30) NOT

NULL,

"APARAT_LEAVES" VARCHAR2(30) NOT NULL ,

"BAUTURA_LEAVES" VARCHAR2(30) NOT NULL,

"BENEFICIAR_LEAVES" VARCHAR2(30) NOT NULL,

"AGENT_LEAVES" VARCHAR2(30) NOT NULL,

"CANT_VANDUTA" NUMBER(20) NOT NULL,

PRIMARY

KEY("TIMP_LEAVES","APARAT_LEAVES","BAUTURA_LEAVES",

"BENEFICIAR_LEAVES", "AGENT_LEAVES"),

CONSTRAINT "FK_BAUTURA" FOREIGN KEY("BAUTURA_LEAVES")

REFERENCES "ANA"."TIPBAUTURA"("BAUTURA"),

CONSTRAINT "FK_TIMP" FOREIGN KEY("TIMP_LEAVES")

REFERENCES "ANA"."TIMP"("TIMP_LUNA"),

CONSTRAINT "FK_BENEFICIAR" FOREIGN KEY("BENEFICIAR_LEAVES")

REFERENCES "ANA"."BENEFICIAR"("BEN"),

CONSTRAINT "FK_AGENT" FOREIGN KEY("AGENT_LEAVES")

REFERENCES "ANA"."AGENT"("AGENT"),

CONSTRAINT "FK_APARAT" FOREIGN KEY("APARAT_LEAVES")

REFERENCES "ANA"."APARAT"("MATRICOL"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."FAPTE2" ("TIMP_LEAVES" VARCHAR2(30) NOT

NULL,

"AGENT_LEAVES" VARCHAR2(30) NOT NULL,

"NR_BENEF" NUMBER(20) NOT NULL,

PRIMARY KEY("TIMP_LEAVES","AGENT_LEAVES"),

CONSTRAINT "FK_TIMP2" FOREIGN KEY("TIMP_LEAVES")

Pagina 125 din 207

Page 126: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

REFERENCES "ANA"."TIMP"("TIMP_LUNA"),

CONSTRAINT "FK_AGENT2" FOREIGN KEY("AGENT_LEAVES")

REFERENCES "ANA"."AGENT"("AGENT"))

TABLESPACE "ANA";

CREATE TABLE "ANA"."FAPTE3" (

"BENEFICIAR_LEAVES" VARCHAR2(30) NOT NULL,

"TIMP_LEAVES" VARCHAR2(30) NOT NULL,

"PRET_JET" NUMBER(20,2) NOT NULL,

PRIMARY KEY("BENEFICIAR_LEAVES","TIMP_LEAVES"),

CONSTRAINT "FK_TIMP3" FOREIGN KEY("TIMP_LEAVES")

REFERENCES "ANA"."TIMP"("TIMP_LUNA"),

CONSTRAINT "FK_BENEFICIAR3" FOREIGN KEY("BENEFICIAR_LEAVES")

REFERENCES "ANA"."BENEFICIAR"("BEN"))

TABLESPACE "ANA";

Rem Triggers si sequences pentru autoincrementarea cheilor primare numerice

create sequence seq_agent

start with 1

increment by 1

nomaxvalue;

create or replace TRIGGER trig_agent

before insert on agent

for each row

begin

select CONCAT('AG',LPAD(seq_agent.nextval,3,'0')),CONCAT('AGENT

',LPAD(seq_agent.nextval,3,'0')) into :new.agent, :new.agent_slabel from dual;

end;

/

create sequence seq_beneficiar

start with 1

Pagina 126 din 207

Page 127: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

increment by 1

nomaxvalue;

create or replace TRIGGER trig_beneficiar

before insert on beneficiar

for each row

begin

select

CONCAT('BEN',LPAD(seq_beneficiar.nextval,5,'0')),CONCAT('BENEFICIAR

',LPAD(seq_beneficiar.nextval,5,'0')) into :new.ben, :new.ben_slabel from dual;

end;

/

quit;

loadAGENT.sql – fişierul ce conţine liniile SQL necesare populării tabelei AGENT

INSERT INTO "ANA"."AGENT"

(AGENT_LLABEL,JUDET,JUDET_LLABEL,JUDET_SLABEL,TARA,TARA_LLABEL,

TARA_SLABEL,TELEFONAG,TIPCONTACT) VALUES ('MUNTEAN

MARIAN','JUD_HUNEDOARA','Agentii din jud HUNEDOARA','HD','ROMANIA','Toti

agentii','RO','0723211301','angajat');

INSERT INTO "ANA"."AGENT"

(AGENT_LLABEL,JUDET,JUDET_LLABEL,JUDET_SLABEL,TARA,TARA_LLABEL,

TARA_SLABEL,TELEFONAG,TIPCONTACT) VALUES ('KISS

OTO','JUD_HUNEDOARA','Agentii din jud HUNEDOARA','HD','ROMANIA','Toti

agentii','RO','0723211302','angajat');

INSERT INTO "ANA"."AGENT"

(AGENT_LLABEL,JUDET,JUDET_LLABEL,JUDET_SLABEL,TARA,TARA_LLABEL,

TARA_SLABEL,TELEFONAG,TIPCONTACT) VALUES ('MIHUTIU

MARIUS','JUD_HUNEDOARA','Agentii din jud HUNEDOARA','HD','ROMANIA','Toti

agentii','RO','0723211303','angajat');

Pagina 127 din 207

Page 128: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

INSERT INTO "ANA"."AGENT"

(AGENT_LLABEL,JUDET,JUDET_LLABEL,JUDET_SLABEL,TARA,TARA_LLABEL,

TARA_SLABEL,TELEFONAG,TIPCONTACT) VALUES ('MARGINE

LAURENTIU','JUD_CARAS-SEVERIN','Agentii din jud CARAS-

SEVERIN','CS','ROMANIA','Toti agentii','RO','0723211331','angajat');

quit;

loadAPARAT.sql – fişierul ce conţine liniile SQL necesare populării tabelei

APARAT

INSERT INTO "ANA"."APARAT" (MATRICOL, TIP, TIP_LLABEL,

TIP_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL, BEN, LOCATIE,

LOCATIE_LLABEL, LOCATIE_SLABEL, JUDET, JUDET_LLABEL, JUDET_SLABEL,

TARA, TARA_LLABEL, TARA_SLABEL) VALUES ('10802122', 'COLIBRI', 'Model

COLIBRI', 'CO', 'AUTOMATE', 'Automate de cafea', 'AUTOMATE', 'BEN00138',

'DROBETA TR','Ap din DROBETA TR','Ap DROBETA','JUD_MEHEDINTI','Aparatele

din jud MEHEDINTI','Ap jud MH','ROMANIA','Toate aparatele','Toate');

INSERT INTO "ANA"."APARAT" (MATRICOL, TIP, TIP_LLABEL,

TIP_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL, BEN, LOCATIE,

LOCATIE_LLABEL, LOCATIE_SLABEL, JUDET, JUDET_LLABEL, JUDET_SLABEL,

TARA, TARA_LLABEL, TARA_SLABEL) VALUES ('10802199', 'COLIBRI', 'Model

COLIBRI', 'CO', 'AUTOMATE', 'Automate de cafea', 'AUTOMATE', 'BEN00140',

'DROBETA TR','Ap din DROBETA TR','Ap DROBETA','JUD_MEHEDINTI','Aparatele

din jud MEHEDINTI','Ap jud MH','ROMANIA','Toate aparatele','Toate');

INSERT INTO "ANA"."APARAT" (MATRICOL, TIP, TIP_LLABEL,

TIP_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL, BEN, LOCATIE,

LOCATIE_LLABEL, LOCATIE_SLABEL, JUDET, JUDET_LLABEL, JUDET_SLABEL,

TARA, TARA_LLABEL, TARA_SLABEL) VALUES ('12800134', 'BRIO 200', 'Model

BRIO 200', 'BR200', 'AUTOMATE', 'Automate de cafea', 'AUTOMATE', 'BEN00156',

Pagina 128 din 207

Page 129: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

'TIMISOARA','Ap din TIMISOARA','Ap TIMISOARA','JUD_TIMIS','Aparatele din jud

TIMIS','Ap jud TM','ROMANIA','Toate aparatele','Toate');

INSERT INTO "ANA"."APARAT" (MATRICOL, TIP, TIP_LLABEL,

TIP_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL, BEN, LOCATIE,

LOCATIE_LLABEL, LOCATIE_SLABEL, JUDET, JUDET_LLABEL, JUDET_SLABEL,

TARA, TARA_LLABEL, TARA_SLABEL) VALUES ('12800146', 'BRIO 200', 'Model

BRIO 200', 'BR200', 'AUTOMATE', 'Automate de cafea', 'AUTOMATE', 'BEN00271',

'TIMISOARA','Ap din TIMISOARA','Ap TIMISOARA','JUD_TIMIS','Aparatele din jud

TIMIS','Ap jud TM','ROMANIA','Toate aparatele','Toate');

quit;

loadBENEFICIAR.sql – fişierul ce conţine liniile SQL necesare populării tabelei

BENEFICIAR

INSERT INTO "ANA"."BENEFICIAR" (BEN_LLABEL, LOCATIE, JUDET,

JUDET_LLABEL, JUDET_SLABEL, TOP, TOP_LLABEL, TOP_SLABEL, ADRESA,

TELEFON, PERSCONTACT, DATACONTRACTARE, AGENT, PRETJET) VALUES

('S.R.I. DEVA', 'DEVA', 'JUD_HUNEDOARA', 'Beneficiarii din jud HUNEDOARA', 'Benef

HD', 'ROMANIA', 'Toti beneficiarii', 'RO', 'STR.M.EMINESCU NR.130', '254/211250',

'DOBREANU VIOREL', '01-Jan-2003', 'AG001', 6000);

INSERT INTO "ANA"."BENEFICIAR" (BEN_LLABEL, LOCATIE, JUDET,

JUDET_LLABEL, JUDET_SLABEL, TOP, TOP_LLABEL, TOP_SLABEL, ADRESA,

TELEFON, PERSCONTACT, DATACONTRACTARE, AGENT, PRETJET) VALUES

('PRIMARIE DEVA', 'DEVA', 'JUD_HUNEDOARA', 'Beneficiarii din jud HUNEDOARA',

'Benef HD', 'ROMANIA', 'Toti beneficiarii', 'RO', 'PIATA UNIRII NR.4', '254/216916',

'MIRCIA MUNTEAN', '01-Jan-2003', 'AG001', 7000);

INSERT INTO "ANA"."BENEFICIAR" (BEN_LLABEL, LOCATIE, JUDET,

JUDET_LLABEL, JUDET_SLABEL, TOP, TOP_LLABEL, TOP_SLABEL, ADRESA,

TELEFON, PERSCONTACT, DATACONTRACTARE, AGENT, PRETJET) VALUES

('POMPIERI DEVA', 'DEVA', 'JUD_HUNEDOARA', 'Beneficiarii din jud HUNEDOARA',

'Benef HD', 'ROMANIA', 'Toti beneficiarii', 'RO', 'STR.G.COSBUC NR.26', '254/214220',

'CRISTEA', '01-Jan-2003', 'AG005', 6000);

Pagina 129 din 207

Page 130: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

INSERT INTO "ANA"."BENEFICIAR" (BEN_LLABEL, LOCATIE, JUDET,

JUDET_LLABEL, JUDET_SLABEL, TOP, TOP_LLABEL, TOP_SLABEL, ADRESA,

TELEFON, PERSCONTACT, DATACONTRACTARE, AGENT, PRETJET) VALUES

('DANIELLE COMPANY DEVA', 'DEVA', 'JUD_HUNEDOARA', 'Beneficiarii din jud

HUNEDOARA', 'Benef HD', 'ROMANIA', 'Toti beneficiarii', 'RO', 'STR.RANDUNICII

NR.6', '254/222444', 'CIOCAN CRISTINA', '01-Jan-2003', 'AG001', 6000);

quit;

loadTIPBAUTURA.sql – fişierul ce conţine liniile SQL necesare populării tabelei

TIPBAUTURA

INSERT INTO "ANA"."TIPBAUTURA" (BAUTURA, BAUTURA_LLABEL,

BAUTURA_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL) VALUES ('scurta',

'Cafea scurta', 'Scurta', 'BAUTURI', 'Bauturi calde', 'BAUTURI');

INSERT INTO "ANA"."TIPBAUTURA" (BAUTURA, BAUTURA_LLABEL,

BAUTURA_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL) VALUES ('lunga',

'Cafea lunga', 'Lunga', 'BAUTURI', 'Bauturi calde', 'BAUTURI');

INSERT INTO "ANA"."TIPBAUTURA" (BAUTURA, BAUTURA_LLABEL,

BAUTURA_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL) VALUES

('culapte', 'Cafea cu lapte', 'Cu lapte', 'BAUTURI', 'Bauturi calde', 'BAUTURI');

INSERT INTO "ANA"."TIPBAUTURA" (BAUTURA, BAUTURA_LLABEL,

BAUTURA_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL) VALUES ('capp',

'Cappucino', 'Cappucino', 'BAUTURI', 'Bauturi calde', 'BAUTURI');

INSERT INTO "ANA"."TIPBAUTURA" (BAUTURA, BAUTURA_LLABEL,

BAUTURA_SLABEL, CATEG, CATEG_LLABEL, CATEG_SLABEL) VALUES

('ciocculapteness', 'Ciocolata cu lapte si ness', 'Cioc. cu lapte ness', 'BAUTURI', 'Bauturi

calde', 'BAUTURI');

quit;

Pagina 130 din 207

Page 131: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

loadTIMP.sql – fişierul ce conţine liniile SQL necesare populării tabelei TIMP

INSERT INTO "ANA"."TIMP" (TIMP_LUNA, TIMP_LUNA_LLABEL,

TIMP_LUNA_SLABEL, TIMP_TRIM, TIMP_TRIM_LLABEL, TIMP_TRIM_SLABEL,

TIMP_AN, TIMP_AN_LLABEL, TIMP_AN_SLABEL, TIMP_SFARSIT_LUNA,

TIMP_SFARSIT_TRIM, TIMP_SFARSIT_AN, TIMP_DURATA_LUNA,

TIMP_DURATA_TRIM, TIMP_DURATA_AN) VALUES ('MAY03','May

2003','05','TRIM2-03','Trimestrul 2 - 2003','Trim2 03','2003','2003','03','31-May-2003','30-

Jun-2003','31-Dec-2003',31,61,245);

INSERT INTO "ANA"."TIMP" (TIMP_LUNA, TIMP_LUNA_LLABEL,

TIMP_LUNA_SLABEL, TIMP_TRIM, TIMP_TRIM_LLABEL, TIMP_TRIM_SLABEL,

TIMP_AN, TIMP_AN_LLABEL, TIMP_AN_SLABEL, TIMP_SFARSIT_LUNA,

TIMP_SFARSIT_TRIM, TIMP_SFARSIT_AN, TIMP_DURATA_LUNA,

TIMP_DURATA_TRIM, TIMP_DURATA_AN) VALUES ('JUN03','June

2003','06','TRIM2-03','Trimestrul 2 - 2003','Trim2 03','2003','2003','03','30-Jun-2003','30-Jun-

2003','31-Dec-2003',30,61,245);

INSERT INTO "ANA"."TIMP" (TIMP_LUNA, TIMP_LUNA_LLABEL,

TIMP_LUNA_SLABEL, TIMP_TRIM, TIMP_TRIM_LLABEL, TIMP_TRIM_SLABEL,

TIMP_AN, TIMP_AN_LLABEL, TIMP_AN_SLABEL, TIMP_SFARSIT_LUNA,

TIMP_SFARSIT_TRIM, TIMP_SFARSIT_AN, TIMP_DURATA_LUNA,

TIMP_DURATA_TRIM, TIMP_DURATA_AN) VALUES ('JUL03','July

2003','07','TRIM3-03','Trimestrul 3 - 2003','Trim3 03','2003','2003','03','31-Jul-2003','30-Sep-

2003','31-Dec-2003',31,92,245);

INSERT INTO "ANA"."TIMP" (TIMP_LUNA, TIMP_LUNA_LLABEL,

TIMP_LUNA_SLABEL, TIMP_TRIM, TIMP_TRIM_LLABEL, TIMP_TRIM_SLABEL,

TIMP_AN, TIMP_AN_LLABEL, TIMP_AN_SLABEL, TIMP_SFARSIT_LUNA,

TIMP_SFARSIT_TRIM, TIMP_SFARSIT_AN, TIMP_DURATA_LUNA,

TIMP_DURATA_TRIM, TIMP_DURATA_AN) VALUES ('AUG03','August

2003','08','TRIM3-03','Trimestrul 3 - 2003','Trim3 03','2003','2003','03','31-Aug-2003','30-

Sep-2003','31-Dec-2003',31,92,245);

Pagina 131 din 207

Page 132: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

INSERT INTO "ANA"."TIMP" (TIMP_LUNA, TIMP_LUNA_LLABEL,

TIMP_LUNA_SLABEL, TIMP_TRIM, TIMP_TRIM_LLABEL, TIMP_TRIM_SLABEL,

TIMP_AN, TIMP_AN_LLABEL, TIMP_AN_SLABEL, TIMP_SFARSIT_LUNA,

TIMP_SFARSIT_TRIM, TIMP_SFARSIT_AN, TIMP_DURATA_LUNA,

TIMP_DURATA_TRIM, TIMP_DURATA_AN) VALUES ('SEP03','September

2003','09','TRIM3-03','Trimestrul 3 - 2003','Trim3 03','2003','2003','03','30-Sep-2003','30-

Sep-2003','31-Dec-2003',30,92,245);

quit;

loadFAPTE1.sql – fişierul ce conţine liniile SQL necesare populării tabelei de fapte

FAPTE1

INSERT INTO "ANA"."FAPTE1"

(TIMP_LEAVES,APARAT_LEAVES,BAUTURA_LEAVES,BENEFICIAR_LEAVES,AG

ENT_LEAVES,CANT_VANDUTA) VALUES ('AUG03', '12800148', 'cafeacucioc',

'BEN00167', 'AG009', 73);

INSERT INTO "ANA"."FAPTE1"

(TIMP_LEAVES,APARAT_LEAVES,BAUTURA_LEAVES,BENEFICIAR_LEAVES,AG

ENT_LEAVES,CANT_VANDUTA) VALUES ('AUG03', '12800148', 'cafeacucioc',

'BEN00167', 'AG010', 17);

INSERT INTO "ANA"."FAPTE1"

(TIMP_LEAVES,APARAT_LEAVES,BAUTURA_LEAVES,BENEFICIAR_LEAVES,AG

ENT_LEAVES,CANT_VANDUTA) VALUES ('AUG03', '12800148', 'cafeacucioc',

'BEN00167', 'AG013', 1);

INSERT INTO "ANA"."FAPTE1"

(TIMP_LEAVES,APARAT_LEAVES,BAUTURA_LEAVES,BENEFICIAR_LEAVES,AG

ENT_LEAVES,CANT_VANDUTA) VALUES ('AUG03', '12800148', 'capp', 'BEN00167',

'AG009', 12);

quit;

Pagina 132 din 207

Page 133: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

loadFAPTE2.sql – fişierul ce conţine liniile SQL necesare populării tabelei de fapte

FAPTE2

INSERT INTO "ANA"."FAPTE2"

(TIMP_LEAVES,AGENT_LEAVES,NR_BENEF) VALUES('AUG03','AG001',20);

INSERT INTO "ANA"."FAPTE2"

(TIMP_LEAVES,AGENT_LEAVES,NR_BENEF) VALUES('DEC03','AG001',21);

INSERT INTO "ANA"."FAPTE2"

(TIMP_LEAVES,AGENT_LEAVES,NR_BENEF) VALUES('JAN04','AG001',28);

INSERT INTO "ANA"."FAPTE2"

(TIMP_LEAVES,AGENT_LEAVES,NR_BENEF) VALUES('JAN05','AG031',14);

quit;

loadFAPTE3.sql – fişierul ce conţine liniile SQL necesare populării tabelei de fapte

FAPTE3 - foloseşte un cursor ce preia datele necesare din tabelele FAPTE1 şi BENEFICIAR

DECLARE

vben fapte1.beneficiar_leaves%type;

vpret beneficiar.pretjet%type;

vtimp fapte1.timp_leaves%type;

CURSOR c1 IS SELECT DISTINCT beneficiar_leaves,timp_leaves,pretjet FROM

fapte1 A, beneficiar B WHERE A.beneficiar_leaves=B.ben;

BEGIN

OPEN c1;

LOOP

FETCH c1 INTO vben,vtimp,vpret;

EXIT WHEN c1%NOTFOUND;

Pagina 133 din 207

Page 134: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

INSERT INTO fapte3 VALUES (vben,vtimp,vpret);

END LOOP;

CLOSE c1;

END;

/

commit;

quit;

tkgsxini2.sql – fişierul ce creează toate dimensiunile

Rem NAME

Rem tkgsxini2.sql - Initializarea schemei ANA

Rem

Rem DESCRIPTION

Rem Create dimensions, create indexes, analyze tables.

Rem

connect ana/florea

CREATE DIMENSION ANA.AGENT

LEVEL L1 IS AGENT.TARA

LEVEL L2 IS AGENT.JUDET

LEVEL L3 IS AGENT.AGENT

HIERARCHY STANDARD (L3 CHILD OF L2 CHILD OF L1)

ATTRIBUTE L1 DETERMINES (AGENT.TARA_LLABEL,

AGENT.TARA_SLABEL)

ATTRIBUTE L2 DETERMINES (AGENT.JUDET_LLABEL,

AGENT.JUDET_SLABEL)

ATTRIBUTE L3 DETERMINES (AGENT.AGENT_LLABEL,

AGENT.AGENT_SLABEL);

begin

Pagina 134 din 207

Page 135: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_classify.remove_entity_descriptor_use(28, cwm_utility.DIMENSION_TYPE,

'ANA', 'AGENT');

cwm_olap_dimension.set_plural_name('ANA', 'AGENT', 'AGENT');

cwm_olap_dimension.set_default_display_hierarchy('ANA', 'AGENT',

'STANDARD');

cwm_olap_dimension.set_display_name('ANA', 'AGENT', 'AGENT');

cwm_olap_dimension.set_description('ANA', 'AGENT', 'Agent');

cwm_olap_level.set_display_name('ANA', 'AGENT', 'L1', 'L1');

cwm_olap_level.set_description('ANA', 'AGENT', 'L1', 'Toti agentii');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L1', 'TARA_LLABEL',

'TARA_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L1', 'TARA_SLABEL',

'TARA_SLABEL');

cwm_olap_level.set_display_name('ANA', 'AGENT', 'L2', 'L2');

cwm_olap_level.set_description('ANA', 'AGENT', 'L2', 'Agentii pe judete');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L2', 'JUDET_LLABEL',

'JUDET_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L2', 'JUDET_SLABEL',

'JUDET_SLABEL');

cwm_olap_level.set_display_name('ANA', 'AGENT', 'L3', 'L3');

cwm_olap_level.set_description('ANA', 'AGENT', 'L3', 'Agent');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L3', 'AGENT_LLABEL',

'AGENT_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'AGENT', 'L3', 'AGENT_SLABEL',

'AGENT_SLABEL');

cwm_olap_hierarchy.set_display_name('ANA', 'AGENT', 'STANDARD',

'STANDARD');

cwm_olap_hierarchy.set_description('ANA', 'AGENT', 'STANDARD', 'Ierarhia

Standard');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'AGENT',

'Dimensiunea_agentilor', 'Dimensiunea_agentilor', 'Dim AGENT');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'AGENT',

'Dimensiunea_agentilor');

Pagina 135 din 207

Page 136: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'AGENT', 'Dim_ag',

'Dim_ag', 'Agent');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'Dim_ag');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT',

'Dimensiunea_agentilor', 'L1', 'TARA_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT', 'Dim_ag', 'L1',

'TARA_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT',

'Dimensiunea_agentilor', 'L2', 'JUDET_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT', 'Dim_ag', 'L2',

'JUDET_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT',

'Dimensiunea_agentilor', 'L3', 'AGENT_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'AGENT', 'Dim_ag', 'L3',

'AGENT_SLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L1', 'TARA_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L2', 'JUDET_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L3', 'AGENT_LLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L2', 'JUDET_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L1', 'TARA_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'AGENT', 'L3', 'AGENT_SLABEL');

commit;

end;

/

CREATE DIMENSION ANA.BENEFICIAR

LEVEL L1 IS BENEFICIAR.TOP

Pagina 136 din 207

Page 137: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

LEVEL L2 IS BENEFICIAR.JUDET

LEVEL L3 IS BENEFICIAR.LOCATIE

LEVEL L4 IS BENEFICIAR.BEN

HIERARCHY STANDARD (L4 CHILD OF L3 CHILD OF L2 CHILD OF L1)

HIERARCHY PE_JUDET (L4 CHILD OF L2 CHILD OF L1)

ATTRIBUTE L1 DETERMINES (BENEFICIAR.TOP_LLABEL,

BENEFICIAR.TOP_SLABEL)

ATTRIBUTE L2 DETERMINES (BENEFICIAR.JUDET_LLABEL,

BENEFICIAR.JUDET_SLABEL)

ATTRIBUTE L3 DETERMINES BENEFICIAR.LOCATIE

ATTRIBUTE L4 DETERMINES (BENEFICIAR.BEN_LLABEL,

BENEFICIAR.BEN_SLABEL);

begin

cwm_classify.remove_entity_descriptor_use(28, cwm_utility.DIMENSION_TYPE,

'ANA', 'BENEFICIAR');

cwm_olap_dimension.set_plural_name('ANA', 'BENEFICIAR', 'BENEFICIAR');

cwm_olap_dimension.set_default_display_hierarchy('ANA', 'BENEFICIAR',

'STANDARD');

cwm_olap_dimension.set_display_name('ANA', 'BENEFICIAR', 'BENEFICIAR');

cwm_olap_dimension.set_description('ANA', 'BENEFICIAR', 'Beneficiar');

cwm_olap_level.set_display_name('ANA', 'BENEFICIAR', 'L1', 'L1');

cwm_olap_level.set_description('ANA', 'BENEFICIAR', 'L1', 'Toti beneficiarii');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L1', 'TOP_LLABEL',

'TOP_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L1', 'TOP_SLABEL',

'TOP_SLABEL');

cwm_olap_level.set_display_name('ANA', 'BENEFICIAR', 'L2', 'L2');

cwm_olap_level.set_description('ANA', 'BENEFICIAR', 'L2', 'Beneficiarii pe judete');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L2', 'JUDET_LLABEL',

'JUDET_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L2', 'JUDET_SLABEL',

'JUDET_SLABEL');

cwm_olap_level.set_display_name('ANA', 'BENEFICIAR', 'L3', 'L3');

Pagina 137 din 207

Page 138: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_level.set_description('ANA', 'BENEFICIAR', 'L3', 'Beneficiarii pe

locatie');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L3', 'LOCATIE',

'LOCATIE');

cwm_olap_level.set_display_name('ANA', 'BENEFICIAR', 'L4', 'L4');

cwm_olap_level.set_description('ANA', 'BENEFICIAR', 'L4', 'Beneficiar');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L4', 'BEN_LLABEL',

'BEN_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'BENEFICIAR', 'L4', 'BEN_SLABEL',

'BEN_SLABEL');

cwm_olap_hierarchy.set_display_name('ANA', 'BENEFICIAR', 'STANDARD',

'STANDARD');

cwm_olap_hierarchy.set_description('ANA', 'BENEFICIAR', 'STANDARD', 'Ierarhia

Standard');

cwm_olap_hierarchy.set_display_name('ANA', 'BENEFICIAR', 'PE_JUDET',

'PE_JUDET');

cwm_olap_hierarchy.set_description('ANA', 'BENEFICIAR', 'PE_JUDET', 'Ierarhia

pe judete');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar', 'Dimensiunea_Beneficiar', 'Dim BENEFICIAR');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'BENEFICIAR',

'Dim_BENEF', 'Dim_BENEF', 'Beneficiar');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'Dim_BENEF');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar', 'L1', 'TOP_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR', 'Dim_BENEF',

'L1', 'TOP_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar', 'L2', 'JUDET_LLABEL');

Pagina 138 din 207

Page 139: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR', 'Dim_BENEF',

'L2', 'JUDET_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar', 'L3', 'LOCATIE');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR', 'Dim_BENEF',

'L3', 'LOCATIE');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR',

'Dimensiunea_Beneficiar', 'L4', 'BEN_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'BENEFICIAR', 'Dim_BENEF',

'L4', 'BEN_SLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L1', 'TOP_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L2',

'JUDET_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L3', 'LOCATIE');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L4', 'BEN_LLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L1', 'TOP_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L2',

'JUDET_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L3', 'LOCATIE');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'BENEFICIAR', 'L4', 'BEN_SLABEL');

commit;

end;

/

CREATE DIMENSION ANA.TIMP

LEVEL AN IS TIMP.TIMP_AN

Pagina 139 din 207

Page 140: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

LEVEL TRIM IS TIMP.TIMP_TRIM

LEVEL LUNA IS TIMP.TIMP_LUNA

HIERARCHY STANDARD (LUNA CHILD OF TRIM CHILD OF AN)

ATTRIBUTE AN DETERMINES (TIMP.TIMP_AN_LLABEL,

TIMP.TIMP_AN_SLABEL, TIMP.TIMP_SFARSIT_AN, TIMP.TIMP_DURATA_AN)

ATTRIBUTE TRIM DETERMINES (TIMP.TIMP_TRIM_LLABEL,

TIMP.TIMP_TRIM_SLABEL, TIMP.TIMP_SFARSIT_TRIM,

TIMP.TIMP_DURATA_TRIM)

ATTRIBUTE LUNA DETERMINES (TIMP.TIMP_LUNA_LLABEL,

TIMP.TIMP_LUNA_SLABEL, TIMP.TIMP_SFARSIT_LUNA,

TIMP.TIMP_DURATA_LUNA);

begin

cwm_classify.add_entity_descriptor_use(28, cwm_utility.DIMENSION_TYPE,

'ANA', 'TIMP');

cwm_olap_dimension.set_plural_name('ANA', 'TIMP', 'TIMP');

cwm_olap_dimension.set_default_display_hierarchy('ANA', 'TIMP', 'STANDARD');

cwm_olap_dimension.set_display_name('ANA', 'TIMP', 'TIMP');

cwm_olap_dimension.set_description('ANA', 'TIMP', 'Timp');

cwm_olap_level.set_display_name('ANA', 'TIMP', 'AN', 'AN');

cwm_olap_level.set_description('ANA', 'TIMP', 'AN', 'Ani');

cwm_classify.add_entity_descriptor_use(51, cwm_utility.LEVEL_TYPE, 'ANA',

'TIMP', 'AN');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'AN', 'TIMP_AN_LLABEL',

'TIMP_AN_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'AN', 'TIMP_AN_SLABEL',

'TIMP_AN_SLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'AN', 'TIMP_SFARSIT_AN',

'TIMP_SFARSIT_AN');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'AN', 'TIMP_DURATA_AN',

'TIMP_DURATA_AN');

cwm_olap_level.set_display_name('ANA', 'TIMP', 'TRIM', 'TRIM');

cwm_olap_level.set_description('ANA', 'TIMP', 'TRIM', 'Trimestre');

Pagina 140 din 207

Page 141: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_classify.add_entity_descriptor_use(50, cwm_utility.LEVEL_TYPE, 'ANA',

'TIMP', 'TRIM');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'TRIM',

'TIMP_TRIM_LLABEL', 'TIMP_TRIM_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'TRIM',

'TIMP_TRIM_SLABEL', 'TIMP_TRIM_SLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'TRIM',

'TIMP_SFARSIT_TRIM', 'TIMP_SFARSIT_TRIM');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'TRIM',

'TIMP_DURATA_TRIM', 'TIMP_DURATA_TRIM');

cwm_olap_level.set_display_name('ANA', 'TIMP', 'LUNA', 'LUNA');

cwm_olap_level.set_description('ANA', 'TIMP', 'LUNA', 'Luni');

cwm_classify.add_entity_descriptor_use(49, cwm_utility.LEVEL_TYPE, 'ANA',

'TIMP', 'LUNA');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'LUNA',

'TIMP_LUNA_LLABEL', 'TIMP_LUNA_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'LUNA',

'TIMP_LUNA_SLABEL', 'TIMP_LUNA_SLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'LUNA',

'TIMP_SFARSIT_LUNA', 'TIMP_SFARSIT_LUNA');

cwm_olap_level_attribute.set_name('ANA', 'TIMP', 'LUNA',

'TIMP_DURATA_LUNA', 'TIMP_DURATA_LUNA');

cwm_olap_hierarchy.set_display_name('ANA', 'TIMP', 'STANDARD',

'STANDARD');

cwm_olap_hierarchy.set_description('ANA', 'TIMP', 'STANDARD', 'Ierarhia

STANDARD');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIMP',

'Dimensiunea_TIMP', 'Dimensiunea_TIMP', 'Dim TIMP');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'Dimensiunea_TIMP');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIMP', 'Dim_TIMP',

'Dim_TIMP', 'Timp');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'Dim_TIMP');

Pagina 141 din 207

Page 142: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIMP', 'Data_sfarsit',

'Data_sfarsit', 'Sfarsitul intervalului');

cwm_classify.add_entity_descriptor_use(55,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'Data_sfarsit');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIMP',

'Durata_interval', 'Durata_interval', 'Durata intervalului');

cwm_classify.add_entity_descriptor_use(56,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'Durata_interval');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dimensiunea_TIMP',

'AN', 'TIMP_AN_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dim_TIMP', 'AN',

'TIMP_AN_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Data_sfarsit', 'AN',

'TIMP_SFARSIT_AN');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Durata_interval', 'AN',

'TIMP_DURATA_AN');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dimensiunea_TIMP',

'TRIM', 'TIMP_TRIM_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dim_TIMP', 'TRIM',

'TIMP_TRIM_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Data_sfarsit', 'TRIM',

'TIMP_SFARSIT_TRIM');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Durata_interval',

'TRIM', 'TIMP_DURATA_TRIM');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dimensiunea_TIMP',

'LUNA', 'TIMP_LUNA_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Dim_TIMP', 'LUNA',

'TIMP_LUNA_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Data_sfarsit', 'LUNA',

'TIMP_SFARSIT_LUNA');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIMP', 'Durata_interval',

'LUNA', 'TIMP_DURATA_LUNA');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'AN', 'TIMP_AN_LLABEL');

Pagina 142 din 207

Page 143: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'TRIM',

'TIMP_TRIM_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'LUNA',

'TIMP_LUNA_LLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'AN', 'TIMP_AN_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'TRIM',

'TIMP_TRIM_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'LUNA',

'TIMP_LUNA_SLABEL');

cwm_classify.add_entity_descriptor_use(55,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'AN', 'TIMP_SFARSIT_AN');

cwm_classify.add_entity_descriptor_use(55,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'TRIM',

'TIMP_SFARSIT_TRIM');

cwm_classify.add_entity_descriptor_use(55,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'LUNA',

'TIMP_SFARSIT_LUNA');

cwm_classify.add_entity_descriptor_use(56,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'AN', 'TIMP_DURATA_AN');

cwm_classify.add_entity_descriptor_use(56,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'TRIM',

'TIMP_DURATA_TRIM');

cwm_classify.add_entity_descriptor_use(56,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIMP', 'LUNA',

'TIMP_DURATA_LUNA');

commit;

end;

/

Pagina 143 din 207

Page 144: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CREATE DIMENSION ANA.APARAT

LEVEL L1 IS APARAT.CATEG

LEVEL L2 IS APARAT.TIP

LEVEL L3 IS APARAT.MATRICOL

LEVEL L4 IS APARAT.BEN

LEVEL L5 IS APARAT.LOCATIE

LEVEL L6 IS APARAT.JUDET

LEVEL L7 IS APARAT.TARA

HIERARCHY STANDARD (L3 CHILD OF L2 CHILD OF L1)

HIERARCHY DUPA_BENEFICIAR (L3 CHILD OF L4 CHILD OF L6 CHILD OF

L7)

HIERARCHY DUPA_LOCATIE (L3 CHILD OF L5 CHILD OF L6 CHILD OF L7)

HIERARCHY DUPA_JUDET (L3 CHILD OF L6 CHILD OF L7)

ATTRIBUTE L1 DETERMINES (APARAT.CATEG_LLABEL,

APARAT.CATEG_SLABEL)

ATTRIBUTE L2 DETERMINES (APARAT.TIP_LLABEL,

APARAT.TIP_SLABEL)

ATTRIBUTE L3 DETERMINES APARAT.MATRICOL

ATTRIBUTE L4 DETERMINES APARAT.BEN

ATTRIBUTE L5 DETERMINES (APARAT.LOCATIE_LLABEL,

APARAT.LOCATIE_SLABEL)

ATTRIBUTE L6 DETERMINES (APARAT.JUDET_LLABEL,

APARAT.JUDET_SLABEL)

ATTRIBUTE L7 DETERMINES (APARAT.TARA_LLABEL,

APARAT.TARA_SLABEL);

begin

cwm_classify.remove_entity_descriptor_use(28, cwm_utility.DIMENSION_TYPE,

'ANA', 'APARAT');

cwm_olap_dimension.set_plural_name('ANA', 'APARAT', 'APARAT');

cwm_olap_dimension.set_default_display_hierarchy('ANA', 'APARAT',

'STANDARD');

cwm_olap_dimension.set_display_name('ANA', 'APARAT', 'APARAT');

cwm_olap_dimension.set_description('ANA', 'APARAT', 'Dimensiunea APARAT');

Pagina 144 din 207

Page 145: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L1', 'L1');

cwm_olap_level.set_description('ANA', 'APARAT', 'L1', 'Nivelul Categ');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L1', 'CATEG_LLABEL',

'CATEG_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L1', 'CATEG_SLABEL',

'CATEG_SLABEL');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L2', 'L2');

cwm_olap_level.set_description('ANA', 'APARAT', 'L2', 'Nivelul Tip');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L2', 'TIP_LLABEL',

'TIP_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L2', 'TIP_SLABEL',

'TIP_SLABEL');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L3', 'L3');

cwm_olap_level.set_description('ANA', 'APARAT', 'L3', 'Nivelul Matricol');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L3', 'MATRICOL',

'MATRICOL');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L4', 'L4');

cwm_olap_level.set_description('ANA', 'APARAT', 'L4', 'Nivelul Ben');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L4', 'BEN', 'BEN');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L5', 'L5');

cwm_olap_level.set_description('ANA', 'APARAT', 'L5', 'Nivelul Locatie');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L5', 'LOCATIE_LLABEL',

'LOCATIE_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L5', 'LOCATIE_SLABEL',

'LOCATIE_SLABEL');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L6', 'L6');

cwm_olap_level.set_description('ANA', 'APARAT', 'L6', 'Nivelul Judet');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L6', 'JUDET_LLABEL',

'JUDET_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L6', 'JUDET_SLABEL',

'JUDET_SLABEL');

cwm_olap_level.set_display_name('ANA', 'APARAT', 'L7', 'L7');

cwm_olap_level.set_description('ANA', 'APARAT', 'L7', 'Nivelul Tara');

Pagina 145 din 207

Page 146: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L7', 'TARA_LLABEL',

'TARA_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'APARAT', 'L7', 'TARA_SLABEL',

'TARA_SLABEL');

cwm_olap_hierarchy.set_display_name('ANA', 'APARAT', 'STANDARD',

'STANDARD');

cwm_olap_hierarchy.set_description('ANA', 'APARAT', 'STANDARD', 'Ierarhia

STANDARD');

cwm_olap_hierarchy.set_display_name('ANA', 'APARAT', 'DUPA_BENEFICIAR',

'DUPA_BENEFICIAR');

cwm_olap_hierarchy.set_description('ANA', 'APARAT', 'DUPA_BENEFICIAR',

'Ierarhia dupa beneficiar');

cwm_olap_hierarchy.set_display_name('ANA', 'APARAT', 'DUPA_LOCATIE',

'DUPA_LOCATIE');

cwm_olap_hierarchy.set_description('ANA', 'APARAT', 'DUPA_LOCATIE',

'Ierarhia dupa Locatie');

cwm_olap_hierarchy.set_display_name('ANA', 'APARAT', 'DUPA_JUDET',

'DUPA_JUDET');

cwm_olap_hierarchy.set_description('ANA', 'APARAT', 'DUPA_JUDET', 'Ierarhia

dupa Judet');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'Dimensiunea_aparat', 'Aparate');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'Dimensiunea_aparat');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'APARAT',

'Dim_aparat', 'Dim_aparat', 'Aparate');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'Dim_aparat');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L1', 'CATEG_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L1',

'CATEG_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L2', 'TIP_LLABEL');

Pagina 146 din 207

Page 147: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L2',

'TIP_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L3', 'MATRICOL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L3',

'MATRICOL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L4', 'BEN');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L4',

'BEN');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L5', 'LOCATIE_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L5',

'LOCATIE_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L6', 'JUDET_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L6',

'JUDET_SLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT',

'Dimensiunea_aparat', 'L7', 'TARA_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'APARAT', 'Dim_aparat', 'L7',

'TARA_SLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L4', 'BEN');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L1', 'CATEG_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L2', 'TIP_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L3', 'MATRICOL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L5', 'LOCATIE_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L6', 'JUDET_LLABEL');

Pagina 147 din 207

Page 148: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L7', 'TARA_LLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L4', 'BEN');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L1', 'CATEG_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L2', 'TIP_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L3', 'MATRICOL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L5', 'LOCATIE_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L6', 'JUDET_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'APARAT', 'L7', 'TARA_SLABEL');

commit;

end;

/

CREATE DIMENSION ANA.TIPBAUTURA

LEVEL L1 IS TIPBAUTURA.CATEG

LEVEL L2 IS TIPBAUTURA.BAUTURA

HIERARCHY STANDARD (L2 CHILD OF L1)

ATTRIBUTE L1 DETERMINES (TIPBAUTURA.CATEG_LLABEL,

TIPBAUTURA.CATEG_SLABEL)

ATTRIBUTE L2 DETERMINES (TIPBAUTURA.BAUTURA_LLABEL,

TIPBAUTURA.BAUTURA_SLABEL);

begin

cwm_classify.remove_entity_descriptor_use(28, cwm_utility.DIMENSION_TYPE,

'ANA', 'TIPBAUTURA');

cwm_olap_dimension.set_plural_name('ANA', 'TIPBAUTURA', 'TIPBAUTURA');

Pagina 148 din 207

Page 149: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dimension.set_default_display_hierarchy('ANA', 'TIPBAUTURA',

'STANDARD');

cwm_olap_dimension.set_display_name('ANA', 'TIPBAUTURA', 'TIPBAUTURA');

cwm_olap_dimension.set_description('ANA', 'TIPBAUTURA', 'Bautura');

cwm_olap_level.set_display_name('ANA', 'TIPBAUTURA', 'L1', 'L1');

cwm_olap_level.set_description('ANA', 'TIPBAUTURA', 'L1', 'Toate bauturile');

cwm_olap_level_attribute.set_name('ANA', 'TIPBAUTURA', 'L1',

'CATEG_LLABEL', 'CATEG_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIPBAUTURA', 'L1',

'CATEG_SLABEL', 'CATEG_SLABEL');

cwm_olap_level.set_display_name('ANA', 'TIPBAUTURA', 'L2', 'L2');

cwm_olap_level.set_description('ANA', 'TIPBAUTURA', 'L2', 'Bautura');

cwm_olap_level_attribute.set_name('ANA', 'TIPBAUTURA', 'L2',

'BAUTURA_LLABEL', 'BAUTURA_LLABEL');

cwm_olap_level_attribute.set_name('ANA', 'TIPBAUTURA', 'L2',

'BAUTURA_SLABEL', 'BAUTURA_SLABEL');

cwm_olap_hierarchy.set_display_name('ANA', 'TIPBAUTURA', 'STANDARD',

'STANDARD');

cwm_olap_hierarchy.set_description('ANA', 'TIPBAUTURA', 'STANDARD',

'Ierarhia STANDARD');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIPBAUTURA',

'Dimensiunea_BAUTURA', 'Dimensiunea_BAUTURA', 'Dim BAUTURA');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA',

'Dimensiunea_BAUTURA');

cwm_olap_dim_attribute.create_dimension_attribute('ANA', 'TIPBAUTURA',

'Dim_BAUTURA', 'Dim_BAUTURA', 'Bautura');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.DIMENSION_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA',

'Dim_BAUTURA');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIPBAUTURA',

'Dimensiunea_BAUTURA', 'L1', 'CATEG_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIPBAUTURA',

'Dim_BAUTURA', 'L1', 'CATEG_SLABEL');

Pagina 149 din 207

Page 150: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIPBAUTURA',

'Dimensiunea_BAUTURA', 'L2', 'BAUTURA_LLABEL');

cwm_olap_dim_attribute.add_level_attribute('ANA', 'TIPBAUTURA',

'Dim_BAUTURA', 'L2', 'BAUTURA_SLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA', 'L1',

'CATEG_LLABEL');

cwm_classify.add_entity_descriptor_use(41,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA', 'L2',

'BAUTURA_LLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA', 'L1',

'CATEG_SLABEL');

cwm_classify.add_entity_descriptor_use(42,

cwm_utility.LEVEL_ATTRIBUTE_TYPE, 'ANA', 'TIPBAUTURA', 'L2',

'BAUTURA_SLABEL');

commit;

end;

/

quit;

create_analytic_cube.sql – fişierul ce creează cuburile şi directorul de măsuri

set serveroutput on size 99999;

begin

dbms_output.put_line('Drop cube CUB1 prior to recreation');

cwm_olap_cube.drop_cube('ANA', 'CUB1');

dbms_output.put_line('Cube Dropped');

exception

when cwm_exceptions.cube_not_found then

dbms_output.put_line('No cube to drop');

end;

Pagina 150 din 207

Page 151: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

/

begin

dbms_output.put_line('Drop cube CUB2 prior to recreation');

cwm_olap_cube.drop_cube('ANA', 'CUB2');

dbms_output.put_line('Cube Dropped');

exception

when cwm_exceptions.cube_not_found then

dbms_output.put_line('No cube to drop');

end;

/

begin

dbms_output.put_line('Drop cube CUB3 prior to recreation');

cwm_olap_cube.drop_cube('ANA', 'CUB3');

dbms_output.put_line('Cube Dropped');

exception

when cwm_exceptions.cube_not_found then

dbms_output.put_line('No cube to drop');

end;

/

declare

AGENT_DIM number;

APARAT_DIM number;

BENEFICIAR_DIM number;

TIMP_DIM number;

TIPBAUTURA_DIM number;

tmp number;

begin

CWM_OLAP_CUBE.Create_Cube('ANA', 'CUB1', 'CUB1', 'Cantitati vandute');

AGENT_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB1', 'ANA',

'AGENT', 'AGENT');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB1', 'STANDARD',

'ANA', 'AGENT', 'AGENT');

Pagina 151 din 207

Page 152: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB1', 'ANA', 'FAPTE1', 'FK_AGENT',

'L3', 'ANA', 'AGENT', 'AGENT');

APARAT_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB1', 'ANA',

'APARAT', 'APARAT');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB1', 'STANDARD',

'ANA', 'APARAT', 'APARAT');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB1', 'ANA', 'FAPTE1', 'FK_APARAT',

'L3', 'ANA', 'APARAT', 'APARAT');

BENEFICIAR_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB1',

'ANA', 'BENEFICIAR', 'BENEFICIAR');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB1', 'STANDARD',

'ANA', 'BENEFICIAR', 'BENEFICIAR');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB1', 'ANA', 'FAPTE1',

'FK_BENEFICIAR', 'L4', 'ANA', 'BENEFICIAR', 'BENEFICIAR');

TIMP_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB1', 'ANA',

'TIMP', 'TIMP');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB1', 'STANDARD',

'ANA', 'TIMP', 'TIMP');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB1', 'ANA', 'FAPTE1', 'FK_TIMP',

'LUNA', 'ANA', 'TIMP', 'TIMP');

TIPBAUTURA_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB1',

'ANA', 'TIPBAUTURA', 'TIPBAUTURA');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB1', 'STANDARD',

'ANA', 'TIPBAUTURA', 'TIPBAUTURA');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB1', 'ANA', 'FAPTE1',

'FK_BAUTURA', 'L2', 'ANA', 'TIPBAUTURA', 'TIPBAUTURA');

CWM_OLAP_MEASURE.Create_Measure('ANA', 'CUB1', 'CANT_VANDUTA',

'CANT VANDUTA', 'Numarul de bauturi vandute');

CWM_OLAP_MEASURE.Set_Column_Map('ANA', 'CUB1', 'CANT_VANDUTA',

'ANA', 'FAPTE1', 'CANT_VANDUTA');

tmp:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB1',

'CANT_VANDUTA', tmp, 'ANA', 'AGENT', 'AGENT');

tmp:= cwm_utility.create_function_usage('SUM');

Pagina 152 din 207

Page 153: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB1',

'CANT_VANDUTA', tmp, 'ANA', 'APARAT', 'APARAT');

tmp:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB1',

'CANT_VANDUTA', tmp, 'ANA', 'BENEFICIAR', 'BENEFICIAR');

tmp:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB1',

'CANT_VANDUTA', tmp, 'ANA', 'TIMP', 'TIMP');

tmp:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB1',

'CANT_VANDUTA', tmp, 'ANA', 'TIPBAUTURA', 'TIPBAUTURA');

commit;

end;

/

declare

AGENT2_DIM number;

TIMP2_DIM number;

tmp2 number;

begin

CWM_OLAP_CUBE.Create_Cube('ANA', 'CUB2', 'CUB2', 'Numarul de

beneficiari');

AGENT2_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB2', 'ANA',

'AGENT', 'AGENT');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB2', 'STANDARD',

'ANA', 'AGENT', 'AGENT');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB2', 'ANA', 'FAPTE2', 'FK_AGENT2',

'L3', 'ANA', 'AGENT', 'AGENT');

TIMP2_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB2', 'ANA',

'TIMP', 'TIMP');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB2', 'STANDARD',

'ANA', 'TIMP', 'TIMP');

Pagina 153 din 207

Page 154: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB2', 'ANA', 'FAPTE2', 'FK_TIMP2',

'LUNA', 'ANA', 'TIMP', 'TIMP');

CWM_OLAP_MEASURE.Create_Measure('ANA', 'CUB2', 'NR_BENEF', 'NR

BENEF', 'Numarul de beneficiari vizitati de un agent in unitatea de timp');

CWM_OLAP_MEASURE.Set_Column_Map('ANA', 'CUB2', 'NR_BENEF', 'ANA',

'FAPTE2', 'NR_BENEF');

tmp2:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB2', 'NR_BENEF',

tmp2, 'ANA', 'AGENT', 'AGENT');

tmp2:= cwm_utility.create_function_usage('SUM');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB2', 'NR_BENEF',

tmp2, 'ANA', 'TIMP', 'TIMP');

commit;

end;

/

declare

BENEFICIAR3_DIM number;

TIMP3_DIM number;

tmp3 number;

begin

CWM_OLAP_CUBE.Create_Cube('ANA', 'CUB3', 'CUB3', 'Pretul mediu al unui

jeton');

BENEFICIAR3_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB3',

'ANA', 'BENEFICIAR', 'BENEFICIAR');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB3', 'STANDARD',

'ANA', 'BENEFICIAR', 'BENEFICIAR');

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB3', 'ANA', 'FAPTE3',

'FK_BENEFICIAR3', 'L4', 'ANA', 'BENEFICIAR', 'BENEFICIAR');

TIMP3_DIM := CWM_OLAP_CUBE.Add_Dimension('ANA', 'CUB3', 'ANA',

'TIMP', 'TIMP');

CWM_OLAP_CUBE.Set_Default_Calc_Hierarchy('ANA', 'CUB3', 'STANDARD',

'ANA', 'TIMP', 'TIMP');

Pagina 154 din 207

Page 155: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

CWM_OLAP_CUBE.Map_Cube('ANA', 'CUB3', 'ANA', 'FAPTE3', 'FK_TIMP3',

'LUNA', 'ANA', 'TIMP', 'TIMP');

CWM_OLAP_MEASURE.Create_Measure('ANA', 'CUB3', 'PRET_JET', 'PRET

JET', 'Pretul mediu al unui jeton');

CWM_OLAP_MEASURE.Set_Column_Map('ANA', 'CUB3', 'PRET_JET', 'ANA',

'FAPTE3', 'PRET_JET');

tmp3:= cwm_utility.create_function_usage('AVG');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB3', 'PRET_JET',

tmp3, 'ANA', 'BENEFICIAR', 'BENEFICIAR');

tmp3:= cwm_utility.create_function_usage('AVG');

cwm_olap_measure.set_default_aggregation_method('ANA', 'CUB3', 'PRET_JET',

tmp3, 'ANA', 'TIMP', 'TIMP');

commit;

end;

/

declare

id number;

id2 number;

begin

id := CWM_CLASSIFY.Create_Catalog('DATE VANZARI', 'Masurile cantitate

vanduta si pret jeton', null);

CWM_CLASSIFY.Add_Catalog_Entity(id, 'ANA', 'CUB1', 'CANT_VANDUTA');

CWM_CLASSIFY.Add_Catalog_Entity(id, 'ANA', 'CUB2', 'NR_BENEF');

CWM_CLASSIFY.Add_Catalog_Entity(id, 'ANA', 'CUB3', 'PRET_JET');

commit;

end;

/

quit;

metadatafix.sql – fişierul ce apelează comanda de reactualizare a obiectelor OLAP,

fiind necesară apelarea manuală a acestuia de fiecare dată când se intervine asupra

dimensiunilor, cuburilor sau măsurilor

Pagina 155 din 207

Page 156: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

execute cwm2_olap_metadata_refresh.mr_refresh;

commit;

quit;

Pagina 156 din 207

Page 157: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

ANEXA 2

CODUL SCRIS ÎN LIMBAJUL JAVA

Interfaţa sistemului OLAP a fost realizată cu instrumentul JDeveloper 10g. În această

anexă sunt prezentate principalele frame-uri ale aplicaţiei, elementele lor componente,

precum şi codul scris în Java.

1. Frame-ul principal:

meniul aplicaţiei (figura a2.1)

Figura a2.1: Meniul aplicaţiei

codul scris în Java:

package mypackage1;

import java.awt.BorderLayout;

import java.awt.Dimension;

Pagina 157 din 207

Page 158: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

import java.awt.GridBagConstraints;

import java.awt.GridBagLayout;

import java.awt.GridLayout;

import java.awt.Frame;

import java.awt.Insets;

import java.awt.Toolkit;

import java.awt.event.ActionEvent;

import java.awt.event.ActionListener;

import java.awt.event.WindowEvent;

import java.util.Hashtable;

import java.util.Vector;

import javax.naming.directory.Attributes;

import javax.naming.directory.SearchControls;

import javax.swing.JDialog;

import javax.swing.JFrame;

import javax.swing.JLabel;

import javax.swing.JMenu;

import javax.swing.JMenuBar;

import javax.swing.JMenuItem;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import javax.swing.Icon;

import javax.swing.SwingConstants;

import javax.swing.UIManager;

import oracle.bali.ewt.olaf.OracleLookAndFeel;

import oracle.bali.ewt.dialog.JEWTDialog;

import oracle.bali.ewt.util.WindowUtils;

import oracle.bali.share.nls.StringUtils;

Pagina 158 din 207

Page 159: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

import oracle.dss.appmodule.client.BISession;

import oracle.dss.bicontext.BIFilter;

import oracle.dss.bicontext.BISearchResult;

import oracle.dss.bicontext.BISearchControls;

import oracle.dss.bicontext.ManagerFactory;

import oracle.dss.calculation.client.calcBuilder.CalcBuilderStepStorage;

import oracle.dss.crosstab.Crosstab;

import oracle.dss.crosstab.CrosstabPrinter;

import oracle.dss.crosstab.UICrosstab;

import oracle.dss.dataSource.common.QueryException;

import oracle.dss.dataSource.common.Query;

import oracle.dss.dataSource.client.QueryManager;

import oracle.dss.datautil.QueryAccess;

import oracle.dss.datautil.QueryContext;

import oracle.dss.dataView.Dataview;

import oracle.dss.dataView.ViewPrinter;

import oracle.dss.dataView.gui.PrintDialog;

import oracle.dss.dataView.gui.ToolBar;

import oracle.dss.graph.Graph;

import oracle.dss.graph.GraphPrinter;

import oracle.dss.graph.gui.GraphLayout;

import oracle.dss.graph.gui.GraphToolBar;

import oracle.dss.gridView.UIGridView;

import oracle.dss.gridView.gui.ExportPanel;

import oracle.dss.gridView.gui.GridViewToolBar;

Pagina 159 din 207

Page 160: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

import oracle.dss.metadataManager.common.MDMeasure;

import oracle.dss.metadataManager.common.MDRoot;

import oracle.dss.metadataManager.client.MetadataManager;

import oracle.dss.metadataManager.common.MetadataManagerException;

import oracle.dss.metadataManager.common.MM;

import oracle.dss.persistence.gui.PersistenceObjectChooser;

import oracle.dss.persistence.gui.PersistenceObjectFilter;

import oracle.dss.persistence.persistencemanager.common.PersistenceManager;

import oracle.dss.queryBuilder.QueryBuilder;

import oracle.dss.selection.Selection;

import oracle.dss.selection.SelectionException;

import oracle.dss.selection.step.InvalidStepArgException;

import oracle.dss.selection.step.MemberStep;

import oracle.dss.table.Table;

import oracle.dss.table.TablePrinter;

import oracle.dss.table.UITable;

import oracle.dss.util.BIException;

import oracle.dss.util.LayoutContext;

import oracle.dss.util.LayerMetadataMap;

import oracle.dss.util.gui.BIExceptionDialog;

import oracle.dss.util.gui.layout.CrosstabLayout;

import oracle.dss.util.gui.layout.Layout;

import oracle.dss.util.gui.layout.TableLayout;

import oracle.dss.util.persistence.PersistableConstants;

import oracle.dss.addins.runtime.beanRef.CrosstabRef;

import java.awt.Rectangle;

import javax.swing.BorderFactory;

import java.awt.Color;

import oracle.dss.addins.runtime.beanRef.GraphRef;

Pagina 160 din 207

Page 161: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

import oracle.dss.addins.runtime.beanRef.DefinitionInfo;

import javax.swing.JButton;

import java.awt.Font;

import javax.swing.DefaultButtonModel;

import javax.swing.JToggleButton.ToggleButtonModel;

import java.awt.SystemColor;

public class BIApplication1 extends JFrame {

// All the menu title with the mnmonic keys.

// You can put these String into a resource files for

// international supoport.

private static final String FILE = "&Optiuni";

private static final String TOOLS = "&Tools";

private static final String HELP = "&Help";

private static final String FILE_OPEN = "&Deschide...";

private static final String FILE_SAVE = "&Salveaza";

private static final String FILE_SAVEAS = "S&alveaza ca...";

private static final String FILE_PRINT = "&Tipareste...";

private static final String FILE_EXPORT = "&Exporta...";

private static final String FILE_EXIT = "&Iesire";

private static final String TOOLS_QB = "Edit &Query...";

private static final String TOOLS_CB = "Insert &Calculation...";

public static final String DEFAULT_TITLE = "Aplicatie OLAP!!!";

// By passing in the config file to the BI Session you can externalize

// all the connection information in the specified config file. You can

// then call the getManagerFactory on the BI Session to get to the other

// managers like the QueryManager or the PersistenceManager. The BI Session

// will read the connection information from the config file, create the

// appropriate manager and return it to you. Search this class for

// 'getManagerFactory' for examples.

Pagina 161 din 207

Page 162: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

String m_configFile = "/Project1OLAPConfig1.xml";

BISession m_biSession = new BISession(getConfigFile());

// By default we create and track a single Presentation in this class.

// Given that all the Presentation beans are derived from the Dataview

// class it makes it easier to use a single variable for any type

// of Presentation.

// Search for 'instance of' in this class for examples.

// these two variables keep track of the view that is displayed and

// it's relative path + name

Dataview m_activeView = null;

String m_activeViewPath = null;

boolean m_bMDMset = false;

boolean m_bConnected = false;

JPanel m_pnlBars = new JPanel();

JPanel m_pnlView = new JPanel();

ToolBar m_toolbarGraph = null;

ToolBar m_toolbarGridView = null;

JMenuBar m_menubar = new JMenuBar();

JMenu m_mnuFile = new JMenu();

JMenuItem m_mnuOpen = new JMenuItem();

JMenuItem m_mnuSave = new JMenuItem();

JMenuItem m_mnuSaveAs = new JMenuItem();

JMenuItem m_mnuPrint = new JMenuItem();

JMenuItem m_mnuExport = new JMenuItem();

JMenuItem m_mnuExit = new JMenuItem();

private JMenu jMenu1 = new JMenu();

private JMenuItem jMenuItem1 = new JMenuItem();

Frame frame1 = new Frame1();

Frame frame2 = new Frame2();

Frame frame3 = new Frame3();

Frame frame4 = new Frame4();

Pagina 162 din 207

Page 163: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

Frame frame5 = new Frame5();

Frame frame6 = new Frame6();

Frame frame7 = new Frame7();

Frame frame8 = new Frame8();

Frame frame9 = new Frame9();

Frame frame10 = new Frame10();

Frame frame11 =new Frame11();

Frame frame12 =new Frame12();

Frame frame13 =new Frame13();

Frame frame14 =new Frame14();

Frame frame15 =new Frame15();

Frame frame16 =new Frame16();

private JMenuItem jMenuItem3 = new JMenuItem();

private JMenuItem jMenuItem4 = new JMenuItem();

private JMenuItem jMenuItem5 = new JMenuItem();

private JMenuItem jMenuItem6 = new JMenuItem();

private JMenuItem jMenuItem7 = new JMenuItem();

private JMenu jMenu2 = new JMenu();

private JMenuItem jMenuItem8 = new JMenuItem();

private JMenuItem jMenuItem12 = new JMenuItem();

private JMenuItem jMenuItem13 = new JMenuItem();

private JMenu jMenu3 = new JMenu();

private JMenuItem jMenuItem9 = new JMenuItem();

private JMenuItem jMenuItem14 = new JMenuItem();

private JMenuItem jMenuItem15 = new JMenuItem();

private JMenu jMenu4 = new JMenu();

private JMenuItem jMenuItem10 = new JMenuItem();

private JMenuItem jMenuItem11 = new JMenuItem();

private JMenuItem jMenuItem16 = new JMenuItem();

private JMenuItem jMenuItem17 = new JMenuItem();

public BIApplication1() {

try {

Pagina 163 din 207

Page 164: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

// it's important to put all the UI hook up code into jbInit because

// then JDeveloper's UI Designer can allow visual editing of the UI.

jbInit();

}

catch (Exception e) {

e.printStackTrace();

System.exit(0);

}

}

private void jbInit() throws Exception {

this.setSize(new Dimension(700, 700));

m_pnlView.setLayout(new GridLayout());

this.getContentPane().add(m_pnlView, null);

m_pnlBars.setLayout(new BorderLayout());

this.getContentPane().add(m_pnlBars, null);

this.setJMenuBar(m_menubar);

m_mnuFile.setText("Optiuni");

m_mnuFile.setMnemonic(StringUtils.getMnemonicKeyCode(FILE));

m_menubar.add(m_mnuFile);

jMenu1.add(jMenuItem1);

jMenu1.add(jMenuItem3);

jMenu1.add(jMenuItem4);

jMenu1.add(jMenuItem5);

jMenu1.add(jMenuItem6);

jMenu1.addSeparator();

jMenu1.add(jMenuItem7);

jMenu1.addSeparator();

jMenu2.add(jMenuItem8);

jMenu2.add(jMenuItem12);

jMenu2.add(jMenuItem13);

jMenu1.add(jMenu2);

jMenu1.addSeparator();

Pagina 164 din 207

Page 165: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenu3.add(jMenuItem9);

jMenu3.add(jMenuItem14);

jMenu3.add(jMenuItem15);

jMenu1.add(jMenu3);

jMenu4.add(jMenuItem10);

jMenu4.add(jMenuItem11);

jMenu4.add(jMenuItem16);

jMenu1.add(jMenu4);

jMenu1.addSeparator();

jMenu1.add(jMenuItem17);

m_menubar.add(jMenu1);

m_mnuOpen.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuOpen_ActionPerformed(e);

}

}

);

m_mnuSave.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuSave_ActionPerformed(e);

}

}

);

m_mnuSaveAs.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuSaveAs_ActionPerformed(e);

}

}

);

m_mnuPrint.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuPrint_ActionPerformed(e);

}

}

Pagina 165 din 207

Page 166: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

);

m_mnuExport.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuExport_ActionPerformed(e);

}

}

);

m_mnuExit.addActionListener(new ActionListener() {

public void actionPerformed(ActionEvent e) {

mnuExit_ActionPerformed(e);

}

}

);

m_mnuOpen.setText("Deschide...");

m_mnuOpen.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_OPEN));

m_mnuFile.add(m_mnuOpen);

m_mnuFile.addSeparator();

m_mnuSave.setText("Salveaza");

m_mnuSave.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_SAVE));

m_mnuFile.add(m_mnuSave);

m_mnuSaveAs.setText("Salveaza ca...");

m_mnuSaveAs.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_SAVEAS));

m_mnuFile.add(m_mnuSaveAs);

m_mnuFile.addSeparator();

m_mnuPrint.setText("Tipareste...");

m_mnuPrint.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_PRINT));

m_mnuFile.add(m_mnuPrint);

m_mnuFile.addSeparator();

m_mnuExport.setText("Exporta...");

m_mnuExport.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_EXPORT));

m_mnuFile.add(m_mnuExport);

m_mnuFile.addSeparator();

m_mnuExit.setText("Iesire");

m_mnuExit.setMnemonic(StringUtils.getMnemonicKeyCode(FILE_EXIT));

Pagina 166 din 207

Page 167: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

m_mnuFile.add(m_mnuExit);

m_toolbarGraph = new GraphToolBar();

m_toolbarGridView = new GridViewToolBar();

jMenuItem17.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem17_actionPerformed(e);

}

});

jMenuItem16.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem16_actionPerformed(e);

}

});

jMenuItem11.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem11_actionPerformed(e);

}

});

jMenuItem10.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem10_actionPerformed(e);

}

});

jMenuItem16.setBorderPainted(true);

jMenuItem16.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem11.setBorderPainted(true);

Pagina 167 din 207

Page 168: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenuItem11.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem10.setBorderPainted(true);

jMenuItem10.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem15.setBorderPainted(true);

jMenuItem15.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem14.setBorderPainted(true);

jMenuItem14.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem9.setBorderPainted(true);

jMenuItem9.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem13.setBorderPainted(true);

jMenuItem13.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem12.setBorderPainted(true);

jMenuItem12.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem8.setBorderPainted(true);

jMenuItem17.setBorderPainted(true);

jMenuItem17.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenu4.setBorderPainted(true);

jMenu4.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenu3.setBorderPainted(true);

jMenu3.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenu2.setBorderPainted(true);

jMenu2.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem7.setBorderPainted(true);

jMenuItem7.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem6.setBorderPainted(true);

jMenuItem6.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem5.setBorderPainted(true);

jMenuItem5.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem4.setBorderPainted(true);

jMenuItem4.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem3.setBorderPainted(true);

jMenuItem3.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem1.setBorderPainted(true);

jMenuItem1.setBorder(BorderFactory.createLineBorder(Color.black, 1));

Pagina 168 din 207

Page 169: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenu1.setBorderPainted(true);

m_mnuExit.setBorderPainted(true);

m_mnuExit.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuExport.setBorderPainted(true);

m_mnuExport.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuPrint.setBorderPainted(true);

m_mnuPrint.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuSaveAs.setBorderPainted(true);

m_mnuSaveAs.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuSave.setBorderPainted(true);

m_mnuSave.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuFile.setBorderPainted(true);

m_mnuOpen.setBorderPainted(true);

m_mnuOpen.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem16.setForeground(Color.white);

jMenuItem16.setFont(new Font("Tahoma", 1, 11));

jMenuItem16.setBackground(Color.gray);

jMenuItem11.setBackground(Color.gray);

jMenuItem11.setForeground(Color.white);

jMenuItem11.setFont(new Font("Tahoma", 1, 11));

jMenuItem10.setForeground(Color.white);

jMenuItem10.setFont(new Font("Tahoma", 1, 11));

jMenuItem10.setBackground(Color.gray);

jMenuItem17.setForeground(Color.white);

jMenuItem17.setFont(new Font("Tahoma", 1, 11));

jMenuItem17.setBackground(Color.darkGray);

jMenuItem17.setText("Pretul mediu si valoare bauturi comercializate");

jMenuItem16.setText("Topul agentilor in anul 2005 in functie de numarul de

beneficiari");

jMenuItem11.setText("Topul agentilor in anul 2004 in functie de numarul de

beneficiari");

jMenuItem10.setText("Topul agentilor in anul 2003 in functie de numarul de

beneficiari");

jMenu4.setBackground(Color.darkGray);

Pagina 169 din 207

Page 170: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenu4.setFont(new Font("Tahoma", 1, 11));

jMenu4.setForeground(Color.white);

jMenu4.setText("Topul agentilor in functie de numarul de beneficiari");

jMenuItem15.setForeground(Color.white);

jMenuItem15.setFont(new Font("Tahoma", 1, 11));

jMenuItem15.setBackground(Color.gray);

jMenuItem14.setForeground(Color.white);

jMenuItem14.setFont(new Font("Tahoma", 1, 11));

jMenuItem14.setBackground(Color.gray);

jMenuItem9.setForeground(Color.white);

jMenuItem9.setFont(new Font("Tahoma", 1, 11));

jMenuItem9.setBackground(Color.gray);

jMenuItem15.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem15_actionPerformed(e);

}

});

jMenuItem14.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem14_actionPerformed(e);

}

});

jMenuItem9.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem9_actionPerformed(e);

}

});

jMenuItem13.setForeground(Color.white);

Pagina 170 din 207

Page 171: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenuItem13.setFont(new Font("Tahoma", 1, 11));

jMenuItem12.setForeground(Color.white);

jMenuItem12.setFont(new Font("Tahoma", 1, 11));

jMenuItem8.setForeground(Color.white);

jMenuItem8.setFont(new Font("Tahoma", 1, 11));

jMenuItem13.setBackground(Color.gray);

jMenuItem12.setBackground(Color.gray);

jMenuItem8.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenuItem8.setBackground(Color.gray);

jMenuItem13.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem13_actionPerformed(e);

}

});

jMenuItem12.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem12_actionPerformed(e);

}

});

jMenuItem8.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem8_actionPerformed(e);

}

});

jMenuItem15.setText("Topul agentilor in anul 2005 in functie de numarul de bauturi

calde " + "comercializate");

jMenuItem14.setText("Topul agentilor in anul 2004 in functie de numarul de bauturi

calde " + "comercializate");

Pagina 171 din 207

Page 172: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenuItem9.setText("Topul agentilor in anul 2003 in functie de numarul de bauturi

calde " + "comercializate");

jMenu3.setBackground(Color.darkGray);

jMenu3.setFont(new Font("Tahoma", 1, 11));

jMenu3.setForeground(Color.white);

jMenu3.setText("Topul agentilor in functie de numarul de bauturi calde

comercializate");

jMenuItem13.setText("Topul clientilor in anul 2005 in functie de numarul de bauturi

calde " + "comercializate");

jMenuItem12.setText("Topul clientilor in anul 2004 in functie de numarul de bauturi

calde " + "comercializate");

jMenuItem8.setText("Topul clientilor in anul 2003 in functie de numarul de bauturi

calde " + "comercializate");

jMenu2.setBackground(Color.darkGray);

jMenu2.setFont(new Font("Tahoma", 1, 11));

jMenu2.setForeground(Color.white);

jMenu2.setText("Topul clientilor in functie de numarul de bauturi calde

comercializate");

m_toolbarGraph.setSize(new Dimension(550, 300));

jMenuItem7.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem7_actionPerformed(e);

}

});

this.setResizable(false);

jMenuItem6.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem6_actionPerformed(e);

}

});

Pagina 172 din 207

Page 173: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenuItem5.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem5_actionPerformed(e);

}

});

jMenuItem4.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem4_actionPerformed(e);

}

});

jMenuItem3.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem3_actionPerformed(e);

}

});

m_mnuOpen.setBounds(new Rectangle(0, 0, 111, 17));

m_mnuSave.setBounds(new Rectangle(0, 0, 111, 17));

m_mnuSaveAs.setBounds(new Rectangle(0, 0, 111, 17));

m_mnuPrint.setBounds(new Rectangle(0, 0, 99, 17));

m_mnuExport.setBounds(new Rectangle(0, 0, 89, 17));

m_mnuExit.setBounds(new Rectangle(0, 0, 69, 17));

m_mnuFile.setLayout(null);

m_menubar.setBackground(Color.white);

m_menubar.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuFile.setModel(new DefaultButtonModel());

m_mnuFile.setToolTipText("null");

jMenuItem7.setForeground(Color.white);

jMenuItem7.setFont(new Font("Tahoma", 1, 11));

Pagina 173 din 207

Page 174: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jMenuItem7.setBackground(Color.darkGray);

jMenuItem6.setForeground(Color.white);

jMenuItem6.setFont(new Font("Tahoma", 1, 11));

jMenuItem6.setBackground(Color.darkGray);

jMenuItem5.setForeground(Color.white);

jMenuItem5.setFont(new Font("Tahoma", 1, 11));

jMenuItem5.setBackground(Color.darkGray);

jMenuItem4.setForeground(Color.white);

jMenuItem4.setFont(new Font("Tahoma", 1, 11));

jMenuItem4.setBackground(Color.darkGray);

jMenuItem3.setForeground(Color.white);

jMenuItem3.setFont(new Font("Tahoma", 1, 11));

jMenuItem3.setBackground(Color.darkGray);

jMenuItem1.setForeground(Color.white);

jMenuItem1.setFont(new Font("Tahoma", 1, 11));

jMenuItem1.setBackground(Color.darkGray);

jMenu1.setForeground(Color.gray);

jMenu1.setFont(new Font("Tahoma", 1, 11));

jMenu1.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jMenu1.setBackground(Color.white);

m_mnuExit.setForeground(Color.white);

m_mnuExit.setFont(new Font("Tahoma", 1, 11));

m_mnuExit.setBackground(Color.darkGray);

m_mnuExport.setBackground(Color.darkGray);

m_mnuExport.setForeground(Color.white);

m_mnuExport.setFont(new Font("Tahoma", 1, 11));

m_mnuPrint.setForeground(Color.white);

m_mnuPrint.setFont(new Font("Tahoma", 1, 11));

m_mnuPrint.setBackground(Color.darkGray);

m_mnuSaveAs.setForeground(Color.white);

m_mnuSaveAs.setFont(new Font("Tahoma", 1, 11));

m_mnuSaveAs.setBackground(Color.darkGray);

m_mnuSave.setForeground(Color.white);

m_mnuSave.setFont(new Font("Tahoma", 1, 11));

Pagina 174 din 207

Page 175: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

m_mnuSave.setBackground(Color.darkGray);

m_mnuFile.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_mnuOpen.setForeground(Color.white);

m_mnuOpen.setFont(new Font("Tahoma", 1, 11));

m_mnuOpen.setBackground(Color.darkGray);

m_mnuFile.setForeground(Color.gray);

m_mnuFile.setFont(new Font("Tahoma", 1, 11));

m_mnuFile.setBackground(Color.white);

jMenuItem7.setText("Numarul de beneficiari deserviti de un agent");

jMenuItem6.setText("Evolutia numarului de bauturi /tip de bautura /locatie

geografica");

jMenuItem5.setText("Evolutia numarului de bauturi calde /agent");

jMenuItem4.setText("Evolutia numarului de bauturi calde /locatie geografica

/beneficiar " + "/aparat");

jMenuItem3.setText("Evolutia numarului de bauturi calde /tip de aparat");

m_pnlView.setBounds(new Rectangle(0, 0, 590, 500));

m_pnlView.setMinimumSize(new Dimension(700, 700));

m_pnlView.setBackground(Color.white);

m_pnlView.setSize(new Dimension(500, 500));

this.setBackground(Color.lightGray);

jMenuItem1.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jMenuItem1_actionPerformed(e);

}

});

jMenuItem1.setText("Evolutia numarului de bauturi calde /aparat");

jMenu1.setText("Tipuri de analize");

m_pnlView.setBorder(BorderFactory.createLineBorder(Color.black, 1));

m_pnlBars.setBounds(new Rectangle(0, 0, 550, 1));

this.getContentPane().setLayout(null);

m_pnlView.setPreferredSize(new Dimension(700, 700));

Pagina 175 din 207

Page 176: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

setTitle("Aplicatie OLAP");

}

public JFrame getFrame() {

return this;

}

private BISession getBISession() {

return m_biSession;

}

private String getConfigFile() {

return m_configFile;

}

private Dataview getActiveDataview() {

return m_activeView;

}

private void setActiveDataviewPath(String strPath) {

m_activeViewPath = strPath;

updateTitle();

}

private String getActiveDataviewPath() {

return m_activeViewPath;

}

// getPersistenceManager should only be used for importing and exporting

// from the BI Beans catalog.

//

private PersistenceManager getPersistenceManager() throws Throwable{

Pagina 176 din 207

Page 177: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

ManagerFactory mf = getBISession().getManagerFactory();

PersistenceManager pm = null;

if (mf != null) {

pm = (PersistenceManager) mf.lookupManager(

ManagerFactory.PERSISTENCE_MANAGER, null, true);

}

return pm;

}

private MDRoot getRootFolder() throws Throwable {

MetadataManager mdm = getMetadataManager();

return mdm.getMDRoot();

}

private MetadataManager getMetadataManager() throws Exception {

// By using a config file we can use the ManagerFactory on the

// BISession that will allow us to easily get at the individual

// pieces

ManagerFactory mf = getBISession().getManagerFactory();

MetadataManager mdm = null;

if (mf != null) {

mdm = (MetadataManager) mf.lookupManager(

ManagerFactory.METADATA_MANAGER, null, true);

// Attach should only be called once and it is only necessary

// for the MetadataManager

if (mdm != null) {

int iAttachStatus = mdm.getAttachStatus();

if ((iAttachStatus != MM.ATTACHED) &&

Pagina 177 din 207

Page 178: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

(iAttachStatus != MM.ATTACHING))

mdm.attach();

}

m_bConnected = true;

}

return mdm;

}

private QueryManager getQueryManager() throws Throwable {

ManagerFactory mf = getBISession().getManagerFactory();

QueryManager qm = null;

if (mf != null) {

qm = (QueryManager) mf.lookupManager(

ManagerFactory.QUERY_MANAGER, null, true);

// for now we have to set the MDM the very first time

if (!m_bMDMset) {

MetadataManager mdm = getMetadataManager();

if (mdm != null)

qm.setMetadataManager(mdm);

m_bMDMset = true;

}

}

return qm;

}

public String[][] getParameterInfo() {

return null;

Pagina 178 din 207

Page 179: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

}

public void displayView(String strPath, Dataview dv) {

m_pnlView.removeAll();

m_pnlView.add(dv);

m_pnlView.validate();

// update the state variables that track the active view

m_activeView = dv;

m_activeViewPath = strPath;

updateTitle();

m_pnlBars.remove(m_toolbarGraph);

m_pnlBars.remove(m_toolbarGridView);

if (dv instanceof Graph) {

m_toolbarGraph.setDataView(dv);

m_pnlBars.add(m_toolbarGraph, BorderLayout.SOUTH);

}

else {

m_toolbarGridView.setDataView(dv);

m_pnlBars.add(m_toolbarGridView, BorderLayout.SOUTH);

}

}

void updateTitle() {

// update the title of the frame to include the name of the

// application + the name of the currently opened view. Note that

// the path can be null in the case a new view is created

String strTitle = DEFAULT_TITLE;

String strPath = getActiveDataviewPath();

if (strPath != null)

strTitle += " - " + strPath;

Pagina 179 din 207

Page 180: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

if (getFrame() != null)

getFrame().setTitle(strTitle);

}

void showErrorMessage(String strMsg, Throwable t) {

String strTitle = DEFAULT_TITLE;

if (getFrame() != null)

strTitle = getFrame().getTitle();

if (t != null) {

strMsg += "\n\n" + t.getMessage();

if ( t instanceof BIException ) {

Throwable cause = ((BIException)t).getBIRootCause();

strMsg += "\n" + cause.getLocalizedMessage();

}

BIExceptionDialog biExceptionDialog = new BIExceptionDialog(getFrame(),

t,

strTitle,

strMsg,

null);

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

biExceptionDialog.setSize((int)(d.width * 0.8), (int)(d.height * 0.4));

biExceptionDialog.display();

biExceptionDialog.dispose();

biExceptionDialog = null;

t.printStackTrace();

}

else {

JOptionPane.showMessageDialog(getFrame(), strMsg, strTitle,

Pagina 180 din 207

Page 181: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

JOptionPane.ERROR_MESSAGE);

}

}

// helpers for opening, saving, and doing a save as

boolean saveView(String strName, Dataview dv) {

try {

MetadataManager mdm = getMetadataManager();

// calling rebind will work even if the object specified by the path

// name specified in strName wasn't saved before. All the sub-folders

// must exist though

MDRoot root = getRootFolder();

root.rebind(strName, dv);

}

catch (Throwable t) {

String strMsg = "Incapabil sa salveze: " + strName;

showErrorMessage(strMsg, t);

return false;

}

return true;

}

boolean saveAsActiveView(String strName) {

if (strName == null || strName.length() == 0) {

String strMsg = "Nu ati specificat numele. Incapabil sa salveze.";

showErrorMessage(strMsg, null);

return false;

}

Pagina 181 din 207

Page 182: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

if (getActiveDataview() == null) {

String strMsg = "Nu este nimic activ. Incapabil sa salveze.";

showErrorMessage(strMsg, null);

return false;

}

// if we can save the view to the new name then we update the internal

// state of the application

if (saveView(strName, getActiveDataview()))

setActiveDataviewPath(strName);

return true;

}

Dataview openView(String strName) {

Dataview dv = null;

try {

MetadataManager mdm = getMetadataManager();

Hashtable env = new Hashtable();

QueryManager qm = getQueryManager();

// qm can be null which implies that we are running with a config

// file that doesn't specify a connection to an OLAP source. We

// will use a static data source in that case.

// Via this mechanism we can tell the Persistence Manager about the

// Query Manager it should use to evaluate the query in the Presentation

// being loaded.

if (qm != null)

env.put(Query.QUERY_MANAGER, qm);

Pagina 182 din 207

Page 183: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

// The reason for using the MetadataManager for loading

// a view is that the MetadataManager will automatically

// load any calculations that might be referenced by the

// query. The calculations need to be present before the

// query can be evaluated.

MDRoot root = getRootFolder();

dv = (Dataview) root.lookup(strName, env);

}

catch (Throwable t) {

String strMsg = "Incapabil sa deschida: " + strName;

showErrorMessage(strMsg, t);

}

return dv;

}

void mnuOpen_ActionPerformed(ActionEvent event) {

try {

MDRoot root = getRootFolder();

PersistenceObjectChooser chooser = new PersistenceObjectChooser(root);

PresentationFilter filter = new PresentationFilter();

chooser.addPersistenceObjectFilter(filter);

chooser.removePersistenceObjectFilter(PersistenceObjectChooser.ALL_TYPES);

chooser.setDefaultPersistenceObjectFilter(filter.getDisplayText());

int nRetVal = chooser.showOpenDialog(getFrame());

if (nRetVal != PersistenceObjectChooser.OK_OPTION)

return;

Pagina 183 din 207

Page 184: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

String strName = chooser.getSelectedObjectPathName();

// getSelectedObjectPathName returns the full path name

// including the folders. Note that this is a JNDI path and

// is relative to the root that was specified in the configuration

// file.

Dataview dv = openView(strName);

if (dv != null)

displayView(strName, dv);

}

catch (Throwable t) {

String strMsg = "Incapabil sa deschida: ";

showErrorMessage(strMsg, t);

}

}

void mnuSave_ActionPerformed(ActionEvent event) {

if (getActiveDataview() == null) {

String strMsg = "Incapabil sa salveze.Nu este nimic activ";

showErrorMessage(strMsg, null);

return;

}

// if we have a path then we had opened a view to begin with

// otherwise we delegate to the Save As method

if (getActiveDataviewPath() == null)

mnuSaveAs_ActionPerformed(event);

else

saveView(getActiveDataviewPath(), getActiveDataview());

}

Pagina 184 din 207

Page 185: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

void mnuSaveAs_ActionPerformed(ActionEvent event) {

if (getActiveDataview() == null) {

String strMsg = "Nu se poate salva pentru ca nu este nimic activ.";

showErrorMessage(strMsg, null);

return;

}

try {

MDRoot mdRoot = getRootFolder();

PersistenceObjectChooser chooser = new PersistenceObjectChooser(mdRoot);

PresentationFilter filter = new PresentationFilter();

chooser.addPersistenceObjectFilter(filter);

chooser.removePersistenceObjectFilter(PersistenceObjectChooser.ALL_TYPES);

chooser.setDefaultPersistenceObjectFilter(filter.getDisplayText());

int nRetVal = chooser.showSaveDialog(getFrame());

if (nRetVal != PersistenceObjectChooser.OK_OPTION)

return;

String strName = chooser.getSelectedObjectPathName();

saveAsActiveView(strName);

}

catch (Throwable t) {

String strMsg = "Incapabil sa afiseze dialogul Salveaza ca...";

showErrorMessage(strMsg, t);

}

}

Pagina 185 din 207

Page 186: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

void mnuPrint_ActionPerformed(ActionEvent event) {

if (getActiveDataview() == null) {

String strMsg = "Nu se poate tipari pentru ca nu este nimic activ.";

showErrorMessage(strMsg, null);

return;

}

ViewPrinter printer = null;

Dataview dv = getActiveDataview();

if (dv instanceof Graph) {

printer = new GraphPrinter((Graph) dv);

}

else if (dv instanceof Table) {

printer = new TablePrinter((Table) dv);

}

else if (getActiveDataview() instanceof Crosstab) {

printer = new CrosstabPrinter((Crosstab) dv);

}

if (printer != null) {

PrintDialog dialog = new PrintDialog(getFrame(), printer);

dialog.show();

dialog.dispose();

dialog = null;

}

}

void mnuExport_ActionPerformed(ActionEvent event) {

if (getActiveDataview() == null) {

String strMsg = "Nu se poate exporta pentru ca nu este nimic activ.";

Pagina 186 din 207

Page 187: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

showErrorMessage(strMsg, null);

return;

}

// Export is only supported for Table and Crosstab

Dataview dv = getActiveDataview();

if (dv instanceof Table ||

dv instanceof Crosstab) {

// JEWTDialog class makes it really easy to show a dialog and

// display buttons in it. If we used a JDialog we would have to write

// a lot more code and implement the displaying of buttons ourselves.

Frame parent = getFrame();

JEWTDialog jewtDialog = new JEWTDialog(parent,

"Exporta",

JEWTDialog.BUTTON_OK |

JEWTDialog.BUTTON_CANCEL);

ExportPanel exportPanel = new ExportPanel(parent,

(UIGridView) dv);

jewtDialog.setCenterOver(parent);

jewtDialog.setContent(exportPanel);

if (jewtDialog.runDialog()) {

// user hit ok...so do the actual export

exportPanel.apply();

}

jewtDialog.dispose();

jewtDialog = null;

}

}

Pagina 187 din 207

Page 188: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

void mnuExit_ActionPerformed(ActionEvent event) {

// Prompt the user before closes

if (JOptionPane.showConfirmDialog(getFrame(), new String ("Sunteti sigur ca vreti

sa iesiti?"),

DEFAULT_TITLE, JOptionPane.YES_NO_OPTION) ==

JOptionPane.YES_OPTION) {

disconnect();

System.exit(0);

}

}

void mnuQB_ActionPerformed(ActionEvent event) {

try {

if (getActiveDataview() == null || getQueryManager() == null)

return;

QueryBuilder queryBuilder = new QueryBuilder(getFrame());

Dataview dv = getActiveDataview();

Query query = (Query) dv.getDataSource();

queryBuilder.setMode(QueryBuilder.TABBED);

queryBuilder.setMetadataManager(getMetadataManager());

queryBuilder.setQuery((QueryContext) query);

queryBuilder.setVisible(true);

Layout layout = null;

// Display the Right type of Layout panel for different

// view type

if (dv instanceof Graph) {

// Set Graph into the GraphLayout panel

layout = new GraphLayout();

((GraphLayout) layout).setGraph((Graph) dv);

Pagina 188 din 207

Page 189: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

}

else if (dv instanceof UICrosstab) {

// Setting the Paging Control Attributes to the layout,

// so that the paging control of the crosstab will get updated

layout = new CrosstabLayout();

((CrosstabLayout) layout).setPagingControlAttributes(dv);

}

else if (dv instanceof UITable) {

// Setting the Paging Control Attributes to the layout,

// so that the paging control of the table will get updated

layout = new TableLayout();

((TableLayout) layout).setPagingControlAttributes(dv);

}

// Setting Layout context to the Layout panel,

// and set the Layout to QueryBuilder

if (layout != null) {

layout.setLayoutContext((LayoutContext) query);

queryBuilder.setViewLayoutPanel(layout);

}

queryBuilder.run();

}

catch (Throwable t) {

String strMsg = "Unable to display the Query Builder.";

showErrorMessage(strMsg, t);

}

}

void mnuCB_ActionPerformed(ActionEvent event) {

try {

if (getActiveDataview() == null || getQueryManager() == null)

return;

Pagina 189 din 207

Page 190: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

// Create our CalcBuilder

QueryContext qc = (QueryContext) getActiveDataview().getDataSource();

MetadataManager mdm = getMetadataManager();

// CalcBuilderStepStorage does everything for creating a new Calc

// and adding it to the MeatadataManager

CalcBuilderStepStorage calcBuilderStepStorage =

new CalcBuilderStepStorage(null, /*component*/

null, /*mdObject*/

qc, /*queryContext*/

mdm/*metadataManager*/);

calcBuilderStepStorage.setParentFrame(getFrame());

// Invoke the CalcBuilder -- if the user press the OK button to create

// a new calc the calcBuliderStepStorage will do all the work for saving

// and making the calc appear in the Query Builder.

MDMeasure mdMeasure = (MDMeasure) calcBuilderStepStorage.invoke();

updateMeasures(mdMeasure);

}

catch (Throwable t) {

String strMsg = "Unable to display the Calculation Builder.";

showErrorMessage(strMsg, t);

return;

}

}

// Updates the measures based on the specified MDMeasure

private void updateMeasures(MDMeasure mdMeasure)

throws InvalidStepArgException, SelectionException,

QueryException, MetadataManagerException {

Pagina 190 din 207

Page 191: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

if (getActiveDataview() == null || mdMeasure == null)

return;

Query viewQuery = (Query) getActiveDataview().getDataSource();

// Create a queryAccess in order to update query

QueryAccess queryAccess = viewQuery.createQueryAccess();

// Retrieve the name of the measure dimension

String strMeasureDimension =

queryAccess.getMeasureDimension(LayerMetadataMap.LAYER_METADATA_NA

ME);

// Retrieve the selection associated with the measure dimension

Selection selection =

queryAccess.getSelection(strMeasureDimension);

// Release our Query Access

if (queryAccess != null)

queryAccess.release();

// Verify that the selection is non-null

if (selection != null) {

// Retrieve the members associated with the step

MemberStep step = (MemberStep) selection.getStep(0);

Vector members = step.getMembers();

// Only add measure if it currently does not exist

String strMeasureID = mdMeasure.getUniqueID();

if ((strMeasureID != null) && !members.contains(strMeasureID)) {

// Add our new custom measure

Pagina 191 din 207

Page 192: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

members.addElement(mdMeasure.getUniqueID());

step.setMembers(members);

// Set the action to be ADD for inserting a MemberStep.

step.setAction(oracle.dss.selection.step.Step.SELECT);

// Remove all steps from this selection.

selection.removeAllSteps();

// Add our newly created step which includes our new custom

// measure

selection.addStep(step);

}

if (strMeasureID != null)

// Attempt to update the query with the new measure selection

viewQuery.applySelection(selection);

}

}

protected void processWindowEvent (WindowEvent e) {

if (e.getID() == WindowEvent.WINDOW_CLOSING) {

disconnect();

System.exit (0);

}

super.processWindowEvent (e);

}

public class PresentationFilter implements PersistenceObjectFilter {

public String getDisplayText() {

return "Prezentarile";

}

Pagina 192 din 207

Page 193: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

public Icon getDisplayIcon() {

return null;

}

public String getFilterExpression() {

return null;

}

public Attributes getMatchingAttributes() {

return null;

}

public SearchControls getSearchControls() {

BISearchControls biControl = new BISearchControls();

biControl.setResultFilter(new BIPresentationFilter());

return biControl;

}

class BIPresentationFilter implements BIFilter {

public boolean evaluate(BISearchResult result) {

if (result.getObjectType().equals(PersistableConstants.FOLDER) ||

result.getObjectType().equals(PersistableConstants.GRAPH) ||

result.getObjectType().equals(PersistableConstants.TABLE) ||

result.getObjectType().equals(PersistableConstants.CROSSTAB))

return true;

else

return false;

}

}

}

static {

try {

Pagina 193 din 207

Page 194: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

// We use the Oracle Look and Feel by default

UIManager.setLookAndFeel(new OracleLookAndFeel());

}

catch (Exception e) {

}

}

public static void main(String[] args) {

// Show Initialization Messages

JDialog dlg = new JDialog((JFrame) null, BIApplication1.DEFAULT_TITLE, false);

JLabel label = new JLabel("Aplicatia se incarca... Va rugam asteptati...");

label.setHorizontalAlignment(SwingConstants.CENTER);

dlg.getContentPane().setLayout(new GridBagLayout());

dlg.getContentPane().add(label, new GridBagConstraints(0, 0, 4, 1, 0.0, 0.0,

GridBagConstraints.CENTER, GridBagConstraints.NONE, new Insets(15, 15, 15,

15), 0, 0));

dlg.pack();

WindowUtils.centerWindow(dlg);

dlg.setVisible(true);

// Initialize application

final BIApplication1 appFrame = new BIApplication1();

// Dispose the Dialog

dlg.setVisible(false);

Dimension d = Toolkit.getDefaultToolkit().getScreenSize();

appFrame.setSize(800, 620);

appFrame.setLocation(100,100);

// appFrame.setLocation((d.width - appFrame.getSize().width) / 2,

// (d.height - appFrame.getSize().height) / 2);

appFrame.setVisible(true);

}

Pagina 194 din 207

Page 195: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

public void disconnect() {

if (m_bConnected) {

try {

MetadataManager mdm = getMetadataManager();

if (mdm != null) {

mdm.detach();

mdm.free();

}

}

catch (Exception e) {

e.printStackTrace();

}

}

}

private void jMenuItem1_actionPerformed(ActionEvent e)

{

// toBack();

frame1.show();

// frame1.toFront();

//this.show();

}

private void jMenuItem3_actionPerformed(ActionEvent e)

{

// toBack();

frame2.show();

// frame2.toFront();

}

private void jMenuItem4_actionPerformed(ActionEvent e)

{

Pagina 195 din 207

Page 196: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

// toBack();

frame3.show();

// frame3.toFront();

}

private void jMenuItem5_actionPerformed(ActionEvent e)

{

// toBack();

frame4.show();

// frame4.toFront();

}

private void jMenuItem6_actionPerformed(ActionEvent e)

{

//toBack();

frame5.show();

//frame5.toFront();

}

private void jMenuItem7_actionPerformed(ActionEvent e)

{

//toBack();

frame6.show();

//frame6.toFront();

}

private void jMenuItem8_actionPerformed(ActionEvent e)

{

//toBack();

frame7.show();

//frame7.toFront();

}

private void jMenuItem9_actionPerformed(ActionEvent e)

Pagina 196 din 207

Page 197: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

{

//toBack();

frame8.show();

//frame8.toFront();

}

private void jMenuItem10_actionPerformed(ActionEvent e)

{

//toBack();

frame14.show();

//frame14.toFront();

}

private void jMenuItem11_actionPerformed(ActionEvent e)

{

//toBack();

frame15.show();

//frame15.toFront();

}

private void jMenuItem12_actionPerformed(ActionEvent e)

{

// toBack();

frame12.show();

//frame12.show();

}

private void jMenuItem13_actionPerformed(ActionEvent e)

{

//toBack();

frame13.show();

// frame13.show();

}

Pagina 197 din 207

Page 198: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

private void jMenuItem14_actionPerformed(ActionEvent e)

{

// toBack();

frame9.show();

// frame9.toFront();

}

private void jMenuItem15_actionPerformed(ActionEvent e)

{

//toBack();

frame10.show();

//frame10.toFront();

}

private void jMenuItem16_actionPerformed(ActionEvent e)

{

//toBack();

frame16.show();

//frame16.toFront();

}

private void jMenuItem17_actionPerformed(ActionEvent e)

{

frame11.show();

}

}

2. Frame-urile secundare sunt asemănătoare. Prezentăm unul dintre acestea:

Frame-ul “Valoarea băuturilor calde comercializate şi preţul mediu”:

Pagina 198 din 207

Page 199: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

package mypackage1;

import java.awt.Frame;

import javax.swing.JFrame;

import java.awt.Dimension;

import java.awt.Color;

import javax.swing.JOptionPane;

import javax.swing.JPanel;

import java.awt.Rectangle;

import javax.swing.BorderFactory;

import oracle.dss.addins.runtime.beanRef.CrosstabRef;

import oracle.dss.addins.runtime.beanRef.DefinitionInfo;

import oracle.dss.addins.runtime.beanRef.GraphRef;

import java.awt.SystemColor;

import javax.swing.JButton;

import javax.swing.JTextArea;

import java.awt.Font;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

import oracle.dss.crosstab.CrosstabPrinter;

import oracle.dss.dataView.gui.PrintDialog;

import oracle.dss.graph.GraphPrinter;

public class Frame11 extends JFrame

{

private JPanel jPanel1 = new JPanel();

private JPanel jPanel2 = new JPanel();

private JPanel jPanel3 = new JPanel();

private JPanel jPanel4 = new JPanel();

private JButton jButton1 = new JButton();

private JButton jButton2 = new JButton();

private JButton jButton3 = new JButton();

private JButton jButton4 = new JButton();

private JButton jButton5 = new JButton();

Pagina 199 din 207

Page 200: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

private JTextArea jTextArea1 = new JTextArea();

private CrosstabRef crosstabRef1 = new CrosstabRef();

private GraphRef graphRef1 = new GraphRef();

private GraphRef graphRef2 = new GraphRef();

Frame diag16 = new Dialog16();

public Frame11()

{

try

{

jbInit();

}

catch(Exception e)

{

e.printStackTrace();

}

}

private void jbInit() throws Exception

{

this.getContentPane().setLayout(null);

this.setSize(new Dimension(1100, 800));

this.setTitle("Valoarea bauturilor calde comercializate si pretul mediu");

this.setBackground(SystemColor.info);

this.setResizable(false);

this.setLocation(20,20);

jPanel1.setBounds(new Rectangle(0, 0, 700, 700));

jPanel1.setToolTipText("null");

jPanel1.setSize(new Dimension(1100, 800));

jPanel1.setBackground(SystemColor.info);

jPanel1.setLayout(null);

jPanel2.setBounds(new Rectangle(5, 5, 685, 395));

jPanel2.setLayout(null);

Pagina 200 din 207

Page 201: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

jPanel2.setBackground(Color.white);

jPanel2.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jPanel3.setBounds(new Rectangle(5, 405, 325, 365));

jPanel3.setLayout(null);

jPanel3.setBackground(Color.white);

jPanel3.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jPanel4.setBounds(new Rectangle(335, 405, 585, 365));

jPanel4.setBackground(Color.white);

jPanel4.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jPanel4.setLayout(null);

jButton1.setText("Interpretare");

jButton1.setBounds(new Rectangle(945, 120, 145, 65));

jButton1.setBackground(SystemColor.activeCaption);

jButton1.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jButton1.setFont(new Font("Tahoma", 1, 11));

jButton1.setForeground(Color.white);

jButton1.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jButton1_actionPerformed(e);

}

});

jButton2.setText("Print tabel");

jButton2.setBounds(new Rectangle(965, 200, 125, 55));

jButton2.setBackground(Color.yellow);

jButton2.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jButton2.setFont(new Font("Tahoma", 1, 11));

jButton2.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jButton2_actionPerformed(e);

}

Pagina 201 din 207

Page 202: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

});

jButton3.setText("Print grafic 1");

jButton3.setBounds(new Rectangle(965, 260, 125, 55));

jButton3.setBackground(Color.yellow);

jButton3.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jButton3.setFont(new Font("Tahoma", 1, 11));

jButton3.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jButton3_actionPerformed(e);

}

});

jButton4.setText("Print grafic 2");

jButton4.setBounds(new Rectangle(965, 320, 125, 55));

jButton4.setBackground(Color.yellow);

jButton4.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jButton4.setFont(new Font("Tahoma", 1, 11));

jButton4.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

{

jButton4_actionPerformed(e);

}

});

jButton5.setText("Exit");

jButton5.setBounds(new Rectangle(980, 720, 110, 50));

jButton5.setBackground(Color.black);

jButton5.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jButton5.setFont(new Font("Tahoma", 1, 11));

jButton5.setForeground(Color.white);

jButton5.addActionListener(new ActionListener()

{

public void actionPerformed(ActionEvent e)

Pagina 202 din 207

Page 203: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

{

jButton5_actionPerformed(e);

}

});

jTextArea1.setText("In stanga se prezinta tabelul si graficele cu valoarea bauturilor "

+ "comercializate si pretul mediu!!!");

jTextArea1.setBounds(new Rectangle(910, 5, 180, 110));

jTextArea1.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jTextArea1.setFont(new Font("Arial", 1, 12));

jTextArea1.setLineWrap(true);

jTextArea1.setEditable(false);

jTextArea1.setWrapStyleWord(true);

crosstabRef1.setBounds(new Rectangle(5, 5, 675, 385));

crosstabRef1.setDefinition(new DefinitionInfo("/Project1OLAPConfig1.xml",

"Valoarepret"));

graphRef1.setBounds(new Rectangle(5, 5, 315, 355));

graphRef1.setDefinition(new DefinitionInfo("/Project1OLAPConfig1.xml",

"Pretmediugraf"));

graphRef2.setBounds(new Rectangle(5, 5, 575, 355));

graphRef2.setDefinition(new DefinitionInfo("/Project1OLAPConfig1.xml",

"Valoaregraf"));

jPanel1.add(jTextArea1, null);

jPanel1.add(jButton5, null);

jPanel1.add(jButton4, null);

jPanel1.add(jButton3, null);

jPanel1.add(jButton2, null);

jPanel1.add(jButton1, null);

jPanel4.add(graphRef2, null);

jPanel1.add(jPanel4, null);

jPanel2.add(crosstabRef1, null);

jPanel1.add(jPanel2, null);

jPanel3.add(graphRef1, null);

jPanel1.add(jPanel3, null);

this.getContentPane().add(jPanel1, null);

Pagina 203 din 207

Page 204: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

}

private void jButton2_actionPerformed(ActionEvent e)

{

//create an instance of the GraphPrinter

CrosstabPrinter printer = new CrosstabPrinter(crosstabRef1);

//create a frame from which to display the print dialog

Frame frame = oracle.bali.ewt.util.WindowUtils.parentFrame(crosstabRef1);

//create an instance of the print dialog

PrintDialog dialog = new PrintDialog(frame, printer);

//display the dialog, so that users can set options and initiate printing

dialog.show();

//after the printing is completed or canceled, dispose of the dialog

dialog.dispose();

dialog = null;

}

private void jButton3_actionPerformed(ActionEvent e)

{

//create an instance of the GraphPrinter

GraphPrinter printer = new GraphPrinter(graphRef1);

//create a frame from which to display the print dialog

Frame frame = oracle.bali.ewt.util.WindowUtils.parentFrame(graphRef1);

//create an instance of the print dialog

PrintDialog dialog = new PrintDialog(frame, printer);

//display the dialog, so that users can set options and initiate printing

dialog.show();

//after the printing is completed or canceled, dispose of the dialog

dialog.dispose();

dialog = null;

}

private void jButton4_actionPerformed(ActionEvent e)

{

Pagina 204 din 207

Page 205: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

//create an instance of the GraphPrinter

GraphPrinter printer = new GraphPrinter(graphRef2);

//create a frame from which to display the print dialog

Frame frame = oracle.bali.ewt.util.WindowUtils.parentFrame(graphRef2);

//create an instance of the print dialog

PrintDialog dialog = new PrintDialog(frame, printer);

//display the dialog, so that users can set options and initiate printing

dialog.show();

//after the printing is completed or canceled, dispose of the dialog

dialog.dispose();

dialog = null;

}

private void jButton5_actionPerformed(ActionEvent e)

{

if (JOptionPane.showConfirmDialog(this, new String ("Sunteti sigur ca vreti sa

iesiti?"),

"Exit", JOptionPane.YES_NO_OPTION) ==

JOptionPane.YES_OPTION) {

this.hide();

}

}

private void jButton1_actionPerformed(ActionEvent e)

{

diag16.show();

}

}

Pentru fiecare frame în parte, mai puţin cel principal, s-a creat un buton

“Interpretare”, prin intermediul căruia se accesează un alt frame. Pentru exemplul de frame

secundar de mai sus avem:

Pagina 205 din 207

Page 206: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

package mypackage1;

import javax.swing.JFrame;

import java.awt.Dimension;

import java.awt.Color;

import javax.swing.JPanel;

import java.awt.Rectangle;

import javax.swing.JTextArea;

import javax.swing.BorderFactory;

import java.awt.Font;

public class Dialog16 extends JFrame

{

private JPanel jPanel1 = new JPanel();

private JTextArea jTextArea1 = new JTextArea();

public Dialog16()

{

try

{

jbInit();

}

catch(Exception e)

{

e.printStackTrace();

}

}

private void jbInit() throws Exception

{

this.getContentPane().setLayout(null);

this.setSize(new Dimension(400, 400));

this.setTitle("Interpretare");

this.setBackground(Color.darkGray);

Pagina 206 din 207

Page 207: Implementarea Unui Sistem OLAP in Cadrul Unei Firme

this.setResizable(false);

this.setLocation(700,400);

jPanel1.setBounds(new Rectangle(5, 5, 385, 365));

jPanel1.setBackground(Color.darkGray);

jPanel1.setLayout(null);

jTextArea1.setText("Se poate usor observa atat din tabel cat si din grafice ca in anul "

+ "2004 se inregistreaza cea mai mare valoare a bauturilor calde comercializate, " +

"respectiv 23,525,598,018.40 lei; iar pretul mediu al unui jeton este: " + "6556 (in anul 2003),

6642 (in anul 2004), respectiv 6661 (in anul " + "2005)!!!");

jTextArea1.setBounds(new Rectangle(120, 0, 265, 220));

jTextArea1.setBorder(BorderFactory.createLineBorder(Color.black, 1));

jTextArea1.setEditable(false);

jTextArea1.setFont(new Font("Arial", 1, 12));

jTextArea1.setLineWrap(true);

jTextArea1.setWrapStyleWord(true);

jPanel1.add(jTextArea1, null);

this.getContentPane().add(jPanel1, null);

}

}

Pagina 207 din 207


Recommended