Curabis

Atomkrig: Budget vs Salg i Power BI

Arbejder man med budgetter i Power BI, kommer man ikke udenom at mange budgetter er oprettet på årsbasis, hvorimod opfølgningen sker på ugeplan eller på månedsplan. Mange virksomheder anvender en fordelingsnøgle på deres budgetter, da det ofte er lettere at beregne mange poster – med udgangspunkt i samme fordeling – fremfor at indtaste hvert tal på månedsbasis.

Når man arbejder med PowerBI og datostyrede sammentællinger kan denne ”atomfordeling” godt give en udfordring. I de fleste økonomistyringsprogrammer ligger budgettallet på årsbasis nemlig også på årets første dag.

 

Varegruppe

2017

   Æbler

50.000,-

   Pærer

30.000,-

   Appelsiner

60.000,-

I alt varegrupper:

140.000,-

Sådan ser budgetter ofte ud, hvilket betyder at mange virksomheder med detaljeret budgetopfølgning ofte vælger at bygge en fordelingsnøgle på budgettet.

 

 

Jan

Feb

Mar

Apr

Maj

Jun

Jul

Aug

Sep

Okt

Nov

Dec

2017

8%

7%

9%

10%

11%

6%

5%

7%

8%

8%

11%

9%

 

Baseret på disse tal kan vi dermed forholdsvis let beregne at vi i Juli fx har budgetteret med salg af 2.500,- i æbler, 1.500,- i pærer og at 3.000,- af vore omsætning vil komme fra appelsiner. I PowerBI bliver datamodellen lidt mere avanceret, idet vi gerne vil matche disse tal op mod omsætning, som jo genereres på daglig plan.:

Prøv rapporten her:

Fordeling af atomer er nøgleord

Der er kort sagt to udfordringer. Vi skal atomisere vores budget, samt vi skal samle vore salgstal til passende perioder, så vi kan slice og dice på kryds og på tværs i vores datamodel.

How to:

Jeg har oprettet en række tabeller i Query editoren. Alle budgettabeller er manuel kreeret, da jeg jo kun har til formål at præsentere teknikken.

Power BI Budget table

Jeg har til gengæld oprettet budgettal fra både 2016 og 2017, så man kan se at rapporten faktisk godt kan slice og dice på tværs af perioder. Ydermere har jeg oprettet en datotabel, som dækker over samtlige datoer i de to år. Manglende datoer i fx sidste år, vil resultere i fejlbeskeder når measures oprettes. Hvordan man opretter datotabeller har jeg beskrevet i en tidligere blog. I dette eksempel har jeg desuden bygget en mulighed for at slice i perioder. Dette kun af præsentationsmæssige årsager. Grundlæggende drejer det her indlæg sig om at behandle teknikken i håndteringen af atomstørrelsen.

 

Næste tabel er vores budgetfordeling:

Power Bi fordeling

Og nu kommer udfordringen. I budgettabellen ligger alle fordelingsnøgler i felter. Vi har dog behov for at kunne linke disse tal til en månedsstartdato.

I datotabellen skal der oprettes følgende kolonner:

 

StartMåned = DAY('Dato'[Dato])=1

I år = YEAR('Dato'[Dato]) = YEAR(TODAY())

BudgetAtomDato = DATE(YEAR('Dato'[Dato]);1;1)

 

Datotabellen skal herefter ligne følgende:

Power BI Datotabel

Når dette er udført, kan vi oprette en ny tabel. Brug tabelnavn Atomstartdato og anvend følgende DAX udtryk:

 

AtomStartDato = FILTER('Dato';'Dato'[StartMåned])

 

Formlen opretter en tabel på baggrund af datotabellen, men filtrerer tabellen til feltet StartMåned, som vi oprettede tidligere. Herefter skal vi hente fordelingsnøglen ind i den nye datotabel.

Jeg viser her to teknikker. Den ene, hvor jeg slår budgetfordelingen op, og den anden, hvor jeg via datoens år afgrænser på budgetfordelingsnøglen til det pågældende år.

 

Fordelingsnøgle = SWITCH(month([Dato]); 
  1; LOOKUPVALUE('Budgetfordeling'[Januar]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  2; LOOKUPVALUE('Budgetfordeling'[Februar]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  3; LOOKUPVALUE('Budgetfordeling'[Marts]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  4; LOOKUPVALUE('Budgetfordeling'[April]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  5; LOOKUPVALUE('Budgetfordeling'[Maj]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  6; LOOKUPVALUE('Budgetfordeling'[Juni]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  7; LOOKUPVALUE('Budgetfordeling'[Juli]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  8; LOOKUPVALUE('Budgetfordeling'[August]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
  9; LOOKUPVALUE('Budgetfordeling'[September]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
 10; LOOKUPVALUE('Budgetfordeling'[Oktober]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
 11; LOOKUPVALUE('Budgetfordeling'[November]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number")); 
 12; LOOKUPVALUE('Budgetfordeling'[December]; 'Budgetfordeling'[Kode]; format(year(AtomStartDato[Dato]);"General Number"));
0 )

Power BI Lookupvalue

Som du kan se, så er de enkelte værdier fra budgetfordelingen nu linket op mod måneder, hvilket giver mulighed for anvendelse af Measures.

Inden vi opretter measures, skal vi oprette tabelrelationer. Den eneste relation jeg skal beskrive for at få dette eksempel til at virke er følgende:

Power BI reference

Atomstartdato og Dato tabellerne skal linkes via feltet dato.

Nu er vi klar til at oprette det første measure:

 

Budgetfordeling = sum(AtomStartDato[Fordelingsnøgle])

 

Det næste Measure er selve budget. Brug dertil følgende:

 

Budget = CALCULATE (   
  SUM ( Budget[Beløb] );
  FILTER ( ALL ( Budget[Budget] ); Budget[Budget] = year(MAX ( 'Dato'[Dato] )))) * [Budgetfordeling]

Jeg har også oprettet en tabel med produkter, samt en konstrueret tabel, som har oprettet salgstal vie en tilfældighedsgenerator.


God fornøjelse :-)

Drop en besked