Bij de eerste oefening gaat het hem vooral om het schoonmaken en opsplitsen van data om tabellen te kunnen aanmaken. Dan gaan we relaties leggen tussen de verschillende tabellen waardoor we dan informatie kunnen verzamelen voor onze visualisaties.
We werken met een FactTable en Dimension tables.
Achterliggend werken we met primary keys en foreign keys.
De FactTable is de snelstgroeiende tabel wat de data erin betreft. In dit voorbeeld bevat de FactTable alle verkopen die gebeuren.
De DimTables geven informatie aan de FactTable via de relaties die gelegd worden. De DimTables bevatten meer constante data. Er gebeuren minder snel veranderingen in.
Als we deze tabel in detail bekijken zien we dat dit een heel vlakke (onoverzichtelijke) tabel is, maar we kunnen hier verschillende Dimension Tables uit halen en een Fact Table.
Dimension Tables of de Look-Up tabellen bevatten beschrijvende informatie die een antwoord kunnen geven op de ‘WIE’, ‘WAT’, ‘WAAR’, ‘WANNEER’, ‘WAAROM’, ‘HOE’-vragen.
De Dimension Tables bevatten geen duplicaten zodat er altijd een ‘One-to-Many’-relatie gelegd kan worden met de Fact Table.
We plaatsen deze Dimension Tables dan rond onze Fact Table zodat er een ster wordt gevormd.
Dit zorgt ervoor dat ons datamodel schaalbaar en overzichtelijk wordt. Het maakt het gebruik van DAX-formules ook veel simpeler.
Elke rij bevat een transactie die plaatsvond door een bepaald persoon.
Het conceptuele model zou hier dus kunnen lijken op dit:
We zullen hierbij verschillende stappen ondernemen:
2. Maak 4 duplicaten van jouw FactSales. Deze gaan we gebruiken om onze verschillende Dimension tables aan te maken. We gaan ons concentreren op DimProduct, DimManufacturer, DimCustomer en DimGeography en geven onze entiteiten de betreffende namen.
We hebben nu enkel de kolommen behouden die gerelateerd zijn aan ‘Producten’.
Als we ons Kolomprofiel bekijken zien we hier nog steeds één rij voor elke verkooptransactie, m.a.w. we zitten hier nog met onze originele 675.368 rijen. Daar waar we eigenlijk in deze entiteit unieke waarden willen hebben voor onze ProductID, is dat momenteel niet het geval.
Via de Kolomdistributie kunnen we ook al afleiden dat er 212 verschillende waarden zitten in onze ProductID. Je kan ervan uit gaan dat de kolom met de meeste ‘distinct values’ de kolom is waarop je wilt filteren naar unieke waarden.
Er blijven nu nog 212 rijen over. Dit zijn de 212 verschillende producten die in de tabel aanwezig zijn.
Elke waarde in de kolom ProductID is nu uniek, m.a.w. elk product is identificeerbaar door zijn ID.
In de kolomdistributie zie je nu 212 verschillende, allemaal unieke waarden. Onze volledige DimProduct-entiteit bevat nu dus nog slechts 212 rijen.
In de FactSales is deze ProductID meerdere keren aanwezig. We gaan hier dus een 1:* relatie kunnen leggen.
Onze entiteit DimProduct is nu klaar.
We doen hetzelfde met onze DimManufacturer-entiteit.
We gaan hetzelfde doen met onze DimCustomer-entiteit.
We kiezen hier enkel ‘CustomerId‘ en ‘Email Name‘ en ‘ZipCode‘. Onze andere adresgegevens gaan we appart houden, zodat we, als het model groeit met bijkomende entiteiten -bijvoorbeeld de manufacterers-, deze naar dezelfde tabel met adressen kan verwijzen (DimGeography).
Haal de duplicaten weg. Er blijven nog 282.596 klanten over.
De kolom ‘Email Name‘ gaan we opsplitsen in ‘Email‘, FirstName‘ en ‘LastName‘.
Klik RMB op de hoofding en kies ‘Split Column‘ > ‘By Delimiter…‘.
… en kies ‘Custom‘. Vul de ‘:‘ in als scheidingsteken.
Herhaal deze stap om voornaam en familienaam van elkaar te scheiden. Gebruik de komma als scheidingsteken.
Benoem ook de 3 kolommen: Email, FirstName en LastName.
Vervang in de kolom Email de haakjes door een leeg veld. Je doet dit door met de RMB op de kolomhoofding te klikken en ‘Replace Values…‘ te kiezen.
Onze DimCustomer is nu ook klaar.
In deze sectie gaan we door middel van een script een datumtabel aanmaken. Verder in de cursus staan de individuele stappen uitgelegd. Je kan de formuletaal ‘M’ gebruiken om jouw queries op te bouwen in de Power Query Editor.
Je kan hier ook geraken via ‘New Source‘ > ‘Blank Query‘.
//Create Date Dimension (StartDate as date, EndDate as date)=> let //Capture the date range from the parameters StartDate = #date(Date.Year(StartDate), Date.Month(StartDate), Date.Day(StartDate)), EndDate = #date(Date.Year(EndDate), Date.Month(EndDate), Date.Day(EndDate)), //Get the number of dates that will be required for the table GetDateCount = Duration.Days(EndDate - StartDate), //Take the count of dates and turn it into a list of dates GetDateList = List.Dates(StartDate, GetDateCount, #duration(1,0,0,0)), //Convert the list into a table DateListToTable = Table.FromList(GetDateList, Splitter.SplitByNothing(), {"Date"}, null, ExtraValues.Error), //Create various date attributes from the date column //Add Year Column YearNumber = Table.AddColumn(DateListToTable, "Year", each Date.Year([Date])), //Add Quarter Column QuarterNumber = Table.AddColumn(YearNumber , "Quarter", each "Q" & Number.ToText(Date.QuarterOfYear([Date]))), //Add Week Number Column WeekNumber= Table.AddColumn(QuarterNumber , "Week Number", each Date.WeekOfYear([Date])), //Add Month Number Column MonthNumber = Table.AddColumn(WeekNumber, "Month Number", each Date.Month([Date])), //Add Month Name Column MonthName = Table.AddColumn(MonthNumber , "Month", each Date.ToText([Date],"MMMM")), //Add Day of Week Column DayOfWeek = Table.AddColumn(MonthName , "Day of Week", each Date.ToText([Date],"dddd")) in DayOfWeek
De functie wordt aangemaakt en ik kan start- en einddatum van mijn DimDate meegeven. Klik daarna op ‘Invoke‘.
De tabel wordt aangemaakt.
Benoem de tabel ‘DimDate‘ en pas de datatypes aan voor de verschillende kolommen.
Onze 4 Dimension Tables zijn aangemaakt en we kunnen de kolommen die we in onze FactSales niet nodig hebben verwijderen.
Klik ‘Close & Apply‘ om de queryEditor te sluiten.
Maak de volgende visualisaties zonder relaties:
Ga naar modelweergave, zet de tabellen in de stervorm en maak de nodige relaties aan.
Bekijk of je gemaakte tabellen nu wel de juiste weergave tonen door de aangemaakte relaties.
Sla de file op en sluit hem.