Documente Academic
Documente Profesional
Documente Cultură
Laborator 1.1
Directory;
Vanzari:
LOAD ArtID, VanzID, CodClient, AgentID, cantitate, Vanzarea, Data
FROM exemplu.xlsx (ooxml, embedded labels, table is Vanzari);
File/Table Viewer:
➢ Redenumirea atributelor
Uneori atributele pe care nu dorim să le asociem, au aceeaşi denumire, sau atributele pe care dorim
să le asociem, nu au aceeaşi denumire. Pentru a asocia cele două tabele logice, se parcurg următorii
paşi:
1. Se selectează din meniu, opţiunea File/Edit script;
2. Pentru a asocia tabela logică Vanzari cu tabela logică Clienti, trebuie să redenumim atributul
Client din tabela logica Clienti. Pentru a redenumi un atribut, se utilizează opţiunea AS în
scriptul de încărcare. Se salvează şi apoi se execută scriptul (figura 3.56).
➢ Încărcarea unui fişier .csv. Se va încărca fişierul Judete.csv. Se parcurg următorii paşi:
1. Se selectează din meniu, opţiunea File/Edit Script;
2. Se poziţionează mouse-ul la sfârşitul scriptului pentru încărcarea tabelei Clienti. Se selectează
caseta de validare Relative paths;
3. Click pe butonul Table Files şi se alege fişierul Judete.csv. Şi apoi, click pe butonul Open;
4. În fereastra File Wizard: Type, se specifică tipul fişierului, setul de caractere (de exemplu,
Western european), dacă primul rând al fişierului conţine denumirea câmpurilor, tipul de
delimitator (; , sau tab) şi dacă se pot utiliza sau nu ghilimelele. Se fac următoarele setări:
Labels: embedded labels, File Type=Delimited, delimiter:comma;
5. Click pe butonul Finish. Se va crea următorul script:
Directory;
Judete:
LOAD Judet, Judetid, Resedinta, Regiune
FROM judete.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Se asociază alias-ul Judete pentru setul de date încărcat. Se poate seta caseta de validare Save before
Reload, din fereastra User Preferences (opţiunea Settings/User preferences) şi documentul se va
salva automat înainte de reîncărcarea datelor. Se execută scriptul. Modelul este prezentat în figura 3.57.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
➢ Încărcarea unui fişier text. Se va încărca fişierul Agenti.tab, un fişier text care utilizează ca
delimitator (tab). Fişierul nu conţine etichete/denumirile atributelor. Se parcurg următorii paşi:
1. Se selectează din meniu, opţiunea File/Edit Script. Se poziţionează mouse-ul la sfârşitul
scriptului pentru încărcarea fişierului Judete.csv;
2. Click pe butonul Table Files şi se alege fişierul Agenti.tab. Apoi, click pe butonul Open;
3. În fereastra File Wizard: Type, se fac următoarele setări: File Type=Delimited, Delimiter:
tab;
4. Se înlocuieşte @1 cu AgentID, @2 cu NumeAgent, @3 cu Pozitie, @4 cu Oras, @5 cu Judetid
5. Click pe butonul Finish. Se va crea următorul script:
Directory;
Agenti:
LOAD @1 as AgentID, @2 as NumeAgent, @3 as Pozitie, @4 as Oras, @5 as Judetid FROM
agenti.tab (txt, codepage is 1252, no labels, delimiter is '\t', msq);
Se salvează şi apoi se execută scriptul. Se deschide fereastra Table Viewer. Observăm ca s-a creat
tabela logică Agenti. De asemenea, au fost create automat şi asocierile (figura 3.59).
➢ Comanda LOAD INLINE poate fi folosită pentru a încărca un număr mic de înregistrări. Este
mai simplu de a le crea în script, decât de a le încărca dintr-un fişier extern. Ultima sursă va fi
încărcată cu comanda LOAD INLINE. Se parcurg următorii paşi:
1. se selectează din meniu, opţiunea File/Edit Script;
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
2. se selectează din meniul asociat editorului, opţiunea Insert/Load Statement/Load Inline şi se
deschide fereastra Inline Data Wizard. Se vor introduce datele conform figurii 3.66.
Se va genera următorul script (se va utiliza un alias pentru setul de date încărcat):
Categorii:
LOAD * INLINE [
CATEGORIEID, DenumireCategorie
1, Protectia muncii
2, Pneumatice
3, Auto
4, Constructii
5, Electrice
6, Chimice
7, Uleiuri
8, Truse
];
Se salvează şi apoi se execută scriptul. Modelul asociativ final este prezentat în figura 3.67. Se
observă că structura modelului asociativ seamănă, în acest exemplu, cu o schemă fulg de zăpadă. Tabela
logică Vanzari ar fi tabela de fapte, iar tabelele logice Clienti, Articole, Agenti, Judete, Categorii ar fi
tabele dimensionale.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Dacă plasăm cursorul peste denumirea unui atribut, se afişează o serie de informaţii utile şi anume:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
• Denumirea atributului, iar dacă este cheie, apare între paranteze [Key]. Pot apare următoarele
situaţii:
o [Perfect Key] – fiecare rând conţine o valoare a cheii şi toate aceste valori sunt unice. În
acelaşi timp, subset ratio este 100%. Qlikview detectează automat dacă un atribut are valori
unice şi îl alege cheie primară;
o [Primary Key] – toate valorile cheii sunt unice, dar subset ratio <100%;
o [Key] – valorile cheii nu sunt unice.
• Information density indică procentul de tupluri nenule. De exemplu, atributul CodClient din
tabela logică Vanzari, are information density=100% (figura 3.70);
• Subset ratio indică procentul de valori distincte ale unui atribut dintr-o tabelă logică comparativ
cu toate valorile distincte ale acelui atribut, din întregul model de date. Este relevant numai
pentru atributele cheie, întrucât ele sunt prezente în multiple tabele. De exemplu, atributul
CodClient, din tabela logică Vanzari, conţine doar 24% din valorile posibile ce există în model
(subset ratio=24%), adică doar 24% din lista de clienţi au făcut tranzacţii;
• Tags indică tag-urile aplicate atributului. Unele dintre aceste tag-uri sunt generate automat (de
exemplu, tag-ul care indică dacă atributul este cheie sau tag-ul care indică tipul de dată). Alte
tag-uri pot fi aplicate manual;
• Opţional orice comentariu ataşat atributului.
Dacă se face click dreapta cu mouse-ul pe o tabelă logică şi apoi se selectează opţiunea Preview, se
vor afişa primele 1000 de înregistrări (figura 3.71). Meniul asociat ferestrei Table Viewer include
următoarele opţiuni:
• Export Image – salvează o imagine a modelului de date (format PNG/BMP);
• Export Structure – se poate exporta structura documentului QlikView. Se vor crea trei fişiere
text (.tab): un fişier cu informaţii despre tabelele logice ale modelului, un fişier cu informaţii
despre atribute şi un fişier cu informaţii despre mapările dintre atribute;
• Print – se poate tipări modelul de date sau copia în clipboard (copy Image);
• Auto-Layout – aranjează automat tabelele logice;
• Se poate seta dimensiunea de afişare a modelului (zoom). Implicit 100%;
• Se poate selecta Internal table View/Source Table View. Internal Table view este setarea
implicită şi arată cum sunt stocate datele în QlikView. Dacă există chei sintetice, sunt
vizualizate. Setarea Source table View arată cum citeşte QlikView datele, iar cheile sintetice
nu sunt afişate.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Se utilizează opţiunea INFO pentru a asocia imaginile cu valorile atributului Regiune din tabela
logică Judete. În unele cazuri se preferă ca aceste informaţii să fie stocate în documentul Qlikview
(.qvw) şi se utilizează opţiunea BUNDLE INFO. Se va crea apoi, o listă cu regiunile. Dacă se selectează
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
una dintre regiuni (de exemplu, Bucovina), un mic simbol (i) apare în colţul dreapta sus al listei, click
pe el şi se deschide fişierul (png/jpg) asociat (figura 3.72).
Dacă dorim să obţinem total cantitate vândută pentru fiecare agent, trebuie să creăm o expresie de
tipul:
Sum (Ianuarie) + Sum(Februarie) + Sum(Martie) + Sum(Aprilie) + Sum(Mai) +
+ Sum(Iunie)
De aceea, se va modifica structura fişierului de forma:
Se salvează şi se execută scriptul. Apoi se va crea un obiect de tip tabelă pentru a afişa informaţiile.
Rezultatul:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Ex 4: Utilizarea ierarhiilor
Modelul asociativ nu lucrează în mod implicit cu ierarhii, dar se pot crea şi utiliza, dacă dorim. Se
consideră fişierul ierarhie.xls cu informaţii despre regiunile, judeţele şi oraşele României, cu
următoarea structură:
Codurile pentru atributul Child_ID trebuie modificate, dacă dorim să avem informaţii despre toate
oraşele din România. Observăm că ierarhia are patru nivele (România-Regiune-Judeţ-Oraş). Se parcurg
următorii paşi:
1. Se creează documentul ierarhie.qvw;
2. Se selectează din meniu, opţiunea File/Edit script;
3. Click pe butonul Table files şi se alege fişierul ierarhie.xls. Click pe butonul Open;
4. Se deschide fereastra File wizard: Type. Se fac setările corespunzătoare pentru încărcarea unui
fişier de tip Excel;
5. Click butonul Next de două ori pentru a ajunge la fereastra File Wizard: option;
6. Click pe butonul Hierarchy şi se deschide fereastra Hierarchy Parameters (figura 3.74). Se
vor seta următorii parametri, conform figurii de mai jos:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
• Path Source – un atribut din sursa de date care conţine valorile ce ar trebui utilizate pentru
a popula ierarhia (adică nivelele ierarhice);
• Path Delimiter – defineşte şirul care ar trebui utilizat pentru a separa nivelele în ierarhie;
• Dacă câmpurile sursă au caractere speciale în denumire (de exemplu, spaţii) Hierarchy
Wizard nu le va include în script, deci trebuie să le adăugăm după ce scriptul a fost generat.
7. Click pe butonul OK şi revenim în fereastra File Wizard şi apoi click pe butonul Finish. Se va
genera următorul script:
HIERARCHY (Child_ID, Parent_ID, Child, ParentName, Child, Path, ' - ', HierarchyLevel)
LOAD Parent_ID, Child_ID, Parent, Child
FROM ierarhie.xls (biff, embedded labels, table is [Foaie1$]);
Se salvează şi apoi se execută scriptul. Se va crea apoi, un tabel (ordonare după HierarchyLevel).
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Rezultatul:
Tabela logică creată are un atribut pentru fiecare nivel ierarhic şi o înregistrare pentru fiecare nod.
Au fost create noi câmpuri: Path, HierarchyLevel (figura 3.75).
În cazurile în care un nod are mai mulţi părinţi, tabela va avea mai multe înregistrări pentru acel nod.
De asemenea, nodurile orfane vor fi excluse. O astfel de structură poate fi utilizată cu o tabelă pivot,
sau într-un grup ierarhic de dimensiuni. Câmpurile create pot fi utilizate, de asemenea, în liste pentru a
face selecţii. De exemplu, se va crea o listă de tip arbore/ierarhie:
1. Din meniul principal, se selectează opţiunea Layout|New Sheet Object|List box;
2. Se alege Titlu=Ierarhie;
3. Se selectează din lista Field, atributul Path;
4. În tab-ul General se marchează caseta de validare Show as Tree View şi se introduce (-) ca
separator;
5. Click pe butonul OK.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Rezultatul:
Se va utiliza clauza GENERIC care va converti această sursă într-o tabelă logică specifică
modelului de date asociativ. Se parcurg următorii paşi:
1. Se creează un document Generic.qvw;
2. Se selectează din meniu, opţiunea File/Edit Script şi se încarcă fişierul Excel. Se va genera
următorul script (se va adăuga clauza GENERIC):
Directory;
Generic LOAD Obiect, Atribut, Valoare
FROM generic.xlsx
(ooxml, embedded labels, table is Foaie1);
Qlikview va transforma şi procesa conţinutul sursei astfel încât vom avea toate atributele (culoare,
greutate, diametru, grosime etc.) stocate în tabele logice separate şi asociate cu obiectul corespunzător
(figura 3.76). Fiecare tabelă logică va avea un număr de rânduri, în funcţie de numărul de obiecte care
au acelaşi atribut.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Ex 6: Realizarea joncţiunilor
Pentru a realiza joncţiuni se utilizează clauza JOIN a comenzii LOAD. Se realizează o joncţiune de
tip outer join (joncţiune externă completă) pe atributele care au aceeaşi denumire. Se consideră
următorul exemplu:
1. Se va crea un document Qlikview: Jonctiuni.qvw
2. Se selectează din meniu, opţiunea File/Edit Script şi se va crea următorul script:
Tari:
LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
USA, 1000,800
UK, 800,800
Germania, 900, 700
];
Rezultatul:
Se pot crea următoarele tipuri de joncţiuni: INNER JOIN, OUTER JOIN (joncţiune externă
completă), LEFT JOIN şi RIGHT JOIN:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Rezultatul:
Rezultatul:
Rezultatul:
Tari:
LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
USA, 1000,800
UK, 800,800
Germania, 900, 700
];
Rezultatul:
Rândurile din al doilea set de date au fost adăugate la primul set de date. Se poate preciza între
paranteze care este setul de date la care se face concatenarea. Când două seturi de date au aceleaşi
atribute, se vor concatena automat. Se consideră următorul script:
Tari1:
LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
USA, 1000,800
UK, 800,800
Germania, 900, 700
];
Tari2:
LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
Italia, 1000,800
Romania, 800,800
Spania, 900, 700
];
În cazul în care dorim să evităm comportamentul implicit în cazul concatenării naturale, se poate
adăuga clauza NOCONCATENATE la comanda LOAD pentru al doilea set de date. QlikView le
tratează ca tabele logice diferite, în modelul de date. De exemplu, se precizează în comanda LOAD
pentru Tari2, clauza NOCONCATENATE:
Tari1:
LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
USA, 1000,800
UK, 800,800
Germania, 900, 700
];
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015
Tari2:
noconcatenate LOAD * INLINE [
Tara, Vanzari_realizate,Vanzari_Preconizate
Italia, 1000,800
Romania, 800,800
Spania, 900, 700
];
Se va deschide File/Table Viewer şi se observă că s-a creat o tabelă logică $Syn1Table, precum şi o
cheie sintetică $Syn1 (figura 3.77).
Selectăm tab-ul Garbage (figura 3.87) şi click pe butonul Conditional delete. Se deschide fereastra
Specify Row Condition. Selectăm condiţia Range, apoi selectăm opţiunile From, To şi Select fără să
modificăm setările. Se va activa butonul Add. În fereastra de condiţii (figura 3.88) apare automat
următoarea expresie: RowCnd(Interval, Pos(Top, 1), Pos(Top, 1), Select(1, 0)).
Vom schimba şi eticheta pentru prima coloană, în loc de simbol tastăm Data.
Rezultatul:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Syntax:
LOAD[ distinct] fieldlist
[(from file [ format-spec] |
from_field fieldassource [format-spec]
inline data [ format-spec ] |
resident table-label |
autogenerate size )]
[where criterion | while criterion]
[group_by groupbyfieldlist]
[order_by orderbyfieldlist]
Where row_no The row in the table that specifies the field required
Aceste valori vor fi stocate în două variabile: varMinDate şi varMaxDate. Se utilizeaza cda LET:
Let variablename=expression
let evaluates the expression on the right side of the ' =' before it is assigned to the variable.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Let varMinDate = Num(Peek('Data',0,'Vanzari'));
Let varMaxDate = Num(Peek('Data',-1,'Vanzari'));
4. Se va crea o tabelă logică temporară TempTimp pentru care se vor genera automat rânduri,
utilizând opțiunea Autogenerate. Fiecare rând conţine un element de dată;
TempTimp:
Load
date($(varMinDate) + rowno()-1) As TempData
Autogenerate $(varMaxDate)-$(varMinDate) + 1;
[TempTimp:
Load
$(varMinDate),$(varMaxDate),RowNo(),
$(varMinDate) + rowno() - 1 as Num,
date($(varMinDate) + rowno() - 1) as TempData
AUTOGENERATE $(varMaxDate)-$(varMinDate) + 1; ]
5. Se va crea tabela logică Timp. Se vor încărca elementele de dată din tabela temporară
TempTimp şi pentru fiecare element de dată se vor utiliza diferite funcţii calendaristice pentru
a extrage o serie de informaţii utile, cum ar fi: săptămâna, luna, anul corespunzător, denumirea
zilei, prima zi din săptămâna din care face parte elementul de dată, ultima zi din săptămâna din
care face parte elementul de dată etc (figura 3.78):
Timp:
Load
TempData As Data,
Week(TempData) As Saptamana,
Month(TempData) As Luna,
Year(TempData) As An,
Week (TempData) & '-'& Year(TempData)as SaptamanasiAn,
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
WeekDay(TempData) as denumire_zi,
WeekStart(TempData, 0, 0) AS prima_zi_sapt,
WeekEnd(TempData, 0, 0) AS ultima_zi_sapt,
Weekyear(TempData) as anul_pt_sapt,
Month(TempData) & '-' &Year(TempData) AS LunasiAn,
MonthStart(TempData) as prima_zi_luna,
MonthEnd(TempData) as ultima_zi_luna,
'Trim' &Ceil(Month(TempData)/3) AS Trimestru,
QuarterStart(TempData) as prima_zi_trim,
QuarterEnd(TempData) as ultima_zi_trim,
YearEnd(TempData) as ultima_zi_an,
DayNumberOfYear(TempData) as numartotalzile
resident TempTimp
ORDER BY TempData ASC;
//se sterge tabela temporara
DROP TABLE TempTimp;
Calendar:
LOAD Trimestru&'|'&Luna as TrimLuna, Luna, DenumireLuna, Trimestru
FROM calendar.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
S-a utilizat (&) pentru a crea cheia compusă şi un alias pentru denumirea ei. Tabela $Syn1table,
precum şi cheia sintetică au fost eliminate (figura 3.90).
Dependenţe circulare
Se consideră următoarele fişiere (csv):
Vanzari1.csv:
Produse.csv:
Buget.csv
FROM vanzari1.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Directory;
Buget:
LOAD categorieID,
An,
Buget
FROM buget.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Directory;
Produse:
LOAD prodid,
denumire,
categorieID
FROM produse.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Se creează dependenţe circulare. Tabela logică Produse este asociată direct cu tabela logică Buget
prin atributul categorieID şi indirect prin tabela logică Vanzari. Tabela logică Vanzari este asociată cu
tabela logică Buget prin atributul An şi cu tabela logică Produse prin atributul prodid. Datele formează
o anomalie: Produsul A (prodid=1) este vândut în anul 2000 în lunile ianuarie şi februarie. Vânzările
din 2000 sunt asociate cu bugetul din 2000 şi avem două bugete pentru categoria 1 şi categoria 2, deci
produsul A se asociază cu categoria 1, dar şi cu categoria 2, ceea ce nu este corect.
Pentru a evita rezultate incorecte, Qlikview setează una sau mai multe tabele ca fiind „loosely
coupled-cuplate slab” şi afişează un mesaj de atenţionare. În exemplul nostru, tabela logică Vanzari este
„slab cuplată” cu tabela Produse şi tabela Buget, ceea ce înseamnă că deducţia logică nu poate fi
propagată prin această tabelă. În fereastra Document properties (opţiunea Settings/Document
properties) se poate stabili care tabelă este utilizată ca tabelă „slab cuplată” (figura 3.92). În funcţie de
ce tabelă alegem, vom obţine rezultate diferite din deducţia logică.
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
De ce apare dependenţa circulară? În exemplul nostru, din cauză că cele două tabele logice Vanzari
şi Buget au granularităţi diferite. Bugetul este la nivel de an şi categorie de produse, iar vânzările sunt
la nivel de lună, an şi produs. Ele se asociază cu tabela logică Produse la nivele de granulaţie diferite
(prodid respectiv categorieid). Este o situaţie des întâlnită atunci când în modelul asociativ se încarcă
multiple tabele de fapte cu granulații diferite şi care au mai multe dimensiuni comune.
Pentru a elimina dependenţele circulare, o soluţie ar fi concatenarea celor două tabele (Vanzari si
Buget) cu ajutorul cheilor generice (pt concatenare, tabelele treb sa aiba aceeasi structura). În locul cheii
prodid a tabelei logice Produse se utilizează chei generice. Aceste chei se vor crea ţinând cont de faptul
că un produs face parte dintr-o anumită categorie. Se utilizează funcţia applymap().
Sintaxa:
applymap(‘mapname’, lookupkey [ , defaultexpr ] ) ---------seamana cu vlookup() din Excel
where:
• mapname is the name of mapping table, that has been already created through the
mapping load. Its name must be enclosed in single quotes.
• lookupkey is the expression, the result of which should be mapped.
• defaultexpr is an optional expression, which will be used as default mapping value, if
the mapping table does not contain a matching value for lookupkey. If no default value
is given, the value of lookup will be returned as is.
În unele cazuri trebuie să utilizăm aceeaşi sursă de date de mai multe ori, în timpul execuţiei
scriptului. Pentru că sursa este deja încărcată în RAM, se poate accesa utilizând opţiunea RESIDENT
LOAD.
Prodid_to_categorieID:
Mapping Load prodid, categorieID resident Produse;
Tabela:
Load Vanzarea as Valoare, An, Luna,
Applymap('Prodid_to_categorieID', prodid, null()) &'|'& prodid as %prodid,
'vanzari' as type
FROM vanzari1.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
// se creează o tabelă de legătură care va asocia tabela Produse cu cele două tabele Vanzari
şi Buget concatenate
Cheile generice conţin informaţii atât despre nivelele superioare, cât şi despre cele inferioare ale
ierarhiei (prodid>categorieid) şi pot fi utilizate fie numai pentru nivelul superior sau pentru ambele
nivele ale ierarhiei. În acest mod se va realiza o asociere corectă între înregistrările din tabela rezultată
prin concatenare şi tabela logică Produse (înregistrările din tabela logică Vanzari se leagă la nivel de
produs, iar înregistrările din tabela logică Buget se leagă la nivel de categorie şi nu la nivel de produs).
Cheile generice trebuie să fie mapate la cheile reale, utilizând tabela de legătură Produse link tabela
(figura 3.94).
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Un table box
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Map_Pret:
Mapping LOAD * INLINE [
Categorie, Pret
Adult, 10
Child, 5
Student, 6
Senior, 6
LoyalMember, 5
];
Tichete:
LOAD * INLINE [
Nume, Categorie
Ann, Student
David, Adult
Sara, Senior
Keith, Child
Tom, Adult
Dave, Student
Sam, Adult
Monica, LoyalMember
Ethan, Student
Rose, Child
];
Preturi_tichete:
Load Nume, Categorie, ApplyMap ('Map_Pret', Categorie) as
Pret_tichet Resident Tichete;
Se pot extrage şi încărca date din baze de date relaţionale tranzacţionale, cu o structură normalizată.
Dar, sursa de date poate fi şi un depozit de date cu o structură stea/fulg de zăpadă/combinaţii cu una sau
mai multe tabele de fapte şi multe tabele dimensionale.
În cazul în care modelul dimensional este o simplă schemă stea /fulg de zăpadă, cu o singură tabelă
de fapte, modelul asociativ creat are o structură identică cu schema stea/fulg de zăpadă sursă.
Situaţia se schimbă atunci când modelul dimensional include multiple tabele de fapte cu dimensiuni
comune. La încărcarea acestor tabele de fapte, Qlikview va genera chei sintetice, tabele sintetice şi
uneori dependenţe circulare care trebuie evitate fie prin:
1. concatenarea tabelelor de fapte;
2. crearea unei tabele de legătură. Tabela de legătură este o soluţie bună pentru acele modele în
care avem mai multe tabele de fapte cu granulaţii diferite. În acest caz, modelul asociativ
trebuie să aibă structura din figura 3.96;
În următorul exemplu, vom simula cazul a două tabele de fapte cu două atribute comune şi conectate
la o dimensiune comună.
Vom utiliza următoarele fişiere (csv):
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Vanzari1.csv:
Produse.csv:
Buget1.csv
Directory;
Vanzari:
LOAD An,
Luna,
prodid,
Cantitate,
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura
ASE, 2015 Laborator 1.2
Vanzarea
FROM
vanzari1.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Directory;
Buget:
LOAD An,
prodid,
buget
FROM
buget1.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Directory;
Produse:
LOAD prodid,
denumire,
categorieID
FROM
produse.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Se salvează şi apoi se execută scriptul. Modelul de date creat este prezentat în figura 3.97.
Observăm că s-a creat o tabelă sintetică $Syn1 Table cu atributul $Syn1-cheie sintetica. Atributele
prodid şi An sunt comune tabelelor logice Buget şi Vanzari.
Vanzari:
Load An&'|'&prodid as cheie, Cantitate, Vanzarea, Luna, An, prodid
FROM vanzari1.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Buget:
Load An&'|'&prodid as cheie, buget, An, prodid
FROM buget1.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Produse:
LOAD prodid, denumire, categorieID
FROM produse.csv (txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Se salvează şi se execută scriptul. Modelul reproiectat este prezentat în figura 3.98. Cheia sintetică
a fost ştearsă şi tabelele logice Vanzari şi Buget sunt acum asociate la tabela logică Produse indirect
prin tabela de legătură.
Laborator 2
Fişiere text,csv,
excel
Baze
de date
Select load
script
Open
Qlikview
QlikView fisier (qvw)
Save
Un document QlikView este format din mai multe pagini (sheet). O pagină
poate conţine mai multe obiecte cum ar fi: liste, casete statistice, diferite tipuri de
grafice, obiecte de tip slider/calendar, containere, liste multiple etc. Fereastra de
proprietăţi ale unui obiect se accesează prin combinaţia de taste CTRL+ALT+S,
sau click cu butonul dreapta al mouse-ului pe obiect şi se selectează opţiunea
Properties din meniul asociat. Principalele obiecte ale unei pagini sunt:
Lista (List box) (prima icoană din stânga, din bara de butoane prezentată mai
jos) afişează valorile unui atribut din modelul de date (de exemplu, atributul
Regiune). Se utilizează pentru a face selecţii şi filtrări de date. Toate obiectele cu
2 Business Intelligence. Teorie şi practică
Caseta statistică (Statistics box) (a doua icoană din stânga) permite realizarea
unor statistici, utilizând valorile unui singur atribut. De exemplu, se poate crea o
casetă statistică pentru atributul Numar angajati, care va afişa numărul mediu,
numărul maxim şi numărul minim de angajaţi.
Caseta pentru introducere date (Input box) (a şasea icoană din stânga)
permite modificarea valorilor unei variabile (de exemplu, valoarea variabilei vTop).
Lista multiplă (Multi box) (a patra icoană din stânga) afişează valorile mai
multor atribute, fiecare atribut pe o singură linie. Se pot selecta valorile acestor
atribute. De exemplu, se poate crea o listă multiplă care va afişa informaţii despre
companii (denumire, categorie, regiune). O valoare va fi afişată în lista multiplă,
numai dacă este opţională/selectată.
Dezvoltarea şi implementarea soluţiilor BI 3
Tabelul (Table box) (a treia icoană din stânga) nu se foloseşte pentru a afişa
agregări calculate. De exemplu, se poate crea un tabel care va afişa indicatorii
profit net, cheltuieli operaționale, profit operațional şi venituri operaționale pentru
fiecare combinaţie posibilă dintre valorile atributelor: Denumire, An, Trimestru şi
Regiune.
Grafice. Se pot crea diferite tipuri de grafice: linie, bară, scatter, mekko, funnel,
gauge, tabelă liniară/straight, tabelă pivot etc.
Butoanele se pot utiliza pentru a se executa diferite comenzi sau acţiuni: export
de date în fişiere, ştergerea selecţiilor, crearea unui bookmark etc. De exemplu, se
poate crea un buton Anuleaza selectii pentru a anula selecţiile curente.
Selecţia curentă. Qlikview are o opţiune care arată utilizatorului care sunt
selecţiile curente şi anume din meniu, opţiunea View/Current Selections sau
combinaţia de taste CTRL+Q. De asemenea, se pot crea astfel de obiecte.
3
4 Business Intelligence. Teorie şi practică
5
6 Business Intelligence. Teorie şi practică
De asemenea, o companie aeriană poate efectua zboruri în una sau mai multe
regiuni geografice.
Fişierul Regiuni.csv conţine informaţii despre regiunile geografice:
Cod, Descriere
"A","Atlantic"
"D","Intern"
"I","International"
"L","America Latina"
"P","Pacific"
Categorii:
LOAD Cod as Categorie_ID, Descriere as Categorie
FROM Categorie_Companie.csv
(txt, codepage is 1252, embedded labels, delimiter is ',', msq);
Regiuni:
LOAD Cod as Regiune_ID, Descriere as Regiune
FROM REGIUNI.csv (txt, codepage is 1252, embedded labels, delimiter is ',',
msq);
Financiar:
LOAD AutoNumber(AN&Regiune_ID&Categorie_ID&Companie_ID) as
FinanciarAngajatiID, NETPROFIT, OP_PROFIT , OP_VENITURI,
OP_CHELTUIELI, AN, TRIMESTRU, Companie_ID, Categorie_ID, Regiune_ID,
7
8 Business Intelligence. Teorie şi practică
Denumire
FROM financiar.xls (biff, embedded labels, table is [financiar$]);
Angajati:
LOAD AN, Companie_ID, Categorie_ID, Regiune_ID, MGT, FLIGHT,
MAINTENANCE, TOTAL,
AutoNumber(AN&Regiune_ID&Categorie_ID&Companie_ID) as
FinanciarAngajatiID
FROM angajati-categorii-an.xls (biff, embedded labels, table is [angajati$]);
Companii:
LOAD distinct Companie_ID, Denumire resident Financiar;
Key:
Load distinct FinanciarAngajatiID, AN, Regiune_ID, Categorie_ID, Companie_ID
Resident Financiar;
Join(Key)
Load distinct FinanciarAngajatiID, AN, Regiune_ID, Categorie_ID, Companie_ID
Resident Angajati;
Modelul de date asociativ creat este prezentat în figura 5.9. Din meniu se
selectează opţiunea File/Save As şi se salvează documentul cu denumirea
analiza.qvw.
Dezvoltarea şi implementarea soluţiilor BI 9
9
10 Business Intelligence. Teorie şi practică
Prima icoană din stânga (din bara de butoane) adaugă o pagină. A treia icoană
mută pagina curentă la stânga. Ultima icoană este utilizată pentru a deschide
fereastra Properties (pentru pagina curentă). Avem aceleaşi opţiuni, dacă utilizăm
din meniu, opţiunea Layout. Apare în plus opţiunea Remove Sheet, pentru a
şterge pagina curentă.
Rezultatul:
utilizează butoanele din bara de butoane. Dacă nu apare bara de butoane, atunci se
selectează din meniu opţiunea View|Toolbars|Design.
Rezultatul:
11
12 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
Dezvoltarea şi implementarea soluţiilor BI 13
Rezultatul:
Alinierea valorilor:
1. Pentru lista Denumire, se deschide fereastra Properties;
2. În tab-ul Presention, în grupul Alignment, se selectează butonul Right
pentru text.
13
14 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
Anularea selecţiei:
1. Se utilizează butonul Clear din bara de butoane;
2. Sau se selectează o altă valoare (de exemplu, Alaska Airlines Inc).
Qlikview reţine ultimele 100 de selecţii;
3. Sau click pe butonul Back din bara de butoane, pentru a reveni la selecţia
anterioară.
Rezultatul:
Rezultatul:
15
16 Business Intelligence. Teorie şi practică
Căutarea de valori:
1. Se anulează selecţiile anterioare;
2. Se activează lista Denumire (click pe eticheta listei). Click pe icoana
Search, sau din meniu, opţiunea Edit |Search, sau tasta F3;
3. Se tastează literele “Inc”. În listă se vor afişa numai companiile care conţin
şirul “Inc”. Se poate utiliza şi (*.*).
Rezultatul:
Rezultatul:
Rezultatul:
3. Se anulează selecţia.
Rezultatul:
Rezultatul:
Realizarea graficelor
Graficele pot fi de tip: bară, scatter, linie, combo (bara/linie), grid, gauge,
funnel, mekko, tabelă pivot/liniară etc. Un grafic se poate crea utilizând opţiunea
Quick Chart Wizard din meniul Tools, sau butonul Create Chart din bara de
butoane, sau opţiunea New sheet Object|Chart din meniul asociat butonului
dreapta al mouse-ului. Fereastra Properties diferă de la un tip de grafic la alt tip de
grafic.
19
20 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
atunci când se fac selecţii. Poate fi util atunci când se doreşte o evidenţă a
modificărilor;
3. Se ataşează din nou graficul (opţiunea Attach din meniu asociat butonului
dreapta al mouse-ului);
4. Se anulează selecţiile.
Rezultatul:
Rezultatul:
Se poate reveni la nivel de an, dacă se face click pe icoana asociată grupului.
23
24 Business Intelligence. Teorie şi practică
Rezultatul:
Se pot face selecţii de date într-un grafic. Se plasează cursorul pe grafic, apoi cu
butonul stânga al mouse-ului apăsat, se trasează o zonă de selecţie. Graficul va
afişa informaţii despre anii selectaţi din grafic. Modificarea este reflectată şi în lista
AN. De asemenea, se pot face selecţii prin click cu mouse-ul pe anii din grafic.
Unele grafice pot fi vizualizate în mai multe moduri. Se selectează din fereastra
Properties, tab-ul General, din lista Fast type Change, tipurile de grafice dorite,
de exemplu, bară şi linie. Se va bifa caseta Show Caption, din tab-ul Caption. Se
observă că lângă icoana de minimizare, a apărut o nouă icoană asociată graficului
de tip linie. Se poate selecta şi se modifică tipul de grafic.
Dezvoltarea şi implementarea soluţiilor BI 25
25
26 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
27
28 Business Intelligence. Teorie şi practică
Rezultatul:
Se pot ajusta coloanele utilizând opţiunea Fit Columns to data din meniul
asociat butonului dreapta al mouse-ului. Este posibil drill down la un nivel de
detaliu prin click pe icoana (+) (caseta Allways full expanded, din tab-ul
Presentation, nu este bifată).
Rezultatul:
Rezultatul:
Rezultatul:
Se pot utiliza culori diferite pentru a diferenţia valorile expresiilor din tabelă:
1. Se deschide fereastra de proprietăţi a tabelei;
29
30 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
Dezvoltarea şi implementarea soluţiilor BI 31
Rezultatul:
Pentru a nu încărca prea mult pagina, vom seta ca un singur grafic/tabelă să fie
afişat/afişată la un moment dat. În tab-ul Caption, din fereastra de proprietăţi, se
bifează caseta de validare Autominimize.
31
32 Business Intelligence. Teorie şi practică
Rezultatul:
Rezultatul:
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Laborator 3
Ex 1: Transformarea unui grafic de tip bară într-un grafic de tip combo
Într-un grafic combo se pot combina facilităţile unui grafic de tip bară cu ale unui grafic de tip linie.
De exemplu, o expresie este prezentată ca bare, iar a doua expresie ca linii şi/sau simboluri. Se parcurg
următorii paşi:
1. Pentru graficul anterior (din lab 2), se deschide fereastra Properties şi se selectează icoana
combo chart din tab-ul General;
Rezultatul:
1
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Ex 2: Expresiile din Qlikview sunt similare cu formulele din Excel sau funcţiile din SQL. Fereastra
Edit Expression verifică automat sintaxa, iar dacă apare o eroare, expresia se va colora în roşu şi se va
afişa mesajul “Error in expression”. În partea de jos a ferestrei sunt o serie de tab-uri şi anume:
• Fields – se pot selecta atributele care vor fi agregate;
• Functions –se pot selecta funcţiile utilizate în expresii;
• Variabile – pot fi utilizate pentru a stoca expresii şi valori. De exemplu, în loc de a tasta
expresie sum(OP_PROFIT) în caseta Edit Expression, se poate crea o variabilă care conţine
definiţia expresiei şi putem selecta variabila din listă. Rezultatul este acelaşi.
• Imagini. Sunt unele obiecte, de exemplu, obiecte de tip text sau chiar tabele de tip “straight”
care pot afişa rezultatul unei expresii ca o imagine. Se pot alege diferite simboluri din caseta
Image, sau click pe butonul Advanced şi se aleg simbolurile dorite.
2
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
De asemenea, trebuie să setăm modul de afişare (tab-ul Expression, Display Option, caseta
Representation: Image).
Se va adauga din nou masura sum(OP_PROFIT). Putem să schimbăm şi fundalul unei expresii în funcţie
de valorile sale. De exemplu, vom face următoarele modificări:
1. Click cu mouse-ul pe expresie creata şi selectăm atributul background color;
3
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
De exemplu, dorim să afişăm într-o tabelă „straight”, profitul operaţional ca valori, dar şi sub forma
unui minigrafic:
1. Vom copia tabela „straight” creată anterior (opţiunea Copy to clipboard/Object, apoi Paste
Sheet Object). Redenumim tabela (Window title: Tabela straight modificata);
4
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
2. În tab-ul Dimensions, din fereastra de proprietăţi, ştergem atributul TRIMESTRU din lista Used
Dimensions;
3. În tab-ul Expression, vom crea expresia sum(OP_PROFIT), eticheta expresiei este Profit ca
minichart;
4. Alegem din caseta Representation opţiunea Minichart;
5. Apare butonul Mini chart settings. Click pe acest buton şi se deschide fereastra Mini Chart
settings. Se alege dimensiunea după care se va construi graficul: TRIMESTRU şi modul de
afişare (Mode: Bars);
6. Click butonul OK pentru a închide ambele ferestre.
Rezultatul:
5
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
o Lower Bound: 0. 5
o Se selectează butonul Solid Color şi se alege culoarea portocaliu;
• Segmentul 4:
o Lower Bound: 0.75
o Se selectează butonul Solid Color şi se alege culoarea roşie.
Graficul va afişa valori procentuale de la 0 la 100%. S-au definit 4 segmente. Se setează numai limita
inferioară a fiecărui segment. Limita superioară este definită automat de limita inferioară a segmentului
următor, sau de limita superioară a graficului. Segmentul 1 este de la 0 la 25%, segmentul 2 de la 25-
50% etc.
9. În tab-ul Presentation se bifează casetele de validare Show Scale, Show Labels on every
major unit, Hide segment boundaries şi Hide Gauge Outlines;
10. Se setează Show Scale = 5 Major units, se setează Show Labels on every to 1 Major Unit.
Se vor afişa limitele fiecărui segment: 0, 25%, 50%, 75% şi 100%.
11. Click butonul Next, de trei ori până la fereastra Number. Se va seta formatul Integer şi se
bifează caseta Show in Percent (%);
12. Click butonul Next şi se deschide fereastra Font. Se setează Size = 10;
13. Click butonul Finish.
Rezultatul:
Pentru a vedea exact ce reprezintă fiecare număr din grafic, se parcurg următorii paşi:
1. Se deschide fereastra Properties;
2. În tab-ul Presentation, click pe butonul Add (secţiunea Text in chart). Se deschide fereastra
Chart Text;
3. Se adaugă următoarea expresie în caseta Text, prin click pe butonul (…):
=Num (Sum (SAL_MGT) / Sum (CHELTUIELI_SAL), '##,##%')
Se pune semnul (=) în faţa expresiei, pentru a fi interpretată ca o expresie. Se utilizează funcţia
Num() pentru a afişa procentual. Atenție la setările din script.
4. În fereastra Chart text, se setează opţiunile: Alignment =centered, Font =Tahoma, Font
style=regular şi Size=14;
6
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
5. Click pe butonul OK pentru a salva setările. Textul adăugat va fi plasat în colţul stânga sus al
obiectului. Se activează graficul (click pe titlu) şi apoi se apasă combinaţia de taste Ctrl+Shift.
Apare o bordură roşie în jurul textului şi putem muta textul unde dorim;
6. Se deschide fereastra de proprietăţi. În tab-ul Colors, se mută Transparency slider la 100%;
7. În tab-ul Caption, caseta de validare Show caption nu se selectează;
8. Click pe butonul OK pentru a salva setările.
Rezultatul:
7
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Ex 6: Dacă dorim să afişăm o icoană de atenţionare pe obiectul de tip text box Profit Net, atunci când
profitul este negativ, se parcurg următorii paşi:
1. Din meniu, se selectează opţiunea Layout|New sheet object|Text object;
2. În tab-ul General se tastează în zona Text:
=num(sum(NETPROFIT), '#.##0,00')
3. În tab-ul Caption se bifează caseta de validare Show caption şi Title text: Profitul net (mil $),
4. Se bifează caseta de validare Wrap text şi în caseta Caption Height se introduce valoarea 2;
5. În tab-ul Font, se alege: tahoma, bold, 14;
6. Click pe butonul OK pentru a închide fereastra şi a salva setările.
8
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Figura 5.16 Crearea unui obiect de tip text box care afişează şi o imagine
Se pot asocia acţiuni la obiectele de tip text, obiecte de tip linie/săgeată sau butoane. De exemplu,
dacă facem click pe obiectul de tip text Profitul net să se deschidă pagina Analiza financiară. Se parcurg
următorii paşi:
1. Se va deschide fereastra de proprietăţi corespunzătoare paginii;
2. În tab-ul General, se setează sheetID=Analiza_FIN şi click pe butonul OK;
3. În pagina Evolutie personal click pe obiectul de tip text Profitul net şi se deschide fereastra de
proprietăţi;
4. În tab-ul Actions, click pe butonul Add;
5. Se selectează opţiunea Layout din secţiunea Action Type şi opţiunea Activate Sheet din
secţiunea Action. Click pe butonul OK;
6. În tab-ul Actions, se introduce Analiza_FIN în caseta SheetID. Apoi click pe butonul OK.
9
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
10
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Pentru a afişa cei mai mari jucători pe piaţă, în 2012, se vor face următoarele modificări:
1. Se deschide fereastra de proprietăţi a graficului. În tab-ul Dimension Limits, se bifează caseta
de validare Restrict which values are displayed using the first expression;
2. Se selectează butonul radio Show only;
3. Se selectează Largest 5 values. Caseta Show Others nu este selectată;
4. În tab-ul Expressions se bifează caseta Value on data Points;
5. În tab-ul Number se selectează Fixed to 2 decimals și caseta Show in Procent. Click pe
butonul OK.
Rezultatul:
Opţiunea Dimension Limits poate fi setată doar numai pentru prima expresie. În cazul în care
graficul are mai multe expresii, celelalte expresii nu se iau în considerare.
Putem adăuga denumirea companiei lângă cota procentuală astfel:
1. În tab-ul Expression, se selectează butonul Add pentru a adăuga o nouă expresie: If
(count(distinct Denumire) = 1, Denumire, 'Others'), eticheta Denumire. Se verifică dacă
secţiunea curentă (felia) din grafic corespunde unei singure companii şi atunci se afişează
denumirea companiei;
2. Se bifează caseta Values on Data Points;
3. În tab-ul Presentation, caseta Show legend nu se selectează;
4. În tab-ul Caption, caseta Show Caption nu se selectează;
5. Click pe butonul OK.
11
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
Ex 9: Graficul de tip Grid poate conţine trei dimensiuni diferite. În următorul exemplu, s-au utilizat
dimensiunile AN, TRIMESTRU şi Regiune. Dimensiunea bulinei reprezintă veniturile operaţionale
sum(OP_VENITURI).
Rezultatul:
Se observă că cele mai mari venituri sunt în trimestrele 2, 3 anul 2011, respectiv 2012 şi pentru
zborurile interne.
12
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Ex 10: Grafic de tip Trellis nu este un tip de grafic, ci o opţiune care există la toate tipurile de grafice,
cu excepţia tabelelor pivot/”straight”. Se utilizează în cazul unui grafic de tip linie, bară sau scatter. Se
creează un grid în care, pentru fiecare valoare distinctă a primei dimensiuni, se va crea un grafic separat.
În următorul exemplu, s-a creat un grafic de tip linie cu două dimensiuni Regiune şi TRIMESTRU şi
expresia: sum(NETPROFIT)/sum(OP_VENITURI), eticheta Profit net marginal.
Optiunea Trellis poate fi setată în fereastra de proprietăţi, tab-ul Dimensions. Se selectează butonul
Trellis pentru prima dimensiune (dimensiunea Regiune) şi se deschide fereastra Trellis Settings. Se
setează opţiunile Number of columns, Fixed=2 şi Number of rows, Fixed=2. Caseta Enable Trellis
Chart este selectată. Fiecare grafic afişează profitul net marginal pe trimestre şi regiuni, pentru anul
2011.
Rezultatul:
Pentru a ajusta lăţimea coloanelor, click cu butonul dreapta al mouse-ului pe una dintre coloane, şi
se alege opţiunea Fit columns to data sau Equal Column Width. Se poate alege coloana după care se
face sortarea informaţiilor (click cu butonul dreapta al mouse-ului pe coloana dorită şi se alege din
meniul asociat opţiunea Sort). Se pot exporta valorile din tabel. Se alege opţiunea Export din meniul
asociat butonului dreapta al mouse-ului. Se exportă într-un fişier (.qvo) specific Qlikview care poate fi
asociat cu orice program (inclusiv Excel).
13
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
Rezultatul:
Dacă se selectează compania Asia Pacific, se observă că nu se afişează regiunea. Compania îşi
desfăşoară activitatea în mai multe regiuni şi anume „Intern” şi „International”.
Rezultatul:
Putem stabili criterii de căutare complexe. De exemplu, dorim să afişăm informaţii numai despre
companiile cu activitate în regiunea “Intern”, cu excepţia companiilor cu venituri mai mari de 1 miliard
$:
1. Click pe Denumire pentru a deschide lista de valori;
2. Click cu butonul dreapta al mouse-lui oriunde pe lista de valori şi se selectează opţiunea
Advanced Search din meniul asociat;
3. În caseta Search Expression se introduce următoarea expresie:
14
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
= [Categorie] <> 'Companii aeriene mari(cu un venit anual> 1miliard $)' and [Regiune] =
'Intern'
4. Click pe butonul Go pentru a se aplica selecţia şi apoi click pe butonul Close pentru a închide
fereastra Advanced search. Observăm în obiectul de tip „selecţie curentă”, expresia utilizată
pentru selecţie:
Rezultatul:
Ex 13: Butoane
Butoanele se pot utiliza pentru a se executa diferite comenzi sau acţiuni: export de date în fişiere,
ştergerea selecţiilor, crearea unui bookmark etc. Se va crea un buton în pagina Dashboard:
1. Click pe butonul Create button din bara de butoane;
2. Se deschide fereastra de proprietăţi;
3. În tab-ul General, se tastează în caseta Text următorul text: Anulează selecţii;
4. Din caseta Background se alege Aqua;
5. Click pe caseta Color şi se alege culoarea verde din fereastra Color;
6. În tab-ul Actions, click pe butonul Add. Se deschide fereastra Add Action. Se alege din lista
Action type, opţiunea Selection şi din lista Action, opţiunea Clear All;
7. În tab-ul Font se alege culoarea roşu.
Rezultatul:
Dacă dorim să exportăm date din anumite câmpuri într-un fişier (de exemplu, Excel), vom utiliza ca
acţiune (Action type: external, Action: export). Putem lansa o aplicaţie utilizând ca acţiune (Action
15
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Ex 14: Variabile
Variabilele pot fi utilizate şi în scripturi. De exemplu, dorim să utilizăm o variabilă vDateToday care
va stoca data curentă:
LET vDateToday = Today();
Apoi se va crea o caseta text in care se va afisa data curenta. In caseta text
Rezultatul:
Qlikview are două comenzi care pot fi utilizate pentru a asigna o valoare la o variabilă: SET şi LET.
Diferenţa dintre cele două comenzi este că SET asignează o valoare, în timp ce LET mai întâi evaluează
expresia şi rezultatul îl asignează variabilei (set variablename = string sau let variable = expression).
Exemple:
valoarea variabilei vVariable
SET vVariable = 1; 1
LET vVariable = 3 + 4; 7
Click pe butonul Add şi se deschide fereastra New variable unde se tastează denumirea noii
variabile (Variable1 este denumirea implicită). Se modifică în vTop. Click butonul OK. Se selectează
variabila creată şi în zona Definition se tastează valoare 5. Apoi, în zona Comment se adaugă următorul
comentariu: Variabila utilizată pentru a modifica dinamic numărul de valori afişate în graficul Top N.
16
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Trebuie să limităm numărul de bare afişate şi vom utiliza variabila vTop. Se deschide fereastra de
proprietăţi pentru grafic. În tab-ul Dimension Limits se bifează caseta de validare Restrict which
values are displayed using the first expression şi se vor seta următoarele:
• se selectează butonul Show only;
• din casetă se va selecta Largest;
• în caseta Values se introduce $(vTop);
• caseta de validare Show Others nu este selectată.
Rezultatul:
17
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Există două moduri prin care valoarea unei variabile poate fi schimbată şi anume:
• utilizarea unei casete pentru introducere date (Input box);
• utilizarea unui obiect de tip slider.
Rezultatul:
Se poate modifica titlul graficului, şi anume se va afişa Top n companii după veniturile operaţionale.
Se va introduce următoarea expresie:
='Top ' & vTop& ' Companii după veniturile operaţionale '
Rezultatul:
18
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
19
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
Ex 18: De asemenea, cu ajutorul variabilelor se pot schimba, în mod dinamic, indicatorii vizualizaţi
într-un grafic/în mai multe grafice. Se parcurg următorii paşi:
1. Se deschide fereastra Variable Overview şi se creează două variabile: eCheltuieli cu definiţia:
sum(OP_CHELTUIELI) şi eVenituri cu definiţia: sum(OP_VENITURI);
2. Se deschide fereastra Edit Script şi se adaugă un nou tab Indicatori;
3. În acest tab se adaugă o nouă tabelă utilizând opţiunea Insert|Load Statement|Load Inline,
din meniu:
LOAD * INLINE [
Indicatori, eIndicator
Cheltuieli, eCheltuieli
Venituri, eVenituri];
20
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
6. În fereastra de proprietăţi a listei, în tab-ul General se bifează caseta Always one selected
value. Pentru a se activa această opţiune, trebuie selectată anterior o valoare din listă;
7. Se va crea un grafic de tip plăcintă a cărui expresie va fi modificată dinamic, utilizând lista
Indicatori. Se fac următoarele setări:
• Se stabileşte titlul ferestrei:
= Indicatori &' după Companie';
• Se dezactivează caseta de validare Show Title in chart;
• Se setează ca dimensiune a graficului atributul Denumire;
• Se stabileşte ca expresie: $($(=eIndicator));
S-au utilizat două semne ($): primul (din interior) extrage valoarea din tabela logică creată,
după ce utilizatorul a selectat unul dintre indicatorii, din lista Indicatori (adică specifică ce
variabilă va fi evaluată), al doilea ($) evaluează acea variabilă.
• În tab Presentation, se marchează caseta Limit Legend = 20;
• În caseta Text in Chart se introduce textul: = Indicatori;
• În tab-ul Dimension Limits se limitează numai la primele 5 firme după valoarea
indicatorului selectat;
• În tab-ul Expression se selectează caseta Relative și caseta Values on Data Points.
Rezultatul:
21
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
22
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
23
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Scriptul:
LOAD * INLINE [
Country, Sales, Costs
USA, 1000, 800
UK, 800, 700
Germany, 900, 1000
Japan, 600, 400]
Dimension Country
Indicator 1 Sum(Sales)
Indicator 2 Sum(Costs)
2. Click pe Finish.
24
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Se va observa noul pop-up ce afiseaza cand se plimba mouse-ul peste barele coresp Sales /Costs
25
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
In script:
SET MoneyFormat='$#,##0.00;($#,##0.00)';
Rezultatul:
26
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Laborator 4
Triggeri/declanşatori
Ex 1: Se va crea un trigger care se va declanşa la deschiderea documentului şi va afisa (restore) tabela
straight Cota piata. Aceasta tabela este minimizata initial. Fiecare obiect are un ID, in cazul tabelei,
ObjectID=CH25
1
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Alerte
Ex 2: Se va crea o alertă care va afişa următorul mesaj: „Nr de ani cu profit net anual >0:” Se va combina
căutarea complexă cu un bookmark şi o alertă. Se parcurg următorii paşi:
1. Se selectează opţiunea Advanced Search pentru lista AN. Se introduce următorul criteriu de
căutare:
=sum(TOTAL <AN> NETPROFIT)>0;
[Clauza TOTAL este utilizată în funcţiile de agregare pentru a realiza agregarea setului de date curent
selectat. Clauza TOTAL poate fi urmată de o listă de atribute puse între < >. Aceste atribute trebuie să fie
un subset al dimensiunilor graficului. În acest caz, agregarea se va face pentru fiecare combinaţie de valori
ale atributelor specificate în listă.
2
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
='Număr de ani cu profit net anual >0= ' & Count(Distinct AN)& chr(13) & 'Anii: ' &
Concat(DISTINCT AN, ', ')
9. Se activează evenimentele OnOpen, OnPostReload;
10. Click pe butonul OK pentru a închide fereastra;
11. Se salvează documentul, apoi se închide;
12. Se redeschide documentul .
Identificatorii sunt utilizaţi pentru a specifica în mod explicit setul de date utilizat. Sunt similari clauzei
FROM din SELECT-SQL. Identificatorii sunt incluşi între { }.
Exemple:
Sum({1}OP_VENITURI) – total venituri pentru tot setul de date;
Sum({$1} OP_VENITURI) – total venituri pentru setul de date asociat selecţiei anterioare;
Sum ({Bookmark1} OP_VENITURI) – total venituri pentru setul de date definit de bookmark1;
3
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Modificatorii setului de date sunt similari clauzei WHERE din SELECT-SQL. Sunt utilizaţi pentru a
modifica setul de date stabilit de identificatori şi apoi utilizat în agregare.
Se precizează de forma:
Sum ({identificator <modificatorii setului de date>} OP_VENITURI) (figura 5.20).
Exemplu:
Sum ({1 <AN = {2007}>} OP_VENITURI) – total venituri pentru anul 2007
=sum({1-$<An=2012>}OP_VENITURI)
Ex 3: Pentru a înţelege mai bine Set Analysis se va utiliza următoarea sursă de date:
Companie An Venituri
A 2011 10000
B 2011 10000
C 2011 10000
A 2012 10000
B 2012 10000
C 2012 10000
D 2012 10000
E 2012 10000
A 2013 10000
B 2013 10000
C 2013 10000
D 2013 10000
E 2013 10000
F 2013 10000
G 2013 10000
4
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
5
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Se poate modifica dinamic setul de date utilizat în analiză, ţinând cont de selecţiile curente ale
utilizatorilor. Se pot include funcţii în definiţia setului de valori ale unui câmp (din setul de date utilizat
pentru analiză).
De exemplu, Sum({$<An={$(=Max(An))}>} Venituri). Simbolul ($) din $(=Max(An) se utilizează
pentru a evalua expresia inclusă între paranteze (adică se returnează ultimul an din selecţia curentă).
Dacă se doreşte setul de date corespunzător anului anterior, indiferent ce an selectează utilizatorul, se
utilizează expresia: Sum({$<An={$(=Max(An)-1)}>} Venituri).
Dacă utilizatorul modifică selecţia (adică va selecta un alt an), se modifică automat şi setul de date
utilizat în analiză (întotdeauna va fi pentru anul anterior).
6
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Ex 4
De exemplu, dorim să afişăm vânzările curente ale companiilor care au avut vânzări anul trecut. Se va
utiliza următoarea expresie:
sum({<An={$(=Max(An))},Companie=P({<An={$(=Max(An)-1)}> } Companie ) > } Venituri )
Rezultatul:
7
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
8
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Se va crea un grafic de tip bară pentru a vizualiza cele două seturi de date:
1. Se vor crea si listele AN, TRIMESTRU in pagina Analiza comparativă;
2. Se va crea graficul de tip bară, titlu graficului: Grupa A versus Grupa B. Caseta Show Title in
chart nu este selectată. Se alege dimensiunea AN;
3. Se vor crea două expresii:
Grupa A: sum({[Grupa A]<AN=p(AN)>} [OP_VENITURI])
Grupa B: sum({[Grupa B]<AN=p(AN)>} [OP_VENITURI])
Funcţia P() utilizează toate valorile posibile ale unui atribut. Expresiile precedente vor lua în considerare
numai selecţiile făcute pe atributul AN (starea implicită a documentului) şi le adaugă la toate selecţiile făcute
de stările alternative. Selecţiile făcute pe celelalte câmpuri care nu apar în stările alternative, nu sunt luate
în considerare:.
4. În tab-ul Axes, se selectează butonul Primary Dimension Labels: orientare pe diagonală;
5. În tab-ul Number, se setează pentru ambele expresii formatul: Fixed 2 decimals.
Utilizarea stărilor alternative poate crea confuzie utilizatorilor finali. De aceea, este important de a
eticheta corespunzător obiectele care utilizează stări alternative şi de a utiliza obiecte de tip „selecţie
curentă”. Se vor crea două obiecte de tip „selecţie curentă” pe care le vom asocia celor două stări. În
fereastra de proprietăţi, tab-ul General, în caseta Alternate state se selectează: Grupa A sau Grupa B. În
figura de mai jos, se afişează comparativ veniturile obţinute în regiunea „America Latină” faţă de veniturile
obţinute în regiunea „Intern”, în 2010.
Lista AN nu a fost asociată stărilor alternative create. Selecţia AN=2010 se aplică la ambele stări
alternative, deşi observăm că în obiectele de tip „selecţie curentă” nu apare şi selecţia AN=2010.
9
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
10
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Timp:
LOAD *,
Autonumber(Data) as DataID,
autonumber(An&Luna, 'LunaID') as LunaID,
autonumber(An&Trimestru, 'TrimestruID') as TrimestruID;
Load
TempData As Data,
Week(TempData) As Saptamana,
Month(TempData) As Luna,
Year(TempData) As An,
Week (TempData) & '-'& Year(TempData)as SaptamanasiAn,
WeekDay(TempData) as denumire_zi,
WeekStart(TempData, 0, 0) AS prima_zi_sapt,
WeekEnd(TempData, 0, 0) AS ultima_zi_sapt,
Weekyear(TempData) as anul_pt_sapt,
Month(TempData) & '-' &Year(TempData) AS LunasiAn,
MonthStart(TempData) as prima_zi_luna,
MonthEnd(TempData) as ultima_zi_luna,
'Trim' &Ceil(Month(TempData)/3) AS Trimestru,
QuarterStart(TempData) as prima_zi_trim,
QuarterEnd(TempData) as ultima_zi_trim,
YearEnd(TempData) as ultima_zi_an,
DayNumberOfYear(TempData) as numartotalzile
resident TempTimp
ORDER BY TempData ASC;
DROP TABLE TempTimp;
11
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Se vor crea trei liste: An, Trimestru, Luna şi o tabelă pivot cu dimensiunea Oras şi expresia
sum(Vanzarea).
Rezultatul:
Această expresie va returna 0, deoarece valoarea pe care o dorim (adică luna mai) este exclusă din
selecţia curentă a utilizatorului. Utilizatorul a selectat doar luna iunie. Din acest motiv, vom ignora selecţiile
făcute de utilizator pentru atributul Luna.
12
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
şi va avea eticheta Luna anterioara, unde <Luna= > va returna setul de date pentru toate lunile valabile,
mai puţin cele excluse de altă selecţie şi apoi se va asigna valoarea dorită (5) la câmpul LunaID, pentru a
returna numai datele din luna mai.
13
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
Dacă utilizatorul selectează An=2013, Trimestru=Trim2, Luna=Aprilie. Expresia de mai sus returnează
vânzările din luna martie? Răspunsul este nu. Deoarece luna martie nu este selectată şi nu face parte din
trimestru 2, deci este exclusă din selecţii.
Rezultatul:
14
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
Dacă dorim să afişăm vânzările din luna anterioară (Decembrie 2012), expresia se modifică astfel:
sum({$<LunaID ={$(=max(LunaID)-1)}, An=, Trimestru=,Luna=> } Vanzarea)
15
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Vânzările din luna curentă versus luna anterioară (se va afişa procentual)
(sum(Vanzarea)-sum({$<LunaID ={$(=max(LunaID)-1)}, An=,Trimestru=,Luna=> }
Vanzarea))/sum({$<LunaID ={$(=max(LunaID)-1)}, An=,Trimestru=,Luna=> } Vanzarea)
În tab-ul Number, se fac următoarele setări: formatul pentru expresii este Fixed to 2 decimals, iar
pentru ultima expresie se bifează şi caseta Show in Percent (%). În exemplu nostru, luna curentă este
aprilie, 2013.
16
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
[SET DateFormat='M/D/YYYY';]
Se vor crea listele: An, Trimestru, Luna şi Data şi o tabelă pivot cu două dimensiuni: Oras şi Data şi
expresia YTD:
Sum({<An=, Luna=, Trimestru=, Data={">=$(=YearStart(Max(Data)))<=$(=Max(Data))"}>}
Vanzarea)
Funcţia Yearstart() returnează prima zi din anul din care face parte data specificată, în formatul implicit,
precizat în scriptul de încărcare. În tab-ul Presentation, din fereastra de proprietăţi a tabelei pivot, se
bifează caseta Show Partial Sum pentru câmpurile Oras şi Data. Formatul pentru expresie este Fixed to
2 decimals.
Dacă s-a selectat data 01/10/2012, atunci YTD este de la 01/01/2012 până la 01/10/2012. Se vor afişa
vânzările detaliate pe zile, cu total pe oraşe, pe zile şi pe perioada selectată.
17
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Rezultatul:
QTD (Quarter to Date) este perioada cuprinsă între prima zi a trimestrului curent (in cazul nostru trim.
2) şi data curentă (in cazul nostru 5/1/2012). Înlocuim în expresie, funcţia Yearstart() cu funcţia
Quarterstart():
Rezultatul:
18
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Dacă în tabela pivot, înlocuim atributul Data cu atributul Luna (in fereastra Dimensions), vânzările se
vor afişa pe luni, pentru perioada specificată.
Rezultatul:
19
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
MTD (Month to Date) este perioada cuprinsă între prima zi a lunii curente şi data curentă. Se utilizează
expresia:
Sum({<An=, Luna=, Trimestru=, Data={">=$(=MonthStart(Max(Data)))<=$(=Max(Data))"}>}
Vanzarea)
WTD (week to date) este perioada cuprinsă între prima zi a săptămânii curente şi data curentă. Se
utilizează expresia:
Sum({<An=, Luna=, Trimestru=, Data=,
DataID={">=$(=Num(WeekStart(Max(Data))))<=$(=Max(Data))"}>} Vanzarea)
Pentru anul anterior (adică pentru 2012, indiferent de selecţiile din listele Trimestru, Luna):
Sum({<An= {$(=max(An)-1)}, Trimestru=, Luna=>}Vanzarea)
Ex 10: Putem utiliza stările alternative pentru a compara două perioade de timp. Vom crea două stări:
Perioada A şi Perioada B. De asemenea, vom crea două containere ce includ listele An, Luna şi Oras şi
care se vor asocia cu cele două stări.
20
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Se pot crea două grafice de tip linie pentru care se vor face următoarele setări:
• În tab-ul General, se selectează din caseta Alternate State: Perioada A/Perioada B;
• Se stabileşte titlul ferestrei (Window title): ='Analiza comparativa:'&statename()
• Se bifează caseta Show title in chart şi se copiază titlul ferestrei;
• Se alege ca dimensiune câmpul Luna;
• Expresia utilizată este sum(Vanzarea) cu eticheta Perioada A pt primul grafic si cu eticheta
Perioada B pt al doilea grafic;
• Se deschide fereastra de proprietăţi pentru grafic. În tab-ul Expression, se bifează doar caseta Line
pentru ambele expresii. În tab-ul Number, se bifează caseta Fixed to 2 decimals pentru ambele
expresii. Se vor modifica şi separatorii pentru partea zecimală (,) şi pentru mii (.) (daca nu s-au
modificat din script).
21
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Regiune An Vanzari
R1 2010 100
R1 2011 200
R2 2010 300
R2 2011 400
R3 2010 100
R3 2011 200
22
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
Clauza TOTAL poate fi urmată de o listă de atribute puse între < >. Aceste atribute trebuie să fie un
subset al dimensiunilor graficului. În acest caz, agregarea se va face pentru fiecare combinaţie de valori ale
atributelor specificate în listă.
Se va crea urm tabela straight si se va obs. modul de agregare a datelor pentru selectia curenta:
23
Mihaela Muntean, Ana-Ramona Bologa, Business Intelligence. Teorie și practică, editura ASE, 2015
24