Molapse Poor man’s MOLAP Freark van der Berg, (s0139971)
[email protected] Robert Dahmen, (s0113093)
[email protected]
Harold Bruintjes, (s0141844)
[email protected] Sandra Drenthen, (s0146110)
[email protected]
Cecill Etheredge, (s0150207)
[email protected] 18 juli 2009
Inhoudsopgave 1 Inleiding 1.1 Achtergrond 1.2 Aanleiding . 1.3 Visie . . . . 1.4 Indeling . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
1 1 1 2 2
2 Analyse 2.1 Domeinanalyse . . . . . . . . . . . . . . . . . . . 2.1.1 Probleem/doel . . . . . . . . . . . . . . . 2.1.2 Bestaande software . . . . . . . . . . . . . 2.1.3 Gebruikers . . . . . . . . . . . . . . . . . 2.1.4 Omgeving . . . . . . . . . . . . . . . . . . 2.2 Requirementanalyse . . . . . . . . . . . . . . . . 2.2.1 Functionele eisen . . . . . . . . . . . . . . 2.2.2 Niet-functionele eisen . . . . . . . . . . . 2.2.3 Grafisch . . . . . . . . . . . . . . . . . . . 2.3 Scenarioanalyse . . . . . . . . . . . . . . . . . . . 2.3.1 Scenario 1 - Jaar met hoogste cijfers . . . 2.3.2 Scenario 2 - Plaats met hoogste cijfers . . 2.3.3 Scenario 3 - Moeilijkste vak voor Student 2.3.4 Scenario 4 - Kijkcijfers . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
3 3 3 3 4 4 4 4 5 6 7 8 8 8 9
3 Architectureel ontwerp 3.1 Keuzes . . . . . . . . 3.1.1 Structuur . . 3.1.2 Talen . . . . 3.1.3 Libraries . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
10 10 10 10 12
. . . . . . .
13 13 13 14 15 16 16 17
4 Gedetailleerd ontwerp 4.1 Interface . . . . . . . 4.1.1 Globaal . . . 4.1.2 Input . . . . 4.1.3 Grid . . . . . 4.1.4 Dimensielijst 4.1.5 Options . . . 4.1.6 Ori¨entatietool
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . .
. . . . . . .
. . . . . . .
i
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
17 18 19 19 20 20 21 22 24
5 Testen 5.1 Acceptatietest . . . . . . . . . . . . . . . . . . . . 5.1.1 Visualisatie . . . . . . . . . . . . . . . . . 5.1.2 Besturing . . . . . . . . . . . . . . . . . . 5.1.3 Standaard OLAP-operaties . . . . . . . . 5.1.4 Diverse databases . . . . . . . . . . . . . 5.2 Scenario-testen . . . . . . . . . . . . . . . . . . . 5.2.1 Scenario 1 - Jaar met hoogste cijfers . . . 5.2.2 Scenario 2 - Plaats met hoogste cijfers . . 5.2.3 Scenario 3 - Moeilijkste vak voor Student 5.2.4 Scenario 4 - Kijkcijfers . . . . . . . . . . . 5.3 Compatibiliteit . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
26 26 26 26 27 27 27 27 28 28 29 29
6 Evaluatie 6.1 Begeleiding . . 6.2 Planning . . . . 6.3 Samenwerking . 6.4 Communicatie . 6.5 Eindresultaat . 6.6 Conclusie . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
31 31 31 32 32 32 33
4.2
4.3 4.4
4.1.7 Manipulatie 4.1.8 Aggregates 4.1.9 Animaties . Grafisch ontwerp . 4.2.1 Globaal . . 4.2.2 Grid . . . . 4.2.3 GUI . . . . Database . . . . . Configuratie . . . .
. . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . . . . .
. . . . . .
. . . . . .
Verklarende Woordenlijst
34
Glossary
36
Bibliografie
36
A Diagrammen
37
B Handleiding B.1 Compileren van de software . . . . B.2 Starten van de software . . . . . . B.3 Input . . . . . . . . . . . . . . . . . B.4 Betekenissen en werking . . . . . . B.5 Databases . . . . . . . . . . . . . . B.5.1 Veranderen van database . B.5.2 Nieuwe database aanmaken
. . . . . . .
. . . . . . .
ii
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
41 41 41 42 42 46 46 46
Hoofdstuk 1
Inleiding 1.1
Achtergrond
In dit project staat het begrip on-line analytic processing centraal. Onder de naam OLAP biedt deze databasetechnologie de mogelijkheid om op een snelle en effici¨ente manier multidimensionale databases te analyseren. Kort gezegd houdt dit voor ons geval in dat informatie uit een complexe database kan overzichtelijk worden weergegeven via een driedimensionale spreadsheet. OLAP wordt door veel bedrijven gebruikt om nuttige informatie te extraheren uit grote databases met ruwe data. Door middel van een aantal standaardoperaties - slice, dice en rollup - is de ruwe data om te vormen tot bruikbare informatie die bijvoorbeeld gebruikt kan worden om de effici¨entie van de bedrijfsvoering te verhogen of bij het ontdekken van trends bij veiligheidsvraagstukken, criminaliteitbestrijding of milieu-analyse [Dix08, MAM06].
1.2
Aanleiding
Dhr. M. van Keulen is docent van het vak Data Warehousing and Data Mining waarin de theorie van OLAP wordt behandeld. Om voor studenten een duidelijk beeld te scheppen wat OLAP precies inhoudt, is er software nodig die de werking van OLAP op een database kan visualiseren. Het gebruik van dergelijke software zou studenten helpen om de achterliggende theorie te begrijpen omdat, zoals het spreekwoord luidt, een plaatje meer zegt dan duizend woorden. Ruim voor de start van het ontwerpproject staat de samenstelling van het team vast. Dit team, bestaande uit mensen met ervaring in verschillende richtingen als graphics en scripting, kan zich goed vinden in de keuze voor het ontwerpproject. Daarnaast wordt extra motivatie gevonden in het feit dat het uiteindelijke product ook daadwerkelijk in collegezalen gebruikt zal gaan worden.
1
1.3
Visie
Voor dit ontwerpproject is in het voorgaande jaar door een ander team reeds een implementatie ontwikkeld en afgeleverd. Deze eerdere versie bleek helaas niet geheel aan de verwachtingen te voldoen door problemen met onder andere de grafische weergave en de gebruikersinterface. Voor het doeleinde van dit project zijn beide punten echter van belang, omdat zonder een duidelijke grafische weergave de werking van OLAP niet duidelijk zal zijn. Ook wanneer het niet duidelijk is welke invloed de gebruikersinterface op het weergegeven model heeft, zal dit het begrip onder studenten belemmeren. Omdat ons team reeds ervaring heeft met het ontwikkelen van grafische software, verwachten wij echter een zeer degelijk en bruikbaar product af te kunnen leveren dat aan alle gestelde verwachtingen zal voldoen.
1.4
Indeling
Dit verslag beschrijft het ontwerpproces van dit project. In hoofdstuk 2 wordt begonnen met de analyse: het gedetailleerd bepalen van de eisen en het doel van het project. Hierna komt het architectureel ontwerp (hoofdstuk 3) aan bod waarbij in grote lijnen wordt opgesteld wat er moet gebeuren om de eerder gestelde doelen te bereiken. Vervolgens wordt dit in het gedetailleerde ontwerp (hoofdstuk 4) verder uitgewerkt tot het algehele ontwerp, waarna tot de daadwerkelijke implementatie kan worden overgegaan. Het ge¨ımplementeerde prototype wordt vervolgens getest (hoofdstuk 5) en tot slot kijken we terug op het hele proces voor de totstandkoming van het prototype in de evaluatie (hoofdstuk 6).
2
Hoofdstuk 2
Analyse 2.1 2.1.1
Domeinanalyse Probleem/doel
Het doel van het project is het ontwerpen van een stuk software dat in staat is om het effect van OLAP operaties op een multidimensionale database te visualiseren. De software dient de data uit een onderliggende database driedimensionaal weer te geven door middel van een matrix van kubussen of cellen, de zogenaamde grid. Deze grid dient, naast gedraaid en vergroot of verkleind te kunnen worden, de meest belangrijke OLAP-operaties (zie paragraaf 2.2.1) weer te kunnen geven. Verder zullen er diverse voorbeelddatabases bijgeleverd worden waarmee de verschillende doeleinden van OLAP gedemonstreerd kunnen worden.
2.1.2
Bestaande software
PowerOLAP PowerOLAP is professionele OLAP software die zich vooral op effici¨entie en gebruikersgemak richt en zich daarbij niet bezighoudt met het duidelijk visualiseren wat het effect van alle operaties is die uitgevoerd worden. Dit is niet nodig bij de doeleinden waar deze software voor wordt gebruikt: het daadwerkelijk gebruiken van OLAP en het extraheren van bruikbare informatie uit enorme databases. Het gebrek aan sprekende visualisatie maakt dit softwarepakket ongeschikt voor OLAP demonstraties tijdens colleges. Daarnaast maakt PowerOLAP slechts gebruik van tweedimensionale spreadsheets om de data inzichtelijk te maken [PAR].
Koffie Koffie is het prototype ter visualisering van MOLAP dat door het voorgaande team is ontworpen. De software voert OLAP operaties uit, maar de visualisering van deze operaties laat ernstig te wensen over. Omdat deze visualisering uitermate belangrijk is, blijkt Koffie praktisch ongeschikt om voor dit doeleinde gebruikt te worden. Echter blijken de tekortkomingen van deze software wel waardevol tijdens het ontwerpproces van onze software.
3
2.1.3
Gebruikers
De te ontwerpen software is bedoeld voor educatieve doeleinden en zal tijdens hoorcolleges van Dhr. M. van Keulen worden gebruikt om studenten een beeld te geven van de theorie achter OLAP en hoe deze gebruikt kan worden om een overvloed aan informatie inzichtelijk te maken.
2.1.4
Omgeving
De software zal gedraaid worden op het systeem dat door de docent of de betreffende collegezaal ter beschikking wordt gesteld.
2.2 2.2.1
Requirementanalyse Functionele eisen
Operaties R1: Aggregatie: Het programma zal bij het weglaten van bepaalde dimensies verschillende standaard SQL-operaties op deze dimensies kunnen uitvoeren om zodoende alle betreffende waarden samen te voegen. SUM: Het AVG: Het MIN: Het MAX: Het
sommeren van de waarden. middelen van de waarden. minimum van de waarden. maximum van de waarden.
R2: Slice: Het selecteren van een slice - een groep aaneensluitende cellen - over de drie verschillende assen. R3: Dice: Het selecteren van een enkele cel waarvan vervolgens meer data worden getoond uit de dimensies die voorafgaand aan de dice waren opgerold. In het geval dat er meer dan drie dimensies bestaan zal de mogelijkheid worden geboden om te selecteren welke dimensies er getoond worden en welke overige dimensies zullen worden samengevoegd. R4: Roll-up: Het samenvoegen van elementen met gelijke waarde in een dimensie met behulp van een geselecteerde standaardoperatie. R5: Drilldown: Het uitbreiden van een slice tot een nieuwe matrix van kubussen door middel van het uitklappen van een eerder samengevoegde dimensie. 4
R6: Pivot: De kubus moet ook gedraaid kunnen worden om de data die men wil uitlezen in beeld te krijgen. R7: Ongedaan maken: Voor het gebruiksgemak moeten al deze operaties ook ongedaan gemaakt kunnen worden. Grafisch R8: Animaties: Het duidelijk visualiseren van OLAP-operaties is de reden dat dit project opnieuw gedaan wordt. Het is dus belangrijk dat de animaties op een overzichtelijke manier weergeven hoe de data wordt gemanipuleerd en wat het resultaat van deze manipulatie is. R9: Driedimensionale weergave: Het weergeven van de multidimensionale database door middel van een driedimensionale matrix van kubussen of cellen. Gezien de technische en praktische limitaties bij het weergeven van meer dan drie dimensies zijn we van mening dat drie voorlopig voldoende overzichtelijkheid biedt. Overige dimensies worden daarom opgerold met behulp van de eerder genoemde aggregaatoperaties. R10: Aggregaties: De mogelijkheid om cellen met aggregatiedata weer te geven die voor elke rij, over elke as, een totaal weergeven met behulp van de eerder genoemde aggregaatoperaties. R11: Interface: De interface moet duidelijk ingericht en intu¨ıtief voor de gebruiker zijn, om deze niet af te schrikken met vreemd gedrag.
2.2.2
Niet-functionele eisen
Algemeen R12: Lichtgewicht: Om de software ook op oudere systemen bruikbaar te houden zullen er niet onnodig veel resources gebruikt worden. R13: Multiplatform: Om het gebruiksgemak of portabiliteit te vergroten zal de software op diverse besturingssystemen waaronder Microsoft WindowsTM en Linux draaien. R14: Onderhoudbaarheid: De broncode van de software zal juist gedocumenteerd zijn en zal modulair gebouwd worden opdat in een later stadium componenten mogelijk uitgebreid, vervangen of toegevoegd kunnen worden. Ook het aanmaken en beheren van voorbeelddatabases is mogelijk met juist geformatteerde tekstbestanden. 5
R15: Betrouwbaarheid: De database wordt handmatig aangepast en de software zal uitgaan van de correctheid en volledigheid van de gegeven informatie. Gegeven dat aan deze eigenschap voldaan wordt, zal de software zich goed en foutloos laten schalen en gebruiken. R16: Responstijd: Ondanks dat de software mogelijk op oudere systemen gebruikt zal gaan worden, zal het systeem vlot en vloeiend reageren op wijzigingen om de werking van OLAP zo intu¨ıtief mogelijk weer te geven.
2.2.3
Grafisch
R17: Kwaliteit: Het grafische component zal degelijk en overzichtelijk worden vormgegeven. Alle weergegeven data binnen en buiten de kubus zullen goed leesbaar zijn. Tevens zal de koppeling tussen de assen in de matrix en geselecteerde dimensies duidelijk worden weergegeven. R18: Onderscheidend: Visuele elementen zullen goed onderscheidbaar zijn, gegeven het programma uiteindelijk getoond zal worden via een beamer. Hierbij valt te denken aan combinaties van kleuren met duidelijk contrastverschil.
Hardware R19: Grafisch: Vanwege technische limitaties van oudere grafische kaarten is het niet mogelijk om de driedimensionale visualisatie op deze kaarten effici¨ent genoeg te implementeren. De minimale systeemeisen voor de software houden daarom onder meer een grafische kaart van het type NVIDIA GeForceTM 6 (of hoger) in. Deze eis stamt uit het gebruik van Vertex Textures, een feature die slechts in nieuwe kaarten wordt ondersteund [GFG04]. Of met de systemen in de collegezalen ook aan deze eis wordt voldaan is onzeker; de computers in de practicumruimtes voldoen echter wel. R20: Geheugengebruik: De software zal gebruikt worden bij databases die klein in omvang zijn, met ten hoogste 2500 elementen. Omdat de software portable is, zal deze dan ook niet meer dan 20 MiB schijfruimte in beslag nemen. Het geheugengebruik zal niet hoger zijn dan 1 GiB; oudere systemen beschikken veelal niet over zodanige hoeveelheid intern geheugen.
Database R21: Beschikbaarheid: Omdat de software portable is, zal er geen sprake zijn van afhankelijk van een internetverbinding of databaseserver. De database zal bij voorkeur lokaal draaien om de werking te garanderen op plekken waarbij eerder genoemde diensten niet beschikbaar zijn. 6
R22: Dynamisch: De software zal bij voorkeur om kunnen gaan met verschillende databases, ongeacht of er tijdens het ontwerpen rekening gehouden is met een specifieke databaseontwerp. Zolang de database volledig en juist geformatteerd is, zal het door de software kunnen worden ingeladen. R23: Meerdere voorbeelddatabases: Door verschillende voorbeelddatabases te leveren zullen verschillende situaties kunnen worden getoond, zodat het begrip van de student zal toenemen. Het kunnen aanmaken van nieuwe voorbeelddatabases zou hierop een nuttige aanvulling zijn.
2.3
Scenarioanalyse
Bij het testen van de end-user beleving wordt in plaats van use cases gebruik gemaakt van scenario’s. Het verschil is dat een use case een enkele stap beschrijft, terwijl een scenario een hele reeks handelingen achter elkaar laat uitvoeren. Omdat de reactie van de software afhangt van wat er hiervoor voor handelingen zijn verricht, is het testen van scenario’s hier het meest geschikt.
Figuur 2.1: De indeling van de tabellen in de Grades voorbeelddatabase
De Grades voorbeelddatabase bestaat uit vier tabellen: University, Course, Time en Student. Ieder hebben voor de hand liggende subdimensies waarop gegroepeerd kan worden. Hierbij moet gedacht worden aan Naam en Plaats voor University, Vaknaam en Docent voor Course, Naam en Studentnummer voor Student en Jaar en Kwartiel voor Time. Deze indeling van dimensies en subdimensies van de Grades voorbeelddatabase is te zien in Figuur 2.1. Bij alle scenario’s hieronder wordt gebruik gemaakt van deze voorbeelddatabase Grades, be7
halve bij het laatste scenario.
2.3.1
Scenario 1 - Jaar met hoogste cijfers
De gebruiker is een docent die wil zien in welk jaar de hoogste cijfers voor zijn vak gehaald zijn. 1. 2. 3. 4. 5. 6. 7. 8.
Start het programma. Zorg dat van de dimensie Course het detailniveau Teacher is. Zorg dat van de dimensie Time het detailniveau Year is. Aggregeer Course en Time niet. Aggregeer Student en University met Average. Draai eventueel de grid opdat alle waardes goed leesbaar zijn. Slice de kolom met de gewenste Teacher. Kijk in welk jaar het hoogste gemiddelde is gehaald.
2.3.2
Scenario 2 - Plaats met hoogste cijfers
De gebruiker is een student die wil zien welke plaats met Universiteit(en) jaarlijks het best presteert gekeken naar het gemiddelde cijfer. 1. 2. 3. 4. 5. 6. 7.
Start het programma. Stel het detailniveau van University in op City. Stel het detailniveau van Time in op Year. Stel de aggregate van Course en Student in op Average. Draai eventueel de grid om het goed uitleesbaar te maken. Lees uit hoe elke universiteit ieder jaar gepresteerd heeft. Aggregeer eventueel Time met Average of Max om te kijken naar respectievelijk het gemiddelde of het maximum over alle jaren.
2.3.3
Scenario 3 - Moeilijkste vak voor Student
De gebruiker is een studiebegeleider die wil weten met welk vak een student op een zekere universiteit het meeste moeite heeft. 1. 2. 3. 4. 5. 6. 7. 8.
Start het programma. Zet het detailniveau van Student op StudentName. Zet het detailniveau van Course op CourseName. Zet het detailniveau van University op UniversityName. Slice de juiste University. Slice de juiste Student. Aggregeer Time met Average. Lees uit met welk vak de student het meeste moeite had door te kijken naar het laagst behaalde cijfer. 8
2.3.4
Scenario 4 - Kijkcijfers
Bij dit scenario wordt gebruik gemaakt van de Ratings voorbeelddatabase, welke weergeeft wat de kijkcijfers waren voor televisieshows per demografische groep. De Ratings database bestaat uit vier tabellen: Country, Show, Demograph, Gender. De detailniveaus van elke tabel zien we als volgt: Country heeft Landsnaam en Continent. Show heeft Shownaam, Zender en Genre. Demograph heeft de leeftijdsgroep en Gender is Man of Vrouw. De gebruiker is een reclamebureau, die wil weten bij welke show in Nederland reclametijd moet worden ingekocht om jongeren zo goed mogelijk te bereiken. 1. 2. 3. 4. 5. 6. 7. 8.
Start het programma. Zet het detailniveau van Country op CountryName. Slice Nederland als Country. Zet het detailniveau van Show op ShowName. Zet het detailniveau van Demograph op AgeGroup. Slice Jongeren als Demograph. Aggregeer Gender met Average. Kijk nu in de overgebleven rij naar het hoogste kijkcijfer.
9
Hoofdstuk 3
Architectureel ontwerp 3.1
Keuzes
Om tot een architectureel ontwerp te komen heeft het team op een groot aantal gebieden keuzes gemaakt. De totstandkoming van deze beslissingen staat hieronder beschreven.
3.1.1
Structuur
Model-View-Controller Volgens het ontwerppatroon Model-View-Controller, zoals beschreven in [Ree03], wordt het programma in drie componenten verdeeld: de model, view en controller. Dit patroon sluit goed aan bij de modulaire structuur van onze software. Als bijkomstigheid kunnen de onderdelen verdeeld worden over teamleden van dit project, waardoor iedereen zich kan specialiseren op zijn of haar eigen onderdeel. Het model is een multidimensionale database, welke aangesproken wordt door de controller. De controller geeft vervolgens de opdracht aan de view om deze informatie overzichtelijk weer te geven. De gebruiker kan aan de controller opdrachten tot OLAP-operaties doorgeven. Deze informatie komt bij de controller binnen die aan de database de staat na de bewerking opvraagt en deze vervolgens doorstuurt naar de view. Deze verdeling is te zien in Figuur 3.1.
3.1.2
Talen
C++: C++ is een object-geori¨enteerde programmeertaal gebaseerd op C die uitermate geschikt is voor het implementeren van software waarbij performance en effici¨entie van belang is. In tegenstelling tot programmeertalen als Java introduceert C++ geen extra abstractielagen tussen de hardware en onze software, waardoor er niet alleen voor de grafische weergave maar 10
Figuur 3.1: De Model-View-Controller verdeling van het project
ook het koppelen van de libraries, die hieronder genoemd worden, een directere aanpak voor implementatie mogelijk is.
SQL: SQL is de facto standaard voor het opvragen en aanpassen van informatie in relationele databases. MDX is een alternatieve taal, die speciaal gecre¨eerd is voor het gebruik met OLAP. Echter is er geen MDX library die voldoet aan de portability eis en heeft het team reeds ervaring met SQL, wat tot de keuze voor SQL logischer maakt.
Bennu: Voor de controller van de software bestaat de keuze uit het gebruik van een programmeertaal zoals C/C++ of een scripttaal als Lua of Bennu. Deze laatste hebben als voordeel dat alle programmacode in een interpreter wordt uitgevoerd en zich daarom beter leent voor het eenvoudig aanpassen en testen van code, wat weer ten gunste komt van de ontwikkeling. In veel gevallen, waaronder Bennu, is de interpreter geschikt om gedraaid te worden op diverse platformen. Bennu is een scripttaal die ons een voordeel biedt met van het gebruik van processen, de implementatie van threads op scriptniveau, die het mogelijk maken om onder andere animaties te parallelliseren. Deze parallellisatie zorgt ervoor dat meerdere animaties onafhankelijk van elkaar kunnen worden uitgevoerd en zodoende vlekkeloos in elkaar over kunnen lopen en kunnen worden gemengd. Het verbinden van extra functionaliteit in de vorm van libraries is zeer eenvoudig. De koppeling tussen Bennu (controller) en de overige libraries (model en view) blijft op deze manier dan ook beperkt tot een lichte taak.
11
3.1.3
Libraries
SQLite Deze lichtgewichte open-source library laat zich heel gemakkelijk integreren en draait in tegenstelling tot andere libaries als MySQL en PostgreSQL in een lokaal proces in plaats van een server. SQlite slaat de gehele database op in een enkel bestand, welke eenvoudig mee te nemen is, of in het geheugen van het lokale proces. In het laatste geval neemt de responsiviteit ook in hoge mate toe omdat er praktisch geen informatie wordt weggeschreven.
SDL (Simple DirectMedia Layer) SDL is een abstractielaag tussen de software en het besturingssysteem dat het ontwikkelen van platformonafhankelijke software bevordert. SDL heeft zichzelf bewezen als een goede library voor het afhandelen van invoer en uitvoer vanwege zijn effici¨entie en gemak. Verder is SDL reeds in Bennu ge¨ıntegreerd, wat het gebruik van deze functionaliteit vergemakkelijkt.
OpenGL Deze openbare en gestandaardiseerde specificatie wordt gebruikt voor alles omtrent de grafische weergave van de software. Het alternatief, Direct3D, valt af omdat deze niet voldoende ondersteuning biedt voor meerdere platformen. Vanwege eerdere ervaringen met OpenGL is de keuze dan ook logisch.
12
Hoofdstuk 4
Gedetailleerd ontwerp 4.1 4.1.1
Interface Globaal
De layout van de GUI (Graphical User Interface) is samen met het model te zien in Figuur 4.1. Deze layout bestaat uit de dimensielijst (linksboven), het operatiemenu (linksonder) en de orientatietool (rechtsonder). De visualisatie van de database, waarin de resultaten van de operaties zichtbaar zijn, is te vinden in het midden van het scherm.
Figuur 4.1: Een impressie van de software, bestaande uit de weergave van het model en de interface.
13
4.1.2
Input
Het toetsenbord en de muis vormen het gereedschap van Molapse. Hiermee kan de GUI worden bediend, instellingen gewijzigd en operaties uitgevoerd. De voornaamste input is afkomstig voor de muis; het programma is bijna volledig met de muis te besturen. Op het keyboard zitten extra mogelijkheden: het maken van een screenshot, discomodus, isometrische modus, automatische rotatie van de grid en opslaan en laden van de staat van de Grid. De verschillende inputmogelijkheden zijn hier uiteengezet en toegelicht. Voor een interface is het belangrijk dat de mogelijkheden intu¨ıtief zijn, omdat de gebruiker dan minder hoeft te wennen aan vreemde mogelijkheden en hierdoor niet wordt afgeschrikt. De interface is daarom eenvoudig gebleven. Linkermuisknop • Ingedrukt houden in combinatie met een muisbeweging zorgt voor rotatie van de weergave. • Opties (bijvoorbeeld checkboxes of radiobuttons) kunnen worden geselecteerd. Rechtermuisknop • Door te klikken op het grid of de achtergrond wordt de geselecteerde actie in het operatiemenu respectievelijk uitgevoerd of ongedaan gemaakt. • Door te klikken op de teksten in de dimensielijst wordt een menu getoond waarin respectievelijk een operatie (voor detail of aggregaat) geselecteerd kan worden. Scrollwielknop • Verandert de huidige geselecteerde as waarop operaties worden uitgevoerd. Scrollwiel omhoog/omlaag • Zorgt voor het in- en uitzoomen van de weergave. Naast input van de muis is er een aantal toetsen met functionaliteit. Deze zijn hieronder omschreven.
14
Escape
Sluit het programma af. Escape is een zeer gebruikelijke methode om een programma af te sluiten en kan daarom bij Molapse niet ontbreken.
+
Zoomt in. Werkt voor de reguliere + en de + op het numpad.
-
Zoomt uit. Werkt voor de reguliere - en de - op het numpad..
S
Maakt screenshot. Een screenshot is een grafische uitdraai van wat er zich op dat moment in het venster bevindt.
D
Schakelt discomodus aan/uit. Deze modus laat zien dat de grid veel snelle kleurveranderingen ondersteunt en toont mogelijkheden voor toekomstige functionaliteit door de kleur van een cel af te laten hangen van de waarde in die cel.
I
Schakelt isometrische modus aan/uit. Deze modus vervangt het perspectief met een orthografische/isometrische weergave waar de diepte van een object geen effect heeft op grootte van de projectie. Deze modus is enkel als experiment toegevoegd om te bepalen of de leesbaarheid van de informatie op deze manier wordt vergroot. Helaas is dit vaak niet het geval omdat enkel de buitenste cellen van de grid goed zichtbaar zijn.
A
Schakelt automatisch ronddraaien aan/uit. Deze modus biedt mogelijkheden voor een demonstratie.
F11
Slaat huidige staat van het model op. De eerder opgeslagen staat wordt verwijderd.
F12
Laadt de laatst opgeslagen staat van het model. Indien er geen opgeslagen staat is of indien deze niet in te laden is, wordt er niets veranderd.
4.1.3
Grid
De grid, de rode matrix dat de driedimensionale weergave van de database verzorgt, is te vinden in het midden van het scherm. In paragraaf 4.1.2 is te lezen dat deze grid op diverse manieren te manipuleren is. Voor het koppelen van de linkermuisknop aan de rotatie is gekozen omdat dit het meest natuurlijk is; de meest primaire functionaliteit is geplaatst op de meest primaire muisknop. De rechtermuisknop is gekozen voor het uitvoeren van de actie, omdat dit na het roteren de meest primaire actie is en zodoende een prominente plaats eist. Het scrollwiel leent zich uitstekend voor het in- en uitzoomen van de grid. Dan rest nog het veranderen van de as en is er nog ´e´en knop over op de muis: de scrollwielknop, ook wel de middelste knop genoemd.
15
Figuur 4.2: Initie¨el concept (links) en uiteindelijke implementatie van de dimensielijst (rechts).
4.1.4
Dimensielijst
Het eerste concept van de dimensielijst is te zien in Figuur 4.2. Elke rij behoort tot ´e´en dimensie. Aan de linkerkant van een rij is de naam van de dimensie te zien; daarnaast bevindt zich een dropdownlijst waaruit de aggregaatoperatie gekozen kan worden; het derde element is een dropdownlijst waaruit het detailniveau van de dimensie gekozen kan worden; als laatste is er een vierkant waarmee de dimensie heen en weer gesleept kan worden. Via het slepen kan de volgorde van de dimensies worden bepaald. Deze lijst is van groot belang voor het beheren van wat er in de grid getoond moet worden. Het selecteren van het detailniveau en het veranderen van een aggregaatoperatie zijn alleen in dit menu mogelijk. Daarnaast speelt de volgorde van de dimensies een grote rol bij aggregaatoperaties als Min en Max. Dit probleem is gemakkelijker uit te leggen aan de hand van een voorbeeld. Neem de volgende tweedimensionale matrix. as Y
X 0 2
3 1
Wanneer eerst de X as wordt ’opgerold’ met de aggregaatoperatie Max en daarna Y met Sum, dan is het resultaat 3 + 2 = 5. Wanneer dit andersom gedaan wordt: eerst Y met Sum en X met Max, dan is het resultaat max(2, 4) = 4. De verschillen met de uiteindelijke versie in Figuur 4.2 zijn gering. Omdat de gebruikte GUI library geen dropdownlijsten ondersteunt, is er gekozen voor een menu dat getoond wordt zodra op de rechtermuisknop geklikt wordt. Het vierkant waarmee gesleept zou kunnen worden is vervangen door twee aparte knoppen, die de desbetreffende dimensie ´e´en omhoog of ´e´en omlaag laten bewegen. Dit is gedaan omdat het aanzienlijk eenvoudiger te implementeren en niet minder intu¨ıtief te begrijpen is.
4.1.5
Options
Hier bevinden zich de opties voor het selecteren van de operaties voor de aggregates en het selecteren van de editmodus zoals wordt beschreven in paragrafen 4.1.8 en 4.1.7. Het selecteren van de editmodus kan door middel van een drietal radiobuttons. De radiobuttons 16
maken het mogelijk dat slechts ´e´en van de opties geselecteerd kan worden. Het selecteren van de Base Operation heeft invloed op de aggregatie van de waardes indien een detailniveau wordt gebruikt.
4.1.6
Ori¨ entatietool
Met dit kompas is getracht de navigatie voor de gebruiker te vergemakkelijken: het toont de ori¨entatie van de assen, geeft aan welke dimensies er op die assen zitten en laat zien welke as momenteel geselecteerd is. Omdat het kompas meedraait met de grid, is dit te alle tijden goed te zien.
4.1.7
Manipulatie
Slice De werking van een slice hangt af van de geselecteerde as. Het uitvoeren van eenslice gaat als volgt: 1. 2. 3. 4.
Selecteer de slice modus (zie Edit Mode). Klik en houd rechtermuisknop vast boven ´e´en van de slices die gewenst zijn. Sleep de muiscursor zodanig dat hij zich boven een andere slice bevindt. Laat de rechtermuisknop los.
Hierdoor worden de slices die zijn aangewezen en alle daartussen opgelicht uit de grid. Overige slices zullen worden weggehaald. Unslice De werking van een unslice hangt af van de geselecteerde as. Om een dimensie vrij te maken vanslices, is het mogelijk een unslice uit te voeren en dit gaat als volgt: 1. Selecteer de slice modus (zie Edit Mode). 2. Klik met de rechtermuisknop naast de grid, dus op de (zwarte) achtergrond. Dit zal alleslices op de huidig geselecteerde as verwijderen en zodoende de gehele dimensie met de huidige detail tonen. Dice Het uitvoeren van een dice gaat als volgt: 1. Selecteer de dice modus (zie Edit Mode). 2. Klik met de rechtermuisknop op een box. De dimensies op de huidige assen (posities 1, 2 en 3) zullen de rollup SQL SELECT krijgen, met als geselecteerd waarde die van de geselecteerde box. Vervolgens zullen tot drie dimensies toe de rollup SQL NONE krijgen en verplaatst worden naar de eerste plaats in de dimensielijst. De drie dimensies die hiervoor in aanmerking komen zullen worden gezocht op volgorde van hun posities, van boven naar onder, vanaf de vierde positie. dimensies die al SQL SELECT hebben worden overgeslagen. 17
Undice Het uitvoeren van een undice gaat als volgt: 1. Selecteer de dice modus (zie Edit Mode). 2. Klik met de rechtermuisknop naast de grid, dus op de (zwarte) achtergrond. De eerste dimensies, van boven naar onder, die SQL SELECT als rollup hebben, worden verplaatst naar de eerste drie plaatsen in de dimensielijst en krijgen de rollup SQL NONE. dimensies die hiertoe zijn verplaatst zullen zo nodig SQL SUM krijgen. Als er geen dimensies met SQL SELECT zijn, gebeurt er niets. Rollup De werking van eenslice hangt af van de geselecteerde as. Het uitvoeren van een rollup gaat als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechtermuisknop op de grid. De dimensie op de geselecteerde as zal de rollup SQL SUM krijgen. Deze operatie is te wijzigen in de lijst van dimensies. Drilldown De werking van eenslice hangt af van de geselecteerde as. Het uitvoeren van een drilldown gaat als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechtermuisknop op de grid. De dimensie op de geselecteerde as zal de rollup SQL NONE krijgen. Een ander uitvoering is als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechtermuisknop naast grid, dus op de (zwarte) achtergrond. Er komt een menuutje te voorschijn, met de namen van dimensies waarop een drilldown kan worden uitgevoerd. 3. Selecteer ´e´en van die dimensies. De gekozen dimensie zal worden verplaatst naar de geselecteerde as en zal de rollup SQL NONE krijgen.
4.1.8
Aggregates
Aggregates zijn de cellen die zich om de grid heen bevinden. Deze grijze cellen bevatten de aggregatiewaarde van een rij, slice of de gehele grid. Dit maakt het makkelijk voor de gebruiker om snel de aggregatiewaarden van een rij of slice te zien zonder de operatie eerst uit te voeren. De cellen kunnen worden geactiveerd via het optiemenu waar ook gekozen kan worden w´elke aggregatie wordt getoond: Sum, Average, Minimum of Maximum. 18
4.1.9
Animaties
Het doel van Molapse is om de werking van OLAP op een grafische manier uit te leggen ten einde duidelijk te maken hoe de verschillende operaties werken. Dit wordt gedaan met behulp van animaties. Deze animaties zorgen ervoor dat de verschillende operaties worden uitgebeeld en zo is te zien wat er met de database gebeurt. Alle animaties zijn als volgt geimplementeerd: Slice Deze operatie selecteert enkele slices op de huidige actieve as. De overige slices zullen vervolgens niet meer in de grid getoond worden. Om dit uit te beelden worden de slices die niet geselecteerd zijn naar de zijkant bewogen en langzaam uitgefaseerd terwijl de geselecteerde slices naar het midden worden verplaatst. Unslice Deze operatie maakt alle selecties (via de bovenstaande operatie) op de huidige actieve as ongedaan. Dit betekent dat er mogelijk slices bijkomen. Om dit uit te beelden worden deze nieuwe slices langzaam geintroduceerd via de zijkanten terwijl alle huidige slices verplaatst worden naar hun toekomstige positie. Rollup Deze operatie zorgt ervoor dat van de dimensie op de huidige actieve as alleen het totaalresultaat getoond wordt bestaande uit de optelling, gemiddelde, het minimum of maximum van de waarden. Om dit uit te beelden wordt de grid samengeperst op deze as. Dit toont aan dat het resultaat een totaal is van alle cellen. Drilldown Deze operatie zorgt ervoor dat de dimensie op de huidige actieve as, waarvan op het moment enkel een totaalresultaat gebruikt wordt, volledig zal worden weergeven op het geselecteerde detailniveau. Om dit uit te beelden wordt de grid uiteengetrokken op deze as, zodat dat het lijkt alsof de cellen uit het totaalresultaat ontstaan, wat uiteraard ook het geval is. Dice Deze operatie selecteert op alle huidige getoonde dimensies het item behorende bij de ´e´en cel. Vervolgens wordt op maximaal drie dimensies een gls(op:drilldown) uitgevoerd. Omdat deze operatie slechts bestaat uit andere operaties, bestaat de animatie ook uit deze animaties. Deze worden samengevoegd tot ´e´en animatie. Undice Deze operatie voert het tegenovergestelde van de dice uit. Deze operatie bestaat dan ook geheel uit een combinatie van andere operaties.
4.2
Grafisch ontwerp
Het grafische gedeelte omvat het eerder in paragraaf 3.1.1 beschreven view-component uit het Model-View-Controller paradigma en is verantwoordelijk voor het correct weergeven van de database zoals deze in het model wordt beschreven. Verder dient dit onderdeel er ook voor om de grafische interface op het laagste niveau te tekenen. Omdat er sprake is van een enkel model, is er gekozen om het grafische gedeelte volgens het singleton pattern op te zetten. Dit waarborgt dat er maar ´e´en instantie van dit onderdeel 19
kan zijn en dat de controller altijd exact weet welk object benaderd dient te worden voor een bepaalde grafische handeling. Het grafische gedeelte is opgesplitst in drie hoofddelen: de klassen Renderer, Grid en GUI.
4.2.1
Globaal
De klasse Renderer is verantwoordelijk voor het initialiseren en afbreken van de grafische omgeving en het aanspreken van de juiste weergaveklassen in de software. Dit is dan ook de enige klasse die aangeroepen kan worden om daadwerkelijk iets te tekenen op het scherm; in dit geval worden de andere klassen in het grafische gedeelte door deze klasse zelf aangeroepen. Een hulpklasse hierbij is de ShaderManager, die ervoor zorgt dat speciale programma’s ter ondersteuning van de weergave, zogeheten shaders, op de grafische kaart kunnen worden uitgevoerd.
4.2.2
Grid
De klasse Grid verzorgt de weergave van het daadwerkelijke databasemodel en de bijbehorende ori¨entatietool. Omdat de controller de grid, in verband met onderandere animaties, op meerdere onderscheidende niveaus moet kunnen benaderen bestaat er een basisklasse Entity waaruit de verschillende niveaus - box, slice, grid, aggregates en aggregate slices - als klassen worden geimplementeerd. Door de klasse van het juiste niveau aan te spreken kan de view zodoende op eenvoudige en effici¨ente wijze worden gemanipuleerd.
Figuur 4.3: Links: voorbeeldmodel met een selectie van slices (blauw). Midden: voorbeeldmodel met aggregaatcellen (grijs). Rechts: ori¨entatietool met huidige dimensies.
Zoals bekend wordt het model weergegeven als een matrix van kubusvormige cellen met tekstwaarden. De kleurkeuze van de cellen in het model bestaat uit twee kleuren met duidelijk contrastverschil - donkerrood (normale weergave) en lichtblauw (geselecteerde cellen) - en daarnaast een grijze kleur voor de weergave van aggregaatcellen, zoals te zien is in figuur 4.3. De tekstwaarden worden door middel van het industri¨ele lettertype DIN 1451 in witte kleur weergegeven [Deu86]. Dit lettertype heeft zich bewezen als een zeer leesbaar lettertype en is daarom uitermate geschikt voor onze weergave van tekst. Zoals uit de figuur blijkt, worden de tekstwaarden voor betere leesbaarheid in het niet geaggregeerde gedeelte in het grijs (in tegenstelling tot wit) weergegeven wanneer de aggregaatcellen zichtbaar zijn. 20
Om te zorgen dat duidelijk zichtbaar is dat er met drie dimensies wordt gewerkt en om meer inzicht te bieden op waarden die zich in de grid (in tegenstelling tot die aan het oppervlak) bevinden, wordt de grid met een bepaalde mate van transparantie getekend. Dit betekent dat elementen doorschijnend zijn zodat ook achterliggende elementen kunnen worden gelezen. De grafische hardware verwacht doorschijnende objecten in een bepaalde volgorde aangeleverd te krijgen. Alle objecten dienen dus gesorteerd te worden doorgestuurd. Dit is een relatief intensieve rekenkundige bewerking, dus is er gekozen om een deel van deze taak aan de grafische kaart over te laten. Om dit te bewerkstelligen zijn er zogeheten shaders nodig die via de klasse ShaderManager worden aangesproken. Dit verklaart de extra eisen die eerder in paragraaf 2.2.3 aan de grafische kaart werden gesteld.
Figuur 4.4: Het gebruik van omranding van cellen (links) in vergelijking met een model zonder omranding (rechts). De cellen zijn in het eerste geval duidelijker te onderscheiden.
Omdat verschillende elementen visueel duidelijk onderscheidbaar moeten blijven is er gekozen om alle cellen in het model met omranding te tekenen, zoals te zien is in figuur 4.4. Ook deze omranding maakt gebruik van shaders, waardoor er nagenoeg geen nadelige invloed op de snelheid van de software ontstaat. De ori¨entatietool (zie figuur 4.3) wordt weergegeven met drie verschillend gekleurde lijnstukken op het scherm, waarbij elke lijnstuk gelijk ligt aan een van de drie assen van de grid. Aan elk uiteinde wordt de naam van de dimensie die aan die as verbonden is weergeven. In het geval er geen dimensie is die aan de as kan worden verbonden, dan wordt enkel het lijnstuk getekend. Omdat het van belang is dat de ori¨entatie van de grid duidelijk wordt weergeven, wordt de naam van een dimensie gekleurd aan de hand van de huidige ori¨entatie. Teksten die verder in de achtergrond liggen worden donkerder getekend dan teksten op de voorgrond. Om aan te geven welke as momenteel actief is (d.w.z. op welke as de bewerkingen uitgevoerd worden) wordt het corresponderende lijnstuk en de tekst in een lichtere kleur getekend dan die van de overige assen.
4.2.3
GUI
De klasse GUI is verantwoordelijk voor het daadwerkelijk tekenen van de grafische interface. De interface (controller) verzorgt de elementen van de GUI en handelt de gebeurtenissen van de GUI af, waardoor deze klasse voornamelijk dient als een laag tussen het daadwerkelijke 21
grafische gedeelte en het logische plaatsen en beheren van de elementen uit de GUI.
4.3
Database
Het databasegedeelte omvat het eerder in paragraaf 3.1.1 beschreven model-component uit het Model-View-Controller paradigma. Omdat het voor het uiteindelijke doel van de software niet nuttig is om waarden aan te passen, is de keuze gemaakt om dit model niet schrijfbaar te maken. In geen enkel geval verandert de database nadat deze is ingelezen, wat de ontwikkeling ten goede komt; zo hoeft er geen aandacht aan extra foutcontrole van ingevoerde data besteed te worden. Er wordt dan ook van een correct geformuleerde en foutloze database uitgegaan die compleet is. Met dit laatste wordt bedoeld dat er voor elk elemententupel uit elke dimensie een waarde bestaat. De opbouw van de database is te zien in in Figuur 4.5. Omdat het programma bij het starten geen verdere kennis heeft van de database die gebruikt zal worden, is het nodig het programma op weg te helpen met een bootstraptabel. In deze tabel staat alle informatie geformuleerd die nodig is om de rest van de database te kunnen gebruiken, namelijk: • Het aantal dimensies. • De naam van alle dimensies met bijbehorende detailniveaus. • De naam van de facttabel en van de factkolom in die tabel. Elke dimensie is in de database ondergebracht in een eigen tabel en heeft als kolommen de detailniveaus die beschreven staan in de bootstraptabel. Door de implementatie van de bootstraptabel kan het aantal detailniveaus per dimensie niet groter zijn dan het totale aantal dimensies omdat er niet genoeg kolommen zijn in de bootstraptabel voor de overige detailniveaus. Elke dimensie heeft naast detailniveaus een unieke identifier met de naam
Id als primary key. Deze primary key is in de facttabel een foreign key. De facttabel moet compleet zijn en heeft zo voor elk tupel van dimensies (als foreign keys) een waarde in de factkolom. Bij het gebruik van een detailniveau voor een dimensie, wordt de facttabel met alle dimensietabellen samengevoegd door een NATURAL JOIN, wat door de garantie van de primary en foreign keys automatisch verzorgd wordt. Op deze gecombineerde tabel kan vervolgens geselecteerd worden op detailniveaus in plaats van alleen op unieke identifiers. Voor meer informatie met betrekking tot het correct aanmaken van nieuwe databases en de precieze opbouw van de database, wordt verwezen naar Appendix B.5.2. Bij het starten van het programma vraagt de controller eerst informatie over de database op, zoals welke dimensies er zijn en welke detail levels iedere dimensie heeft. Na het initialiseren voert het databasegedeelte enkel queries uit op de database wanneer de controller de huidige state van het model opvraagt. De controller stuurt het volgende mee: 1. De dimensies. 22
Figuur 4.5: Structuur van de Sales voorbeelddatabase
2. De methode waarop de dimensies worden geaggregeerd. 3. Het detailniveau per dimensie. 4. De elementen waarop per dimensie gesliced is. Het model gebruikt deze informatie om de juiste SQL query via een iteratief proces te genereren. Om te beginnen wordt de facttabel met alle andere dimensies met behulp van natural join samengevoegd. SQLite heeft weliswaar geen ondersteuning voor foreign key constraints, maar door te eisen dat geen twee kolommen in de dimensie tabellen dezelfde naam hebben, kan gezorgd worden dat de kolommen uit de facttabel elk horen bij een dimensie. Een natural join van de facttabel met alle dimensietabellen zorgt er dan ook voor dat er een grote tabel gecre¨eerd wordt met alle informatie die mogelijk nodig is voor verdere bewerkingen. Om ervoor te zorgen dat in het begin alle informatie beschikbaar blijft en niet samengevoegd wordt, wordt er gegroepeerd op alle detailniveaus met behulp van de GROUP BY instructie. Echter, als er bij een dimensie een detailniveau is gekozen, dan zullen alle waarden die moeten worden samengevoegd met de base operatie worden samengevoegd. Deze baseoperatie is instelbaar, maar niet per dimensie. Om deze query wordt voor elke dimensie een nieuwe SQL query geformuleerd. Dit resulteert in een geneste query die even diep nest als er dimensies zijn. Bij elk niveau wordt er gekeken 23
of de dimensie geaggregeerd moet worden. Indien dit niet het geval is, blijft deze bestaan in de GROUP BY en zal deze in alle hoger geneste queries ook in de GROUP BY staan, zodat deze dimensie - eventueel samengevoegd op basis van het gegeven detailniveau - volledig wordt teruggegeven aan de controller. In het geval de dimensie wel geaggregeerd moet worden, wordt in de SELECT de juiste aggregatie toegepast met behulp van SUM, AVG, MIN of MAX. Ook wordt de dimensie op dit niveau uit de GROUP BY gegooid zodat alle waarden van die dimensie worden geaggregeerd. Ook in hoger geneste SQL queries wordt deze dimensie uit de GROUP BY gehaald om eventuele foutmeldingen te vermijden. Een voorbeeld van een geneste SQL query, waarbij de dimensie Period wordt geaggregeerd door het gemiddelde ervan te nemen, ziet er als volgt uit: 1 SELECT Uni , Stud , Period , AVG( T o t a l 3 ) AS T o t a l 4 2 FROM ( 3 SELECT Uni , Stud , Period , ( T o t a l 2 ) AS T o t a l 3 4 FROM ( 5 SELECT Uni , Stud , Period , ( T o t a l 1 ) AS T o t a l 2 6 FROM ( 7 SELECT Uni , Stud , Period , SUM( Grades ) AS T o t a l 1 FROM 8 F a c t t a b l e NATURAL JOIN ( 9 U n i v e r s i t y NATURAL JOIN Student NATURAL JOIN P e r i o d 10 ) 11 GROUP BY Uni , Stud , P e r i o d 12 ) 13 GROUP BY Uni , Stud , P e r i o d 14 ) 15 GROUP BY Uni , Stud , P e r i o d 16 ) 17 GROUP BY Uni , Stud ; Het is hierbij belangrijk om te vermelden dat als er op een dimensie niet geaggregeerd hoeft te worden, er in feite niets gebeurt en er dus een nutteloze SQL query geformuleerd wordt die een identiek resultaat oplevert. Na het uitvoeren van de SQL query geeft het model het volgende terug aan de controller: 1. 2. 3. 4.
4.4
De naam van het detailniveau, per dimensie. De labels van de zichtbare elementen, per dimensie. Een array met alle waarden die overgebleven zijn. De grootte van elke dimensie zodat elementen op de juiste manier uit de hierboven genoemde array gehaald kunnen worden.
Configuratie
Om de verscheidene instellingen van de applicatie in te kunnen lezen en weg te schrijven is er een configuratiemodule aanwezig die uit een aantal klassen bestaat. 24
De hoofdklasse ConfigHandler omschrijft de standaardfuncties voor het benaderen en bewerken van configuratieinstellingen. Daarnaast verzorgt de klasse XmlHandler de daadwerkelijke implementatie door alle instellingen in te lezen en weg te schrijven als een bestand in XML-formaat. Door gebruik te maken van het XML-formaat kunnen instellingen eenvoudig gestructureerd worden opgeslagen en kunnen diverse datatypen worden gerepresenteerd. Verder is het formaat makkelijk bewerkbaar zodat door de gebruiker ook buiten de software om de configuratie eenvoudig kan worden veranderd.
25
Hoofdstuk 5
Testen 5.1
Acceptatietest
Een acceptatietest geeft de opdrachtgever de mogelijkheid om de software in verschillende scenario’s te testen. Zodoende kan de opdrachtgever eventueel probleem- en verbeterpunten van de software aangeven. Om in de laatste weken van het project zeker te zijn dat de idee¨en van de opdrachtgever en die van de ontwerpprojectgroep overeenkomen, is deze acceptatietest uitgevoerd op 9 juni 2009.
5.1.1
Visualisatie
Tot de visualisatie worden het kleurschema, de leesbaarheid van de labels, het ontwerp van de interface en animaties van de software gerekend. De juistheid hiervan wordt vooral tijdens de werking met de software ervaren. De mogelijkheid om aggregatiecellen weer te geven was ten tijde van de test niet beschikbaar maar werd ten tijde van de test alsnog toegevoegd. De opdrachtgever is van mening dat de visualisatie duidelijk genoeg is en enkele details, zoals de rotatie van tekst voor betere leesbaarheid, een goede aanvulling bieden voor de gebruiker.
5.1.2
Besturing
Bij de besturing wordt gekeken of de interface duidelijk en logisch reageert op input van de gebruiker en of deze in het algemeen als makkelijk ervaren wordt. Na een korte introductie van de interface is de opdrachtgever van mening dat de software op een logische manier te gebruiken is. De verschillende onderdelen in de interface volgen uit een duidelijke indeling. Tevens biedt de orientatietool volgens de opdrachtgever een goede ondersteuning bij de visualisatie en manipulatie van de database.
26
5.1.3
Standaard OLAP-operaties
Het verifi¨eren van de correctheid van alle OLAP-operaties die zich in de software bevinden is uiteraard van belang. Ten tijde van de acceptatietest was de operatie dice echter nog niet beschikbaar; aan de opdrachtgever is wel beschreven hoe deze zou gaan werken. Tijdens de acceptatietest was de software in staat om in willekeurige volgorde de operaties slice en rollup uit te voeren. Daarnaast werd de mogelijkheid geboden om deze operaties ongedaan te maken. De opdrachtgever leent dan ook aan deze twee geimplementeerde operaties zijn goedkeuring.
5.1.4
Diverse databases
De software zal in staat moeten zijn om een aantal diverse databases in te laden zonder vast te lopen of data foutief weer te geven. Het inladen van diverse databases zal daarom ook getest worden. Het laden van een andere database werkt in de acceptatietest volgens verwachting; de gewenste database is dan ook in het configuratiebestand te specificeren die na een herstart van de software automatisch ingeladen wordt. De opdrachtgever voorziet met het opnieuw starten van de software dan ook geen problemen.
5.2
Scenario-testen
De hieronder uitgevoerde scenariotests zijn gebaseerd op de scenario’s die beschreven staan in hoofdstuk 2.3.
5.2.1
Scenario 1 - Jaar met hoogste cijfers
De gebruiker is een docent die wil zien in welk jaar de hoogste cijfers voor zijn vak gehaald zijn. 1. Start de software met run.bat of run.sh. 2. Rechtsklik in de dimensielijst linksboven op het detaillevel van Course en selecteer Teacher. 3. Rechtsklik in de dimensielijst linksboven op het detaillevel van Time en selecteer Year. 4. Rechtsklik in de dimensielijst linksboven op de aggregaat van Course en Time en zet deze op None, zodat ze niet geaggregeerd worden. 5. Rechtsklik in de dimensielijst linksboven op de aggregaat van Student en University en zet deze op Avg zodat hiervan het gemiddelde genomen worden. 6. Draai eventueel de grid door met de linkermuisknop ingedrukt te slepen over de grid opdat alle waardes goed leesbaar zijn.
27
7. Zet linksonderin de Edit Mode op Slice. Druk op het scrollwheel tot rechtsonderin de Time dimensie geselecteerd is. Rechtsklik op de Time kolom die hoort bij de docent waarvan hij de hoogste cijfers wil zien. 8. Vergelijk de twee waarden en kijk in welk jaar het hoogste cijfer behaald is.
5.2.2
Scenario 2 - Plaats met hoogste cijfers
De gebruiker is een student die wil zien welke plaats met Universiteit(en) jaarlijks het best presteert gekeken naar gemiddeld cijfer. 1. Start de software met run.bat of run.sh. 2. Rechtsklik in de dimensielijst linksboven op het detaillevel van University en selecteer City. 3. Rechtsklik in de dimensielijst linksboven op het detaillevel van Time en selecteer Year. 4. Rechtsklik in de dimensielijst linksboven op de aggregaat van Course en Student en zet deze op Avg zodat hiervan het gemiddelde genomen worden. 5. Draai eventueel de grid door met de linkermuisknop ingedrukt te slepen over de grid opdat alle waardes goed leesbaar zijn. 6. Lees uit hoe elke universiteit ieder jaar gepresteerd heeft. 7. Aggregeer eventueel Time met Average of Max door in de dimensielijst rechts te klikken op de aggregaat van Time en deze op respectievelijk Avg of Max te zetten. Dit om te kijken naar respectievelijk het gemiddelde of het maximum over alle jaren.
5.2.3
Scenario 3 - Moeilijkste vak voor Student
De gebruiker is een studiebegeleider die wil weten met welk vak een student op een zekere universiteit het meeste moeite heeft. 1. Start de software met run.bat of run.sh. 2. Rechtsklik in de dimensielijst linksboven op het detaillevel van Student en selecteer StudentName. 3. Rechtsklik in de dimensielijst linksboven op het detaillevel van Course en selecteer CourseName. 4. Rechtsklik in de dimensielijst linksboven op het detaillevel van University en selecteer UniversityName. 5. Zet linksonderin de Edit Mode op Slice. Druk op het scrollwheel tot rechtsonderin de UniversityName dimensie geselecteerd is. Rechtsklik op de UniversityName kolom die hoort bij de universiteit waarvan de begeleider de cijfers van wil vergelijken. 6. Druk op het scrollwheel tot rechtsonderin de StudentName dimensie geselecteerd is. Rechtsklik op de StudentName kolom die hoort bij de student waarvan de begeleider de cijfers van wil vergelijken. 7. Aggregeer Time met Average door in de dimensielijst rechts te klikken op de aggregaat van Time en Avg te selecteren. 8. Lees uit met welk vak de student het meeste moeite had door te kijken naar het laagst behaalde cijfer. 28
5.2.4
Scenario 4 - Kijkcijfers
Bij dit scenario wordt gebruik gemaakt van de Ratings voorbeelddatabase, welke weergeeft wat de kijkcijfers waren voor televisieshows per demografische groep. De gebruiker is een reclamebureau, die wil weten bij welke show hij in Nederland reclametijd moeten inkopen om jongeren zo goed mogelijk te bereiken. 1. Open config.xml met een texteditor, wijzig de default database naar database ratings.sql en sla het bestand weer op. 2. Start de software met run.bat of run.sh. 3. Rechtsklik in de dimensielijst linksboven op het detaillevel van Country en selecteer CountryName. 4. Zet de Edit Mode linksonderin op Slice en klik op het scrollwheel net zo lang tot rechtsonder Country als geselecteerde as zichtbaar is. Rechtsklik vervolgens op de Nederland kolom. 5. Rechtsklik in de dimensielijst linksboven op het detaillevel van Show en selecteer ShowName. 6. Rechtsklik in de dimensielijst linksboven op het detaillevel van Demograph en selecteer Aggregate. 7. Klik op het scrollwheel totdat rechtsonder als geselecteerde as zichtbaar is. Slice nu 18-49 door rechts op de rij of kolom te klikken. 8. Rechtsklik in de dimensielijst op de Aggregaat van Gender en zet deze op Avg. 9. Kijk nu in de overgebleven rij naar het hoogste kijkcijfer. Bij al de beschreven scenario’s zorgen deze stappen voor de juiste eindresultaten. De software werkt daarom naar behoren.
5.3
Compatibiliteit
In de requirements uit paragrafen 2.2.3 en 2.2.2 is duidelijk geworden dat er bepaalde eisen gesteld worden aan de hardware en het besturingssysteem waarop de software gedraaid zal worden. Om deze requirements te handhaven zal de compatibiliteit met zowel een aantal grafische kaarten als de eerder genoemde besturingsystemen Microsoft WindowsTM en Linux getest moeten worden. Tijdens het ontwerp en implementatie van de software blijkt echter dat de gestelde requirement voor de grafische kaart niet geheel realistisch is: alhoewel deze beschikbaar is in alle practicumsystemen, is deze niet terug te vinden in de laptop van de opdrachtgever en is de samenstelling van systemen in collegezalen te vari¨erend. Zo blijken collegezalen HO-T4 en SP5 niet over de juiste grafische kaart te beschikken. Als oplossing voor deze oudere systemen is gekozen voor een zogenaamde fallbackmodus, die de grafische weergave, alhoewel op lagere snelheid en met mindere kwaliteit, alsnog kan weergeven. Omdat bepaalde features zoals de omranding van cellen in deze modus niet kunnen worden weergegeven neemt de duidelijkheid van de grid enigszins af en wordt daarom aangeraden om, waar beschikbaar, alsnog een moderner systeem te gebruiken. 29
Aan de compatibiliteitseis voor de eerder genoemde besturingssystemen wordt ook voldaan; alle scenario’s zijn zowel op Microsoft WindowsTM als op Linux getest en bieden in ieder geval identieke resultaten.
30
Hoofdstuk 6
Evaluatie 6.1
Begeleiding
De begeleiding werd vanaf de aanvang van het project gezien als een plek voor vragen. Door de gebrekkige informatie over het vak was het ons niet duidelijk geworden dat de begeleiding als opdrachtgever gezien en behandeld moest worden. Dit werd ons duidelijk na het gesprek met meneer Van Keulen naar aanleiding van zijn mailtje over de voortzetting van het project. In deze mail vertelde hij dat er van buitenaf weinig vooruitgang zichtbaar was en vroeg hij of wij, als team, nog nut zagen in verdere voortzetting van het project. Dit nut zagen wij zeker en hierna hebben we getracht meer te communiceren met de opdrachtgever en hem meer van onze voortgang te laten zien, wat resulteerde in een acceptatie test. Deze test was uiteindelijk voor beide partijen nuttig, omdat we zo de nodige feedback kregen en de opdrachtgever kon zien dat we ons in een ver gevorderd stadium van de implementatie van het prototype bevonden. In de toekomst zullen we bij de start van een project de rol van de begeleiders duidelijk krijgen en de begeleiders zien als de rol die ze aannemen. Ook zullen er aan de start van een project tussen de begeleieders en de projectgroep duidelijke afspraken gemaakt worden over de planning, voortgangsrapporten en de bijbehorende feedbackmomenten. Hierdoor zullen de begeleiders weten wat ze kunnen verwachten en de zal de projectgroep weten naar welke deadlines ze toe moeten werken.
6.2
Planning
De planning van onze groep liet zeker in het begin te wensen over. Het team had bekeken wat de opdracht was, had in korte tijd een proof of concept gemaakt en zag geen struikelpunten waar later veel tijd in zou kunnen gaan zitten. We stelden in het begin geen deadlines voor onszelf en werkten vooral voor onszelf. En dan met name om wat ervaring op te doen met de talen en libraries die we gingen gebruiken, niet om daadwerkelijk aan het project te werken.
31
De eerste deadline die we stelden was de acceptatietest. Dit konden we destijds ook al aan, maar om als eerste milestone een vrijwel af product te verlangen, is niet handig. Hierna zijn we meer gaan plannen en zijn we wekelijks bij elkaar gekomen om gezamenlijk te werken. In de toekomst zullen we meer gebruik maken van tussentijdse milestones en duidelijk afspraken maken over de voortgang. Ook zullen we vanaf het begin af aan regulier bij elkaar komen om aan het project te werken, aangezien dit een gestage voortgang van het project zal inhouden.
6.3
Samenwerking
Onze groep was al samengesteld voor we aan het ontwerpproject begonnen en bestaat uit vrienden; we konden en kunnen nog steeds prima met elkaar opschieten. Mocht een van ons een implementatieprobleem tegenkomen, dan was het door de duidelijke taakverdeling makkelijk om te weten bij wie je moest zijn om samen een oplossing te verzinnen. In de toekomst zullen we door middel van teambuilding en gewone, vriendschappelijke omgang met elkaar in het dagelijks leven deze goede samenwerking waarschijnlijk kunnen behouden.
6.4
Communicatie
Door de gebrekkige planning was de communicatie in eerste instantie beperkt tot een minimum; we werkten vooral voor onszelf. We hadden in de eerste twee weken door kort overleg allemaal een beeld in ons hoofd gekregen hoe het eindresultaat moest worden en dat volstond in onze ogen. Deze beelden bleken later niet altijd overeen te komen of bleken niet ver genoeg doordacht te zijn, wat leidde tot dubbel werk bij de implementatie doordat hele stukken code opnieuw geschreven moesten worden om alle code uiteindelijk met elkaar te kunnen laten samenwerken. Het overleg buiten de bijeenkomsten om is vooral via Instant Messaging verlopen wat meestal tot snelle probleemoplossing leidde. In de toekomst is het wenselijk om vaker direct contact met elkaar te hebben en meer te overleggen. Meer praten over de idee¨en die we in ons hoofd hebben zal leiden tot snellere ontdekking van botsingen van die idee¨en waardoor problemen uit de weg geruimd kunnen worden voordat ze tot veel extra werk leiden.
6.5
Eindresultaat
Nadat we halverwege het project door de opdrachtgever wakker geschud zijn, zijn we harder gaan werken en hebben we ervoor gezorgd dat we iets konden laten zien tijdens de acceptatietest. Dit heeft er in onze ogen toe geleid dat het eindresultaat goed aan de opdrachtomschrijving voldoet en alle eisen vervult. Uiteraard zullen er punten van verbetering blijven, maar het resultaat is zeker iets waar wij trots op zijn.
32
6.6
Conclusie
Het gebrek aan planning zorgde in eerste instantie voor een verkeerde indruk bij de opdrachtgever. Na de aankaarting van dit probleem door de opdrachtgever hebben wij het project echter met beide handen aangegrepen en is het voltooien van het project uiteindelijk naast de opdracht ook iets leuks geworden. Wij hebben er allen naar gestreefd om het programma zo compleet mogelijk af te kunnen leveren en hebben zelfs als extra inspanning niet-geplande functionaliteiten mee kunnen leveren. Een voorbeeld van deze extra functionaliteit is het laden en opslaan van de staat van de grid, een suggestie die tijdens de presentatie aan de vakgroep door een toeschouwer werd opgemerkt. Een les die hieruit te leren valt is dat het altijd loont om vroeg aan een planning te beginnen om duidelijkheid te scheppen. Het stellen van deadlines voor milestones is hier bijvoorbeeld een onderdeel van. Ook is het verstandig om op reguliere basis bij elkaar te komen voor overleg van bestaande en ontstane problemen. Naast deze projectgerelateerde zaken zijn wij ook voornemens om in een vervolg meer teambuilding uit te voeren: hiermee kunnen eventuele meningsverschillen vroegtijdig en op vriendschappelijke basis uit de weg worden geruimd. Het regulier bij elkaar komen om aan het project te werken is hier uiteraard onderdeel van; het niet-projectgerelateerd bij elkaar komen zal echter de teambanden verder versterken. In conclusie is gebleken dat het project een zeer nuttige leerervaring is die leert over hoe men dient om te gaan met opdrachten en het ontwikkelingsproces, al met al een zeer goede ervaring. Het resultaat zal voor ons dan ook zeker iets blijven om trots op te zijn.
33
Verklarende Woordenlijst aggregates
Dit zijn de totalen rondom de grid, ook bestaande uit boxes., 16, 43
box
Een enkele kubus in de grid. Het bevat een enkele waarden uit de database of meerdere waardes uit de database samengevoegd door middel van ´e´en of meerdere rollups., 17, 34, 43, 44
detail
Een detail is een type groepering van een dimensie., 8, 9, 14, 16, 17, 19, 22–24, 26–29, 43, 44, 47 Deze operatie selecteert op alle huidige getoonde Dimensions het item behorende bij de ´e´en cel. Vervolgens wordt op tot aan drie dimensies een Drilldown operation uitgevoerd. Omdat deze operatie slechts bestaat uit andere operaties, bestaat de animatie ook uit deze animaties. Deze worden samengevoegd tot ´e´en animatie., 1, 17–19, 26, 44 Een dimensie in de database., 4–8, 14–19, 22– 24, 27–29, 43–47 Lijst van dimensies, linksboven te zien in de GUI, waarbij de volgorde uitmaakt., 44, 45 Deze operatie zorgt ervoor dat de Dimension op de huidige Active Axis, waarvan op het moment enkel een totaalresultaat gebruikt wordt, volledig zal worden weergeven met het geselecteerde Detail. Om dit uit te beelden, wordt de Grid uiteengetrokken op deze as, zodanig dat het lijkt alsof de cellen uit het totaalresultaat komen. Dit toont aan dat de oude Grid het totaal was van het resultaat., 18, 45
dice
dimensie dimensielijst drilldown
34
Edit Mode
De Edit Mode bepaalt het gedrag van de rechter muisknop., 17, 18, 27–29, 42, 44, 45
geselecteerde as
De huidig geselecteerde as, te zien rechtsonder in beeld. De opgelichte as is de geselecteerde as., 14, 17, 18, 29, 41, 42, 44, 45 De database matrix in het midden van het scherm., 3, 8, 13–19, 27–29, 32, 34, 42–45
grid
multidimensionale database
Een database geoptimaliseerd data warehouse en OLAP applicaties., 1, 3, 5, 10
OLAP
Databasetechnologie met de mogelijkheid om op een snelle en efficiente manier multidimensionale databases te analyseren., 1, 3, 5, 6, 10, 11, 18, 26
rollup
Deze operatie zorgt ervoor dat van de Dimension op de huidige Active Axis alleen een totaalresultaat gebruikt wordt, te weten een optelling, gemiddelde, hoogste of laatste. Om dit uit te beelden, wordt de Grid als het ware samengeperst op deze as. Dit toont aan dat het resultaat een totaal is van alle cellen., 1, 17, 18, 27, 34, 43–45
slice
Deze operatie selecteert in de huidige Grid enkele slices op de huidige Active Axis. De overige slices zullen niet meer in de Grid getoond worden. Om dit uit te beelden, worden de slices die niet geselecteerd zijn naar de kant bewogen en verdwijnen langzaam. De geselecteerde slices worden naar het midden bewogen., 1, 4, 17–19, 23, 27, 34, 44
undice
Deze operatie doet het tegenovergestelde van de Dice operation. De Dice operation bestaat slechts uit andere operaties en dus ook deze operatie., 17, 45 Deze operatie maakt alle selecties (met behulp van slices) op de huidige Active Axis ongedaan. Dit betekent dat er mogelijk slices bijkomen. Om dit uit te beelden, komen deze nieuwe slices langzaam binnen van de zijkanten. Ook worden alle huidige slices verplaatst naar hun toekomstige positie., 17, 44
unslice
35
Bibliografie [Deu86] Deutsches Institut f¨ ur Normung: DIN 1451-2 Schriften - Serifenlose LinearAntiqua - Verkehrsschrift. [Dix08]
Dix M.: Wat is OLAP? - De voordelen en beperkingen voor het budgetteringsproces. Kennisportal (2008).
[GFG04] Gerasimov P., Fernando R., Green S.: Textures.
Shader Model 3.0 - Using Vertex
[MAM06] Michael K., Arthur B., M. L. P.: Database Systems - An Application-Oriented Approach, second edition ed. Pearson: Addison Wesley, 2006. Architecture and benefits of PowerOLAPTM .
[PAR]
PARIS Technologies Inc.: http://www.paristech.com/.
[Ree03]
Reenskaug T.: The Model-View-Controller (MVC) - Its Past and Present.
[SDL]
Simple Directmedia Layer. http://www.libsdl.org/.
36
Bijlage A
Diagrammen
Figuur A.1: Top level diagram
37
Figuur A.2: Grafisch ontwerp
38
Figuur A.3: Configuratie ontwerp
39
Figuur A.4: Database ontwerp
40
Bijlage B
Handleiding B.1
Compileren van de software
Microsoft WindowsTM Het is niet nodig om de software te compileren. De geleverde bestanden kunnen doorgaans op elk systeem draaien.
Linux De software dient eerst gecompileerd worden met behulp van de meegeleverde makefile, te vinden in de map make.linux. Het is wel noodzakelijk dat SDL is voorge¨ınstalleerd op het systeem. Refereer voor uitgebreidere instructies naar de documentatie van de gebruikte Linux-distributie en [SDL]. Het is mogelijk dat de library is ge¨ınstalleerd in een ander pad dan gebruikelijk; dit dient dan aangepast te worden in de makefile (te vinden onder de noemer INCSDL).
B.2
Starten van de software
De gecompileerde software en alle benodigdheden om deze te kunnen draaien is te vinden in de map bin. Microsoft WindowsTM
Linux
De software is te starten door run.bat uit te voeren.
De software is te starten door run.sh uit te voeren.
41
B.3
Input
Linker muisklik Rechter muisklik Scrollwielknop Scrollwieldraai
Hiermee kan de GRID worden gedraaid. Hiermee wordt de geselecteerde actie in het menu uitgevoerd. Er is verschil tussen op de GRID klikken en er naast. Hiermee wordt de geselecteerde as veranderd. Hiermee kan worden in- en uitgezoomd.
Naast input van de muis is er een aantal toetsen met functionaliteit. Deze zijn hieronder omschreven. Escape
Sluit de software af. Escape is een zeer gebruikelijke methode om een programma af te sluiten en kan daarom bij Molapse niet ontbreken.
+
Zoom in. Dit is zowel de + meestal aan de bovenkant van het toetsenbord als de + rechts op het toetsenbord, op het keypad gedeelte.
-
Zoom uit. Dit is zowel de - meestal aan de bovenkant van het toetsenbord als de - rechts op het toetsenbord, op het keypad gedeelte.
S
Maak screenshot. Een screenshot kan handig zijn voor meerdere doeleinden. In een verslag kan het de tekst duidelijker maken bijvoorbeeld.
D
Schakel discomode aan/uit. Deze modus laat zien dat de grid veel snelle kleurveranderingen aankan en toont mogelijkheden voor toekomstige functionaliteit door de kleur van een cel af te laten hangen van de waarde in die cel.
I
Schakel isometrische mode aan/uit. In deze modus wordt de diepte niet meegerekend bij het tekenen van de grid. De afstand maakt niet uit voor de grootte van het object. Deze modus is enkel toegevoegd als experiment om te kijken of dit de leesbaarheid van de informatie vergroot. Het verschilt per situatie of dit zo is, want enkel de buitenste cellen van de grid zijn beter zichtbaar.
A
Schakel automatisch ronddraaien aan/uit. Dit is voor een demomode, waarbij de grid ronddraait, zoals in een showroom.
F11
Sla huidige staat van de grid op. De eerder opgeslagen staat wordt verwijderd.
F12
Laad de laatst opgeslagen staat van de grid. Indien er geen opgeslagen staat is of indien deze niet compatible is met de huidige grid, wordt er niets veranderd.
B.4
Betekenissen en werking Geselecteerde as De huidig geselecteerde as, te zien rechtsonder in beeld. De opgelichte as is de geselecteerde as. De geselecteerde as kan veranderd worden door op het scrollwiel van de muis
42
te drukken. De geselecteerde as bepaalt op welke as de verschillende operaties worden uitgevoerd. Zie Edit Mode. Grid De databasematrix in het midden van het scherm, bestaande uit een aantal boxes (cellen). Een box bevat een element uit de database of een reeks elementen uit de database, samengevoegd met ´e´en of meerdere rollups. Box Een enkele kubus in de grid. Het bevat een enkele waarden uit de database of meerdere waarden uit de database samengevoegd door middel van ´e´en of meerdere rollups. Dimensie Dit is een dimensie in de database. Een voorbeeld is de dimensie tijd, die meerdere details kan hebben: bijvoorbeeld week, maand of jaar. Detail Een detail is een type groepering van een dimensie. Voorbeelden van detail zijn week, maand en jaar, die eenheden zijn van de dimensie (of grootheid) tijd. Dimensielijst Dit is de lijst van dimensies, linksboven te zien in de GUI. De volgorde van de lijst is de volgorde waarin de operaties worden uitgevoerd, van onder naar boven. De volgorde is belangrijk voor sommige rollups, zoals SQL MAX en SQL MIN. Dit komt doordat bij deze operatie maar ´e´en element uiteindelijk invloed heeft op het resultaat, in tegenstelling tot andere, die alle elementen gebruiken. Een voorbeeld: as Y
X 0 2
3 1
Wanneer eerst de X-as wordt ’opgerold’ met de operatie SQL MAX en daarna Y met SQL SUM, dan is het resultaat 5. Wanneer dit andersom gedaan wordt, eerst Y met SQL SUM en X met SQL MAX, dan is het resultaat 4. Aggregaten Dit zijn de totalen rondom de grid, ook bestaande uit boxes. Het weergeven van de aggregates hangt af van de rollup die is toegewezen. Het instellen van de operatie kan linksonder in beeld, waarbij mogelijkheden zijn: NONE SUM AVG MIN MAX
De aggregates zullen niet worden weergegeven. Het resultaat zal de som van de rij zijn. Het resultaat zal het gemiddelde van de rij zijn. Het resultaat zal het minimum van de rij zijn. Het resultaat zal het maximum van de rij zijn.
Rollup operaties Operaties die kunnen worden toegepast op meerdere waarden, ten einde ´e´en resultaat te verkrijgen:
43
SELECT NONE AVG SUM AVG MIN MAX
Het Het Het Het Het Het Het
resultaat zal ´e´en van de waarden zijn. resultaat zal een lijst van dezelfde waarden zijn. middelen van de waarden. resultaat zal de som van de waarden zijn. resultaat zal het gemiddelde van de waarden zijn. resultaat zal het minimum van de waarden zijn. resultaat zal het maximum van de waarden zijn.
Edit mode De Edit Mode bepaalt het gedrag van de rechter muisknop en de manier waarop de grid wordt getekend. Bij een rechter muisklik op de grid zijn de gevolgen verschillend per modus: SLICE Bij een rechter muisklik zal een slice worden uitgevoerd op de geselecteerde as. DICE Bij een rechter muisklik zal een dice worden uitgevoerd op de geselecteerde as. ROLLUP Bij een rechter muisklik zal een rollup worden uitgevoerd op de geselecteerde as. Het tekenen van de grid bij verschillende modi: SLICE
DICE ROLLUP
De grid wordt in de normale kleur weergegeven. De slice op de geselecteerde as waarboven de muiscursor zich bevindt zal een andere kleur hebben, evenals de geselecteerde slices op de geselecteerde as. Zie slice voor het selecteren van slices. De grid wordt in de normale kleur weergegeven. De box waarboven de muiscursor zich bevindt zal een andere kleur hebben. De grid wordt in de normale kleur weergegeven.
Slice operatie De werking van een slice hangt af van de geselecteerde as. Het uitvoeren van een slice gaat als volgt: 1. 2. 3. 4.
Selecteer de slice modus (zie Edit Mode). Klik en houd rechter muisknop vast boven ´e´en van de slices die gewenst zijn. Sleep de muiscursor zodanig dat hij zich boven een andere slice bevindt. Laat de rechter muisknop los.
Hierdoor worden de slices die zijn aangewezen en alle daartussen opgelicht uit de grid. Overige slices zullen worden weggehaald. Unslice operatie De werking van een unslice hangt af van de geselecteerde as. Om een dimensie vrij te maken van slices, is het mogelijk een unslice uit te voeren en dit gaat als volgt: 1. Selecteer de slice modus (zie Edit Mode). 2. Klik met de rechter muisknop naast de grid, dus op de (zwarte) achtergrond. Dit zal alle slices op de huidig geselecteerde as verwijderen en zodoende de gehele dimensie met de huidige detail tonen. Dice operatie Het uitvoeren van een dice gaat als volgt:
44
1. Selecteer de dice modus (zie Edit Mode). 2. Klik met de rechter muisknop op een box. De dimensies op de huidige assen (posities 1, 2 en 3) zullen de rollup SQL SELECT krijgen, met als geselecteerde waarde die van de geselecteerde box. Vervolgens zullen tot drie dimensies toe de rollup SQL NONE krijgen en verplaatst worden naar de eerste positie in de dimensielijst. De drie dimensies die hiervoor in aanmerking komen zullen worden gezocht op volgorde van hun posities, van boven naar onder, vanaf de vierde positie. dimensies die al SQL SELECT hebben worden overgeslagen. Undice operatie Het uitvoeren van een undice gaat als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechter muisknop naast de grid, dus op de (zwarte) achtergrond. De eerste dimensies, van boven naar onder, die SQL SELECT als rollup hebben, worden verplaatst naar de eerste drie posities in de dimensielijst en krijgen de rollup SQL NONE. dimensies die hiertoe zijn verplaatst zullen zo nodig SQL SUM krijgen. Als er geen dimensies met SQL SELECT zijn, gebeurt er niets. Rollup operatie De werking van een rollup hangt af van de geselecteerde as. Het uitvoeren van een rollup gaat als volgt: 1. Selecteer de glsop:rollup modus (zie Edit Mode). 2. Klik met de rechter muisknop op de grid. De dimensie op de geselecteerde as zal de rollup SQL SUM krijgen. Deze operatie is te wijzigen in de dimensielijst. Drilldown operatie De werking van een drilldown hangt af van de geselecteerde as. Het uitvoeren van een drilldown gaat als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechter muisknop op de grid. De dimensie op de geselecteerde as zal de rollup SQL NONE krijgen. Een andere uitvoering is als volgt: 1. Selecteer de rollup modus (zie Edit Mode). 2. Klik met de rechter muisknop naast grid, dus op de (zwarte) achtergrond. Er komt een menu te voorschijn met de namen van dimensies waarop een drilldown kan worden uitgevoerd. 3. Selecteer ´e´en van die dimensies. De gekozen dimensie zal worden verplaatst naar de geselecteerde as en zal als rollup SQL NONE krijgen.
45
B.5
Databases
B.5.1
Veranderen van database
De software is dermate dynamisch opgebouwd dat het overweg kan met een oneindig aantal verschillende databases, zolang deze voldoen aan de eisen die gesteld zijn in hoofdstuk B.5.2. Wanneer aan deze eisen wordt voldaan kan een enkele database op een van de volgende drie manieren worden ingeladen: 1. Aangeraden: open het bestand bin\config.xml met een tekstverwerker en wijzig de waarde van default database naar de gewenste bestandsnaam. 2. Roep vanuit de prompt of terminal respectievelijk run.bat of run.sh aan met als parameter de naam van de gewenste database. Bijvoorbeeld: run.bat database sales.sql 3. Open het bestand bin\molapse.prg met een tekstverwerker en wijzig de waarde van DEFAULT DATABASE naar de gewenste bestandsnaam.
B.5.2
Nieuwe database aanmaken
Omdat de software geen voorkennis heeft over de kolommen van de database, is het nodig om een zogenaamde bootstraptabel te gebruiken. Hier staan een aantal waarden met vastgestelde kolomnamen in die de software zal gebruiken om de rest van de database op de juiste manier uit te lezen. Hoe de database is opgebouwd is te lezen in hoofdstuk 4.3. Bootstraptabel De opbouw van een bootstraptabel is bijvoorbeeld als volgt: 1 2 3 4 5 6 7 8 9
CREATE TABLE B o o t s t r a p ( type char ( 2 0 ) , name char ( 2 0 ) , kolom1 char ( 2 0 ) , kolom2 char ( 2 0 ) , kolom3 char ( 2 0 ) , kolom4 char ( 2 0 ) , f a c t char ( 2 0 ) ); De bootstraptabel heeft drie typen rijen, te weten Columnamount, Fact en Detail. Columnamount INSERT INTO ”Bootstrap”VALUES(’colomnamount’, 4, NULL, NULL, NULL, NULL, NULL); Er is maar ´e´en rij van dit type en deze bevat als name het aantal kolommen kolomX van de bootstraptabel. Het aantal kolommen moet precies overeenkomen met het aantal dimensies. 46
Fact INSERT INTO ”Bootstrap”VALUES(’fact’, ’Facttable’, ’University Id’, ’Course Id’, ’Time Id’, ’Student Id’, ’Grades’); Er is maar ´e´en rij van dit type en deze rij heeft als name de naam van de facttable en als fact de kolomnaam van de facts in die tabel. Hiernaast bevat het in de kolomX kolommen de namen van alle dimensies met ’ Id’ erbij. Van deze rij mag geen van de kolommen NULL zijn. Detail INSERT INTO ”Bootstrap”VALUES(’detail’, ’Time’, ’QuarterYear’, ’Quarter’, ’Year’, NULL, NULL); Er zijn net zoveel rijen van dit type als er dimensies zijn. Elke rij heeft als name de naam van de dimensie en in de kolomX rijen staan de detailniveaus van die dimensie. De rest van de waarden zijn opgevuld met NULL. Let op: er mogen in de gehele database geen twee detailniveaus zijn met dezelfde naam. Dit in verband met het samenvoegen van alle kolommen bij het construeren van de SQL query. Tevens geldt dat wegens een ondoordachtzaamheid tijdens de ontwerpfase, het aantal detailniveaus niet groter mag zijn dan het totale aantal dimensies.
Dimensietabellen Elke tabel van dimensies moet naast dezelfde detailniveaus die in de bootstraptabel gespecificeerd zijn ook een kolom met de naam van de dimensie + Id hebben. Alle kolommen moeten van het type char zijn. In de hiervoor genoemde ID kolom staan dezelfde waarden als in de facttabel. Omdat de kolommen uit alle dimensie tabellen uiteindelijk met een natural join samengevoegd zullen worden, mogen in verschillende dimensies niet twee dezelfde kolomnamen voorkomen aangezien dit ongespecificeerd gedrag zal veroorzaken.
Facttabel De facttabel bestaat uit dezelfde kolommen als in de bootstraptabel gespecificeerd zijn, allemaal van het type char, behalve de factkolom, die van het type float moet zijn. Alle waarden in de Id kolommen moeten overeenkomen met de waarden in de betreffende dimensietabellen. Ook moet de facttabel compleet zijn, wat inhoudt dat alle combinaties van de verschillende dimensies een waarde moeten hebben.
47