Business Intelligence De Zeeschuimer “Resistance is futile”
Stephan Bosch / 13637 Gerben Peters / 411711
Hogeschool Arnhem Nijmegen Hogere Informatica Docent: Jan Hugo Wijbenga / Jorg Janssen 18 november 2006
1
Inhoudsopgave Inhoudsopgave..................................................................................................1 Inleiding ..............................................................................................................2 Opdracht 0..........................................................................................................3 Opdracht 1..........................................................................................................4 Opdracht 2..........................................................................................................5 Opdracht 3..........................................................................................................9 Query 1 ......................................................................................................9 Query 2 ....................................................................................................10 Opdracht 4........................................................................................................12 Opdracht 5........................................................................................................17 Opdracht 6........................................................................................................18 Opdracht 7........................................................................................................23 Opdracht 8........................................................................................................26 Query 1 ....................................................................................................26 Query 2 ....................................................................................................27 Opdracht 9........................................................................................................30 Query 1 ....................................................................................................30 Query 2 ....................................................................................................31 Opdracht 10......................................................................................................33 Opdracht 11......................................................................................................34
1
Inleiding De rederij ZEESCHUIMER verzorgt containervervoer langs Europese havens. De schepen varen non-stop van Oslo naar PortSaid in Egypte en vervolgens weer terug. Onderweg worden containers geladen en gelost. Zij gebruiken een database waarin alle havens, schepen, klanten en de verschillende vaarten met de bijbehorende gegevens.
Het model van de database ziet er als volgt uit:
Datbasemodel rederij ZEESCHUIMER
2
Opdracht 0 Hoeveel verwijzingen zijn er naar de tabel Port?
Database Met verwijzingen
Er zijn in totaal 6 verwijzingen naar de tabel Port, vanuit 3 tabellen. De tabel Voyage, VoyagePort en Shipment.
Geef elke verwijzing en leg in normaal nederlands uit wat die verwijzing betekent. In de tabel Shipment, wordt elke verzending bijgehouden. Deze verzending heeft een haven waar de containers ingeladen moeten worden (portid from) en een bestemming (portid to), waar de containers naartoe moeten. Elke Shipment wordt ingeroosterd en toegekend aan een bepaalde vaart, welke in de tabel Voyage wordt vastgelegd.
De tabel Voyage bevat alle vaarten van alle schepen. Hierbij zijn het vetrekpunt (portid start) en de bestemming (portid end) verwijzingen naar records in de tabel Port.
Deze vaarten bestaan uit verschillende tussenstops. Elke tussenstop waarbij geladen of gelost moet worden, wordt bijgehouden in de tabel VoyagePort. Hierbij wordt elke vaart tussen 2 havens aangeduid met een huidige haven (portid current), en de volgende haven (portid next) op de vaart.
Hoeveel datum velden zijn er? Geef ze en leg uit wat elk veld inhoud. Wederom in normaal nederlands. In de tabel Voyage is een vertrekdatum vast gelegd in de kolom DateDepartVoyage. Vervolgens is voor elke tussenstop in VoyagePort een aankomst- en vertrekdatum vastgelegd in de kolommen LegDateArrival en LegDateDepart. Dat brengt het aantal datum velden op 3. 3
Opdracht 1 Kies uit bovenstaand lijstje evenveel informatiebehoeftes als er studenten in je groepje zijn. (persé 2 studenten per groep!) We hebben gekozen voor informatiebehoefte 1 en 2: 1. De directie van ZEESCHUIMER wil een Italiaanse haven afstoten. Zij willen daarom weten hoeveel containers in elke Italiaanse haven werden ingeladen in 2004. Ook wil de directie weten hoeveel containers daar worden uitgeladen. 2. Men wil bepalen in welk land men het beste nog een kantoor kan openen. Daarom wil de directie een overzicht van de omzet per land in 2003 en in 2004. Omzet is het ingeladen aantal containers maal het aantal kilometers maal de prijs per kilometer voor dat type container.
4
Opdracht 2 Maak voor de gekozen informatiebehoeften elk een SQL query. De queries kun je typen in de query analyser. Noteer ook de computer-tijd die het kost om antwoord op de SQL vraag te krijgen. Voor vraag 1: select 0 as uitgeladen , sum(s.NumberContainers) as ingeladen , p.Portid , p.Portname , p.Country from Shipment as s inner join VoyagePort as vp ON s.VoyageId = vp.VoyageId inner join Port as p ON vp.[portid current] = p.[PortId] where p.Country = 'Italy' and YEAR(vp.LegdateDepart) = '2004' and vp.[portid current] = s.[portid from] group by p.Portid , p.Portname , p.Country UNION ALL select sum(s.NumberContainers) as uitgeladen , 0 as ingeladen , p.Portid , p.Portname , p.Country from Shipment as s inner join VoyagePort as vp ON s.VoyageId = vp.VoyageId inner join Port as p ON vp.[portid current] = p.[PortId] where p.Country = 'Italy' and YEAR(vp.LegdateArrival) = '2004' and vp.[portid current] = s.[portid to] group by p.Portid , p.Portname , p.Country
5
Resultaat Query 1
Uitvoertijd Query 1
6
Voor vraag 2: -- 2004 SELECT p.Country , SUM(s.Distance * c.price_km) as Omzet FROM Shipment s LEFT JOIN ShipmentDetail sd ON (sd.shipmentid = s.shipmentid) LEFT JOIN Container c ON (c.containertypeid = sd.Containertypeid) LEFT JOIN VoyagePort vp ON (vp.VoyageId = s.VoyageId AND vp.[portid current] = s.[portid from]) LEFT JOIN Port p ON (p.PortId = vp.[portid current])
WHERE YEAR(vp.LegDateDepart) = 2004 GROUP BY p.Country ORDER BY Omzet DESC
-- 2003 SELECT p.Country , SUM(s.Distance * c.price_km) as Omzet FROM Shipment s LEFT JOIN ShipmentDetail sd ON (sd.shipmentid = s.shipmentid) LEFT JOIN Container c ON (c.containertypeid = sd.Containertypeid) LEFT JOIN VoyagePort vp ON (vp.VoyageId = s.VoyageId AND vp.[portid current] = s.[portid from]) LEFT JOIN Port p ON (p.PortId = vp.[portid current])
WHERE YEAR(vp.LegDateDepart) = 2003 GROUP BY p.Country ORDER BY Omzet DESC
7
Het resultaat van Query 2 in de Query Analyzer:
8
Opdracht 3 Maak van elk van de resultaten van opdracht 2 een representatieve grafische weergave met behulp van EXCEL. Lukt het niet om de data goed weer te geven knip en plak het dan in de juist vorm zodat EXCEL er wel een voor het management geschikte grafiek van maakt. Het management heeft geen voorkeur voor bepaalde soorten grafieken (staaf, taart etc) maar het geheel moet er netjes en verzorg uit zien.
Query 1 Portname Bari Genua Napels Ostia
Uitgeladen 331 662 662 103
Ingeladen 442 770 419 422
Containers Italië 2004 1000 800 600
Uitgeladen
400
Ingeladen
200 0 Bari
Genua Napels
Ostia
Containers Italië 2004
9
Query 2 2004 Italy Turky France England Netherlands Lebanon Belgium Israel Spain Germany Greece Portugal Serbia Sweden Norway Denmark Egypt
2003 € 6.398.255,00 € 5.245.755,00 € 4.002.525,00 € 3.084.815,00 € 2.726.025,00 € 2.694.285,00 € 2.366.265,00 € 2.203.425,00 € 1.874.315,00 € 1.598.760,00 € 1.522.275,00 € 1.412.155,00 € 1.308.585,00 € 711.040,00 € 607.810,00 € 313.500,00 € 40.980,00
Turky Italy Netherlands England Spain France Denmark Serbia Norway Belgium Germany Lebanon Israel Greece Portugal Sweden Egypt
€ 6.267.435,00 € 6.071.190,00 € 4.723.830,00 € 3.125.220,00 € 2.943.650,00 € 2.727.605,00 € 2.384.400,00 € 2.284.830,00 € 2.283.255,00 € 2.144.340,00 € 1.969.790,00 € 1.878.845,00 € 1.675.220,00 € 1.488.390,00 € 1.429.390,00 € 398.375,00 € 10.050,00
Omzet per land in 2004 € 7.000.000,00
Italy Turky
€ 6.000.000,00
France England
€ 5.000.000,00
Netherlands
Omzet
Lebanon € 4.000.000,00
Belgium Israel
€ 3.000.000,00
Spain Germany
€ 2.000.000,00
Greece Portugal Serbia
€ 1.000.000,00
Sweden Norway
€ 0,00 1 Land
Omzet per land in 2004
10
Denmark Egypt
Omzet per land in 2003 € 7.000.000,00
Turky Italy
€ 6.000.000,00
Netherlands England
€ 5.000.000,00
Spain
Omzet
France € 4.000.000,00
Denmark Serbia
€ 3.000.000,00
Norway Belgium
€ 2.000.000,00
Germany Lebanon Israel
€ 1.000.000,00
Greece Portugal
€ 0,00 1 Land
Sweden Egypt
Omzet per land in 2003
In 2003 werd in Turkije de hoogste omzet gehaald. In 2004 werd Turkije 2de, en werd in Italie de hoogste omzet gehaald.
11
Opdracht 4 Ontwerp één sterschema’s om minimaal de informatiebehoeften van vraag 1 af te dekken. Vertel ook duidelijk in je verslag welke ontwerpbeslissingen je gemaakt hebt. Welke velden doen wel mee en welke niet. Laat duidelijk merken dat je de ontwerpafwegingen maakt zoals aangegeven door van der Lek. Geef ook duidelijk je aanpak weer tijdens het ontwerpen.
Voor het ontwerpen van een sterschema hanteer je de volgende stappen als leidraad: 1.
Bedrijfsproces
2.
Feitentabel
3.
Gewone dimensies
4.
Meetwaarden
5.
Historie
6.
Technische zaken
Dit is de optimale volgorde waarin de activiteiten elkaar opvolgen, het heeft bijvoobeeld geen zin om dimensies te bepalen als men nog niet weet wat het detailniveau van de feitentabel is.
In ons geval bekijken we eerst de verwachtingen van onze gebruikers, in de vorm van de uitgesproken informatie behoeften. In de woorden van Harm van der Lek1: “Een ontwerp moet ergens op gebaseerd zijn en een doel dienen.”
In ons geval is het doel , het verzorgen van containervervoer per schip.
Dat brengt ons bij stap 2, het ontwerpen van de feitentabel. Hierbij kijken we eerst naar de tabellen in het OLTP2 systeem of er tabbellen zijn die alleen uitgaande verwijzingen hebben ookwel “worteltabellen” genoemd:
1 2
De geboorte van een ster – Database Magazine september 1998 OnLine Transaction Processing – het operationele systeem waar op gewerkt wordt 12
Worteltabellen
In onze zoektocht naar het laagst denkbare detailniveau sprint de tabel ShipmentDetail in het oog. Maar wat zijn hiervoor de dimensies? We splitsen vervolgens de tabellen op die op meer dan één manier te bereiken zijn, deze vorm wordt ook wel een Snowflake genoemd:
Splitsing tabellen met meerdere verwijzingen (Snowflake)
De opgesplitste tabellen krijgen een andere naam, bijvoorbeeld VoyageStartPort en VoyageEndPort. In dit model kijken we naar de gegevens die interessant zijn voor ons sterschema, zoals Item, Containertypeid, Distance, portid to, portid from, ConsignorId, VoyageId, ShipId, LegDateArrival en wel omdat ze antwoord geven op de vragen, wie, wat, hoe en wanneer. 13
Dimensie
Bijbehorende vraag
Detailniveau
Hiërarchieën
Tijd
Wanneer komen de
LegdateArrival
VoyagePort ->Dag ->
goederen aan?
Maand -> Jaar
Container
Wat?
Container
Container
Item
Wat?
Item
Item -> ItemCategorie
Consignor
Door wie?
Consignor
Consignor
Voyage
Waarheen?
Voyage
Voyage -> Ship
Als we verder kijken naar Shipment en ShipmentDetail zien we dat ShipmentDetail functioneel afhankelijk is van Shipment, dat wil zeggen dat de primaire sleutel afhankelijk is van Shipment. We nemen derhalve Shipment en ShipmentDetail samen tot de fact tabel Shipment_Fact, het veld shipmentid noemt men ook wel een gedegenereerde dimensie, daarbij hoort dus geen dimensietabel.
Shipment en ShipmentDetail samenvoegen
Verder zien we dat Voyage eigenlijk maar 1 interessant iets heeft, namelijk het ShipId waar we wat over willen weten, de overige gegevens zijn afleidbaar uit VoyagePort, dus als we die opnemen in onze nieuwe feitentabel dan kunnen we de tabel Voyage weg laten. Ook vervalt het veld NumberContainers, dit is het totaal aantal containers dat in deze shipment zit, door het samenvoegen met ShipmentDetail is dit overbodig geworden.
14
Benodigde gegevens opnemen in Fact tabel
Het uiteindelijke sterschema (zonder tijd) komt er dan zo uit te zien:
Ster Schema Zeeschuimer
Als we goed kijken naar ons sterschema zien we dat we geen meetwaarden hebben die nodig zijn bij onze vraagstukken als “wat is de omzet voor 2004” en “hoeveel containers werden er verscheept”. In ons geval kun je zeggen dat iedere regel in de feitentabel over 1 container gaat, ookal is deze impliciet aanwezig. We hebben ervoor
15
gekozen om deze op nemen als het veld ‘aantal_containers’. In de woorden van Harm van der Lek3: “Men kan immers de vraag stellen (en beantwoorden) met behulp van de COUNT(*) operator. Het is een goed idee om in zo’n geval toch gewoon de meetwaarde in de feitentabel op te nemen met de naam ‘aantal’ en deze consequent met 1 te vullen.”
Verder zien we dat er een ander onderdeel ontbreekt aan onze feiten tabel, namelijk een additieve meetwaarde ‘omzet’ waarmee we de resterende vragen kunnen beantwoorden. Het veld ‘omzet’ is een vermenigvuldiging van het veld ‘price_km’ uit de tabel Container met het veld ‘Distance’ uit de tabel Shipment. Door dit veld op te nemen in de feitentabel is het ook mogelijk om in de toekomst de verandering van prijzen van containers terug te zien in de hoeveelheid verscheepte goederen en andere mogelijke vragen die hiermee te verzinnen zijn.
3
Sterren en Dimensies ”Ontwerp en onderhoud van datawarehouses” – Dr. H. Van der Lek 16
Opdracht 5 Voer het ontwerp uit in een nieuwe database ZEESCHUIMER_STER. Laat in je verslag zien hoe de tabellen gedefinieerd zijn.
ZEESCHUIMER_STER
17
Opdracht 6 Maak een DTS package dat de gegevens van ZEESCHUIMER overzet naar de ZEESCHUIMER_STER. Laat in je verslag zien wat de inhoud van het package is. Doe dit dmv een plaatje en de SQL.
De inhoud van de DTS package ziet er uiteindelijk als volgt uit:
DTS package
18
Onderstaande afbeelding geeft de volgorde van de eerder genoemde stappen aan:
Volgorde van de uitgevoerde stappen
Dit zijn de SQL script die in het DTS package worden uitgevoerd. DropForeignKeysIndexes Verwijdert alle foreign keys om het inserten van alle data te versnellen ALTER TABLE Shipment_Facts DROP FK_Shipment_Facts_Consignor , FK_Shipment_Facts_Container , FK_Shipment_Facts_Item , FK_Shipment_Facts_ship , FK_Shipment_Facts_ShipmentFromPort , FK_Shipment_Facts_ShipmentDestinationPort , FK_ArrivalTime , FK_DepartTime Clean Tables Maakt de bestaande tabellen leeg. Dit is nodig om de tabellen te kunnen voorzien van nieuwe data DELETE Consignor DELETE Container DELETE Item
19
DELETE DELETE DELETE DELETE DELETE DELETE
ship Shipment_Facts ShipmentDestinationPort ShipmentFromPort ArrivalTime DepartTime
Load Time Dimensions Vult de tabellen ArrivalTime en DepartTime met alle data’s van 1 januari 2002 tot 23 februari 2005 DECLARE @date smalldatetime SET @date = '2002-01-01' WHILE @date < '2005-02-23' BEGIN INSERT ArrivalTime(Date,Year,Quarter,Month,Day) VALUES (@date,year(@date),'Q' + CONVERT(varchar, datepart(q,@date)), datename (Month,@date),day(@date)) SET @date = dateadd(dd,1,@date) END SET @date = '2040-12-12' INSERT ArrivalTime(Date,Year,Quarter,Month,Day) VALUES (@date,year(@date),'Q' + CONVERT(varchar, datepart(q,@date)), datename (Month,@date),day(@date)) SET @date = '2002-01-01' WHILE @date < '2005-02-23' BEGIN INSERT DepartTime(Date,Year,Quarter,Month,Day) VALUES (@date,year(@date),'Q' + CONVERT(varchar, datepart(q,@date)), datename (Month,@date),day(@date)) SET @date = dateadd(dd,1,@date) END Load Ship Dimension Laadt de schepen uit de database naar de datamart SELECT Country ,MaxNumberContainers ,ShipId ,Shipname ,SpeedInKm_H ,SpeedInKnots ,yearcost FROM ship Load Consignor Dimension Laadt de klanten uit de database naar de datamart SELECT Consignor ,ConsignorId ,country ,Discount ,mob_no ,plaats ,tel_no FROM Consignor Load Container Dimension
20
Laadt de containers uit de database naar de datamart SELECT container_type ,containertypeid ,cubes ,length ,power_flag ,price_km ,refrigeration_flag FROM Container Load ShipmentFromPort Dimension Laadt de havens uit de database naar de datamart, in dit geval om de rol van vertrekhaven te vervullen SELECT Country ,DistanceFromOslo ,DistanceFromPortSaid ,PortId ,Portname ,PortOrder FROM Port Load ShipmentDestinationPort Dimension Laadt de havens uit de database nogmaals naar de datamart, deze keer om de rol van aankomsthaven te vervullen SELECT Country ,DistanceFromOslo ,DistanceFromPortSaid ,PortId ,Portname ,PortOrder FROM Port Load Item Dimension Laadt de items uit de database naar de datamart SELECT item_category ,item_description ,item_hazard_flag ,item_key ,item_mfgr ,item_storage_type FROM Item Load fact table Uiteindelijk wordt dan de feitentabel gevuld met data SELECT c.ConsignorId ,sd.ContainerNr ,sd.Containertypeid ,s.Distance ,sd.Item ,T.ArrivalTimeId ,T2.DepartTimeId ,s.[portid from] ,s.[portid to] ,v.ShipId
21
,s.shipmentid ,1 as aantal_containers ,(s.Distance * co.price_km) as omzet FROM ShipmentDetail sd INNER JOIN Shipment s ON sd.shipmentid = s.shipmentid INNER JOIN Consignor c ON c.Consignor = s.ConsignorId INNER JOIN Container co ON co.containertypeid = sd.containertypeid INNER JOIN Voyage2 v ON v.VoyageId = s.VoyageId INNER JOIN VoyagePort vp ON vp.VoyageId = s.VoyageId AND vp.[portid current] = s.[portid to] INNER JOIN VoyagePort vp2 ON vp2.VoyageId = s.VoyageId AND vp2.[portid current] = s.[portid from] INNER JOIN ZEESCHUIMER_STER..ArrivalTime AS T ON vp.LegDateArrival = T.Date INNER JOIN ZEESCHUIMER_STER..DepartTime AS T2 ON vp2.LegDateDepart = T2.Date
22
Opdracht 7 Maak mbv de OLAP manager een CUBE. Zorg ervoor dat de vragen uit 1 beantwoord worden maar denk ook verder zie opdracht 10.
Nu de ster en het DTS package gereed zijn, kunnen we de tabellen uit het sterschema gaan gebruiken voor het aanmaken van een Cube.
Na het selecteren van de fact table, en het toevoegen van de gewenste dimensies, en het koppelen van de juiste sleutels heeft de Cube de volgende inhoud:
Uiteindelijke ster schema
23
Genereren Cube
24
Proces uitvoer Cube aanmaken
25
Opdracht 8 Maak in EXCEL met behulp van de Wizard Draaitabel (menu Data) een koppeling naar de kubus en creëer een grafische weergave. Zorg voor: -
een nette weergave (voor het management)
-
een correcte weergave (kloppen de cijfers met opdracht 1)
Query 1 De volgende schermen geven een grafische weergave van dezelfde vragen als in opdracht 2. Voor de eerste query ziet dat als volgt uit:
Grafiek Aantal Ingeladen Containers Italië 2004
Excel (sheet 1) Aantal Ingeladen Containers Italië 2004
Om het tweede deel van de vraag te beantwoorden moeten we hetzelfde verhaal nog een keer uitvoeren, het resultaat ziet er als volgt uit:
26
Grafiek Aantal Uitgeladen Containers Italië 2004
Excel (sheet 1) Aantal Uitgeladen Containers Italië 2004
Query 2 Wanneer de Cube is aangeroepen vanuit Excel is het erg eenvoudig om de verschillende gegevens tegenover elkaar te zetten op de rijen en kolommen.
27
De gegevens in Excel
Op de volgende pagina vindt u een grafiek, met daarin een weergave van bovenstaande gegevens.
28
7000000
Omzet
6000000 Country Belgium England France Germany Greece Israel
5000000
4000000
Italy Lebanon Netherlands Norway Portugal Serbia Spain
3000000
2000000
Sweden Turky
1000000
0 2003
2004 Year
Excelgrafiek van gevonden gegevens
29
Opdracht 9 Maak in PROCLARITY dezelfde overzichten als in opdracht 8. Zorg ervoor dat het geheel er weer netjes uit ziet.
Query 1 De uitvoer in ProClarity moet net als in Excel in 2 stappen worden uitgevoerd, het resultaat ziet er als volgt uit:
ProClarity Aantal Ingeladen Containers Italië 2004
De tweede stap:
30
ProClarity Aantal Uitgeladen Containers Italië 2004
Query 2 De uitvoer van de tweede query hebben we gemaakt met DataWarehouse explorer een alternatief voor ProClarity. De uitvoer ziet er als volgt uit:
31
Belgium Denmark Egypt England France Germany Greece Israel Italy Lebanon Netherlands Norway Portugal Serbia Spain Sweden Turky
6.200.000 6.000.000 5.800.000 5.600.000 5.400.000 5.200.000 5.000.000 4.800.000 4.600.000 4.400.000 4.200.000 4.000.000 3.800.000 3.600.000 3.400.000 3.200.000 3.000.000 2.800.000 2.600.000 2.400.000 2.200.000 2.000.000 1.800.000 1.600.000 1.400.000 1.200.000 1.000.000 800.000 600.000 400.000 200.000 0 2003
2004
Resultaten DataWarehouse explorer 32
Opdracht 10 Je hebt nu 3 methodes gebruikt (SQL + database (+EXCEL); Sterschema (CUBE) met EXCEL; en een sterschema (CUBE) met Proclarity). Bespreek de 3 methoden en geef een goed gefundeerde mening over wat volgens jou de voorkeur geniet.
Het grote voordeel van de eerste methode, een losse query in combinatie met Excel levert het snelst resultaat op. Het nadeel daarvan is dat deze query slechts 1 vraag beantwoord. Wanneer de informatie behoefte verandert zal dus de query ook moeten veranderen, of zal er een nieuwe query moeten worden toegevoegd. Daarnaast is enige Excel kennis vereist om de diagrammen in de gewenste vorm te gieten.
Wanneer gekozen wordt voor een Sterschema (Cube), wordt tijdens het ontwerp van de ster rekening gehouden met de gestelde vragen, en vragen die later zouden kunnen ontstaan. Deze zal dus later ook nauwelijks meer veranderen. Het management kan dan de antwoorden met behulp van Excel of ProClarity/DataWarehouse Explorer zelf beantwoorden, en eventueel worden gerapporteerd.
Het nadeel van Excel ten opzichte van ProClarity of DataWarehouse Explorer is dat hier meer kennis vereist is om de gegevens te rapporteren. Wat dat betreft is een programma als ProClarity of DataWarehouse Explorer gebruiksvriendelijker. De mogelijkheid om met een klik een ‘Drill up’ of ‘Drill down’ te doen maakt het erg eenvoudig om gegevens verder uitgespecificeerd te krijgen. Verder bieden de tools meer extra opties, waaronder bijvoorbeeld het filteren en orderen van data.
33
Opdracht 11 Wat is het advies van jouw team aan de directie. Hoe kan ZEESCHUIMER haar problemen de baas worden?
Vraag 1: De directie van ZEESCHUIMER wil een Italiaanse haven afstoten. Zij willen daarom weten hoeveel containers in elke Italiaanse haven werden ingeladen in 2004. Ook wil de directie weten hoeveel containers daar worden uitgeladen.
Vraag 2: Men wil bepalen in welk land men het beste nog een kantoor kan openen. Daarom wil de directie een overzicht van de omzet per land in 2003 en in 2004. Omzet is het ingeladen aantal containers maal het aantal kilometers maal de prijs per kilometer voor dat type container.
Uit de cijfers is gebleken dat Italië van alle landen het best scoort in het jaar 2004. In het jaar 2003 had Turkije nog een kleine voorsprong. Wanneer we kijken naar de ontwikkelingen in het jaar 2005 blijkt dat Italië deze stijging vasthoudt in tegenstelling tot Turkije die een nieuwe daling in cijfers heeft moeten doormaken.
Ons antwoord op vraag 2 is dat er in Italië een nieuw kantoor geopend zou kunnen worden. Alle Italiaanse havens maken een flinke stijging door. Daarom is het raadzaam in Italië een nieuw kantoor te openen, om deze stijging vast te houden en in de toekomst voldoende capaciteit te houden. Daarbij lijkt het ons niet verstandig om in een land met zulke stijgingen in cijfers een haven af te stoten, omdat daardoor de capaciteit drastisch afneemt. Daarnaast, als we kijken naar de gemiddelde resultaten, zien we dat de 4 Italiaanse havens er geen duidelijke verschillen zichtbaar zijn, maar dat de havens juist samen zorgen voor een stabiele omzet van ca. 6.234.722,50 euro in de jaren 2003 en 2004.
34