Tijdens de Techionista Data & AI track kregen we als studiegroep een business case waarbij wel veel salesdata (on- en offline) van een modebedrijf moesten worden verwerkt. In de originele business case in Azure Data Factory en/of Synaps Analytics of een andere fijne combinatie. De data had ik nog dus bestaande uit directories met duizenden JSON Bestanden voor online sales, .CSV bestanden voor producten en .TXT voor offline sales. Tijd om er iets mee te doen om de kennis bij te houden en dit is het resultaat (tot nu toe).
Uitgangspunten
Producten & categorieën (dim_products)
Hoewel het idee binnen de business case was dat je bij de verkoopvisuals altijd de categorieën en productomschrijvingen van de dag ervoor gebruikt, blijkt uit een steekproef dat die gegevens een startsituatie missen. Dat uit zich dan uiteindelijk in sommige producten die wel verkocht zijn maar waarvan geen omschrijving beschikbaar is. Dus heb ik ervoor gekozen om van elke taal het meest recente record voor een product te houden, er vanuit te gaan dat de categorieën ongewijzigd bleven (dat zal in de praktijk niet altijd zo zijn) en toen die records samen gevoegd tot een productbestand met de meest recente productbeschrijving per taal (pivotten zodat de taal een kolom werd en er per product 1 record was). Bij de actie hou het meest recente record kwam deze link van pas, Power BI blijkt namelijk zelf ideeën te hebben wanneer te sorteren in Power Query (zo laat mogelijk) : https://blog.pragmaticworks.com/remove-duplicates-keep-recent-records-power-bi.
Hoewel het logisch kan zijn om de categorieën en productentabel te splitsen zag ik er bij mijn activiteit niet zoveel toegevoegde waarde in.
Fact_sales
De offline en online sales data zijn samengevoegd voor verwerking in PowerQuery. Naast het gelijktrekken van de structuren van de twee ingelezen bestanden is er een kolom bijgekomen voor offline/online sales (True/False) zodat ik een splitsing kon maken tussen de opbrengsten van online en offline sales.
dim_store
De storetabel bevat een country_locale (in de te importeren bestanden werd b.v. voor Duitsland gebruik gemaakt van “de” en “GER” als indicator voor land/taal.
De storetabel bevat een omrekenwaarde die gebruikt wordt om een extra kolom in de sales te maken waarin het verkooptotaal ex. btw in euro’s wordt berekend en niet in lokale valuta. Bestanden met gegevens over de verkoop in het VK en Zweden hadden hun bedragen in lokale valuta. Eigenlijk zou daar een datum component in moeten zitten, de wisselkoers van een munteenheid varieert.
Na inlezen en transformeren zag het datamodel er als volgt uit:

Op zich had er nog wel wat schoningswerk in het datamodel gekund, maar ik gooi zelden iets weg waar ik geen last van heb en dat later nog van pas kan komen.
Report/dashboard
Het resultaat in Power BI is een dashboard waarbij je bovenin kunt selecteren op land of hoofdcategorie producten. De visuals geven de waarden gebaseerd op de gekozen filters. De visual linksonder geeft de verkoop per dag, de visual rechtsonder geeft tot op het niveau van het product aan welke waarde hoeveel daar totaal van is verkocht (op basis van de gekozen filters).



Op bovenstaand dashboard is natuurlijk het nodige aan te merken, wat als je sales per dag over een maand wilt tonen, dan is er wat weinig ruimte, dan zou die rechter grafiek een aparte pagina kunnen/moeten zijn. In deze opdracht mocht je zelf je gang gaan maar normaliter zouden de specificaties voor een dashboard veel duidelijker zijn geweest of je zou er als eerste ervoor zorgen dat je overeenstemming over b.v. een schets zou krijgen waar wat eisen aan zouden hangen. Waar ik zelf totaal door geobsedeerd ben is het verbergen van lege categorieën in het overzicht rechtsonder. Onder “Verberg lege rijen” staan links naar de oplossingen die ik heb bekeken en uitgeprobeerd maar tot nu toe waren de resultaten te kwalificeren als “net niet”.
Work in progress: Verberg lege rijen / blanks in hierarchy/matrix
Eventueel interessante links als je op zoek bent naar mechanismen om in een parent-child hierarchy de lege rijen weg te laten:
- https://community.powerbi.com/t5/Desktop/Removal-of-blanks-from-sub-row-in-matrix-while-maintaining-total/m-p/640837#M306896
- https://www.youtube.com/watch?v=YEuxONjCl1A&t=3s
- https://www.sqlbi.com/blog/alberto/2011/07/19/parent-child-hierarchies-in-tabular-with-denali/ (dit is een hele oude maar het heeft iemand laatst toch de oplossing geboden)