Hoe maak je een Power BI Dashboard bovenop data uit Google Trends?
In dit artikel leg ik dit uit aan de hand van een analyse van de populariteit qua zoekopdrachten van Power BI ten opzichte van andere dashboard oplossingen.
Hieronder deel ik hoe ik dit dashboard heb gemaakt.
Ben je vooral benieuwd naar de uitkomsten welke in het dashboard staan? Klik dan hier voor een nadere bespreking hiervan.
Wat toont Google Trends?
Op trends.google.com kun je voor elk zoekwoord zien wat het indexcijfer is qua aantal zoekopdrachten. Eerst wordt uitgerekend wat het percentage van aantal zoekopdrachten tov het totale aantal zoekopdrachten is. Daarna wordt dit percentage geïndexeerd. Waarbij index=100 het hoogste percentage is. Alle andere percentages worden gerelateerd aan dat maximum. Als er helemaal niet op gezocht wordt is de index 0.
Welke Dashboard oplossingen meegenomen?
Ik heb gekozen voor de volgende vijf Dashboard oplossingen:
- Power BI
- Tableau
- Qlik (hierin zitten dus QlikView en QlikSense)
- Cognos
- Google Data Studio
Google Trends geladen in Power BI Dashboard
Het mooie aan Google Trends is dat je de analyses als csv bestand kunt exporteren. Ik heb de volgende data sets gedownload:
- Wereldwijde indexering van alle 5 de oplossingen, 2015-2020
- Idem, maar dan voor Nederland
- Per oplossing de indexering 2015-2020, wereldwijd
- Idem maar dan voor Nederland
- Huidige zoek indexen (Augustus 2020) vergeleken tussen de landen
Ik had overigens een langere tijdsperiode kunnen kiezen (Google Trends heeft meen ik data vanaf 2004 beschikbaar). Maar omdat Power BI nu officieel 5 jaar bestaat, heb ik die tijdspanne gekozen.
Data laden in Power BI
Alle csv bestanden heb ik gelezen in Power BI Desktop. Ik laadde ook een standaard Calendar tabel. Zodat ik de verschillende data over 1 tijddimensie kan analyseren.
Data transformeren in Power Query
In de CSV bestanden werden de oplossingen in kolommen getoond. Ik wilde alle oplossingen in 1 kolom hebben. De Power Query optie “Unpivot” bood uitkomst. Hierdoor had ik 1 kolom met de oplossingen en 1 kolom met de indexcijfers.
Data model
Ik heb model in 2 stukken geknipt:
De relatieve trends wereldwijd/Nederland gekoppeld naar Calendar tabel.
De landen data heb ik gekoppeld aan een nieuwe tabel met landen (dit is gebaseerd op de feiten, maar ontdubbeld op land). Ik wilde ook trend laten zien tussen 2015 en 2020. De 2015 data heb ik door onvolledigheid later toch niet gebruikt. Ik heb het voor nu nog wel in datamodel gelaten.
De landen moest ik ten behoeve van visualisatie in kaart nog koppelen aan mapping tabel met ISO codes en Europe indicator (zie hieronder meer daarover).
Weghalen outliers via DAX Meetwaarde
Het viel me op dat er soms grote pieken en dalen in de data zaten.
Daarom heb ik measures toegevoegd welke een 30 dagen voortschrijdend gemiddelde berekent. Hierdoor werden alle trendlijnen een stuk “smoother”.
30 dagen Rolling Average Index = CALCULATE(AVERAGE(data[Index]),FILTER(ALL(‘Calendar’),’Calendar'[Date]>=MAX(‘Calendar'[Date])-30),FILTER(ALL(‘Calendar’),’Calendar'[Date]<=MAX(‘Calendar'[Date])))
Hieronder zie je mooi het dempende effect van het voortschrijdende gemiddelde.
Keuze van de Visualisaties
Ik was eerst benieuwd hoe wereldwijd en Nederland de trends er uitzagen over de afgelopen 5 jaar. Ik koos dus voor lijngrafieken. Waarbij ik de logos van de oplossingen heb gedownload. En de kleurcodes van deze logo’s heb overgenomen in de lijnen. Deze kleuren hanteer ik voor de consistentie ook in alle andere grafieken.
Ik hou van logo’s in mijn dashboards. Daarom 2 logo’s gevonden voor Wereldwijd (wereldbol) en Nederland.
Deze heb ik op eerste pagina (“Totaal”) als achtergrond gebruikt. En op 2e pagina als iconen. Om de logo’s op achtergrond niet te veel aandacht te laten trekken, heb ik de achtergrond van de grafieken wit gemaakt, met een transparantie van 5%. Hierdoor zie je het logo heel licht achter de grafiek. De lijnen ook bewust nog wat dikker gemaakt, zodat ze nog meer op de voorgrond treden.
Op de tweede pagina (“Per Oplossing”) heb ik de logo’s van de oplossingen op soortgelijke manier op de achtergrond gezet. Bij sommige logo’s heb ik transparantie iets hoger gezet zodat logo iets duidelijker zichtbaar werd.
Vullen van de Shape Map
De Shape Map op de derde pagina (“Per Land”) vereiste een wereldkaart. Deze heb ik gedownload vanaf https://github.com/deldersveld/topojson. Ik had eerst world-countries.json gepakt, maar deze bevat Antartica. En daar wordt opvallend weinig gezocht op dashboards (kans!). Dus daarna world-countries-sans-antartica.json gepakt. Deze kon ik zonder problemen als custom map inlezen in Shape Map.
Mijn download uit Google bevatte de Nederlandse landsnamen. Dus ik heb een mapping bestand gemaakt waarbij de ik landen heb gemapt naar de ISO landcodes. Deze ISO landcodes heb ik vervolgens gebruikt in de landkaart. Later voegde ik ook nog een Europe/ Niet Europa indicator aan deze mapping tabel toe.
Toen ik de eerste grafiek maakte viel me op dat in Franstalige landen de index van Tableau vele malen hoger was. Ik realiseerde me toen dat Google Trends geen onderscheid maakt tussen de semantische betekenissen van Tableau. Ik nam nu allerlei andere betekenissen van Tableau mee. Daarom heb ik in dit derde blad alle Franstalige landen er uit gehaald, waaronder Frankrijk, Zwiterland en Canada.
Ik wilde in derde blad vooral per land de balans tonen tussen zoekopdrachten tussen Tableau en Power BI.
Eerste maakte ik voor oplossingen wat groepen, waarbij Power BI en Tableau eigen groep kregen. En de andere drie onder Overig werden gegroepeerd (achteraf had dit niet persé gehoeven overigens).
Daarna maakte ik de volgende 3 DAX meetwaarden:
Aandeel Power BI in Land = CALCULATE(AVERAGE(‘Per Land'[Index]),FILTER(‘Per Land’,’Per Land'[Oplossing (groups)] = “Power BI”))
Aandeel Tableau in Land = CALCULATE(AVERAGE(‘Per Land'[Index]),FILTER(‘Per Land’,’Per Land'[Oplossing (groups)] = “Tableau”))
Aandeel Power BI vs Tableau = [Aandeel Power BI in Land] / ([Aandeel Power BI in Land]+[Aandeel Tableau in Land])
Hiermee had ik per land een aandeel van Power BI tov Tableau. Dus als index van Power BI = 50 en dat van Tableau = 25 , dan aandeel = 50/ (50+25) = 0,67.
Ik wilde qua kleurstelling dat als beiden gelijk zijn dat het dan wit is. En vanaf daar steeds donkerder naar uiteindelijk de Tablea of Power BI kleur.
Dat ging op zich goed, maar ik was niet tevreden met feit dat alle cijfers positief zijn. Wilde negatief getal als Tableau meer gezocht wordt dan Power BI (<0,5).
Ik probeerde eerst de custom visual Tornado. Maar dat werkt alleen met een dimensie in de legenda, niet met 1 meetwaarde.
Ik heb daarom workaround gebruikt om het middelpunt toch op 0 te krijgen en de volgende meetwaarde toegevoegd.
Skew Factor Power BI vs Tableau = ([Aandeel Power BI vs Tableau] -0.5)
Hierdoor had ik mooi een 0 punt. Ik plotte kaart en een staafgrafiek op basis van deze laatste meetwaarde. En definieerde conditionale opmaak met dus een divergent getal er tussen.
De getallen in de tooltip zeggen eigenlijk hierdoor niets. Maar omdat het me meer om relatief verhouding ging en niet om de exacte cijfers heb ik dit voor nu zo gelaten.
Tot slot heb ik onderaan de kaart nog een legenda gezet. Dit heb ik niet met Power BI gedaan. Ik heb een snapshot gemaakt van de conditinale opmaak kleuren. En deze als plaatje geplakt onderaan de grafiek. En links/rechts daarvan 2 tekstvakken toegevoegd voor Tableau en Power BI. Tja, soms moet je even creatief zijn.
Navigatie
Ik heb bovenin wat lege knoppen toegevoegd. En de actie “Page Navigation” gebruikt. Ik heb de actieve knop wit gemaakt, zodat deze mooi aansluit bij de achtergrond van de pagina. En de inactieve knoppen een geeltint gegeven. Bij hover heb ik de achtergrond op wit gezet, zodat je visuele feedback krijgt bij mouse over.
Conclusie en mogelijke verbeteringen
Ik ben zelf tevreden met het eindresultaat. Verbeterpunten zouden nog kunnen zijn om ook van andere belangrijke landen de trend data toe te voegen. Hierdoor zou er ook nog meer samenhang tussen de bladen gerealiseerd kunnen worden. Nu staan ze wat op zichzelf.
Maar ik vind het gaaf om deze mooie data nu in 1 dashboard bij elkaar te zien. En zal zeker eens per jaar dit nog eens verversen en kijken hoe de trends zich dan ontwikkelen.
Mocht je nog vragen of suggesties hebben, laat ze gerust hieronder weten.