Curabis

Dynamisk datotabel med DAX

I dette indlæg vil jeg forklare, hvordan man opretter datoperioder i Microsoft Power BI. Power BI er et rapporteringsværktøj, som giver dig mulighed for at visualisere dine data og dermed vise dem i grafer. Dermed har du med det samme overblik over, hvordan det går i din virksomhed.

 

Kort sagt, så giver Power BI dig mulighed for at analysere og visualisere på samme tid. Men i de fleste økonomiske rapporter er der behov for analyser på baggrund af dato og datoperioder. Datoperioder kan i Power BI bygges på to forskellige måder. Den ene via DAX-kommandoer, den anden via et script i Power Query. Når rapporten ligger i skyen, er det afgørende, at datotabellen indeholder dynamiske elementer. Det vil jeg komme ind på i dette indlæg. 


Story:

Vi skal oprette en datotabel, som fremadrettet vedligeholder datotabellen i Power BI løbende. Vi vil gerne have løbende datoer, som begynder med den 1. januar sidste år og slutter med den 31.12 i det kommende år. Datotabellen skal dermed løbende tilpasse sig den nye dato og efter årsskiftet automatisk slette alle datoer, som ligger længere tilbage end 1. januar sidste år.

Løsning:

Til formålet kan vi anvende DAX-kommandoen DATE(YYYY;MM;DD). DATE i DAX skal kaldes med tre parametre. I stedet for YYYY skal der indsættes et heltal for det år, vi ønsker som startdato for vores datoberegning. For at gøre denne parameter dynamisk, kan vi anvende YEAR(dato) funktionen i DAX. YEAR skal kaldes med en dato. DAX indeholder en funktion, som dynamisk returnerer dags dato. Den funktion er TODAY(), som skal kaldes uden parametre. Med udgangspunkt i denne beskrivelse, kan vi dermed bygge en funktion, som returnerer den 1. januar sidste år.

DATE(YEAR(TODAY())-1;1;1)   
                                                                                                                  

Læg mærke til, at jeg trækker 1 fra min YEAR(TODAY()) funktion, hvilket automatisk vil sætte år til igangværende år – 1. (Nu vi er i 2017, vil systemet dermed returnere 2016). Måned i DATE funktionen sætter jeg til den 1. Det samme gælder DAY. Dermed returnerer funktionen automatisk den 1. januar 2016, når vi kalder funktionen i løbet af hele 2017. det samme gælder slutdatoen for vores periode. Her skal det som beskrevet blive den 31. december 2018, når funktionen anvendes i løbet af 2017.


DATE(YEAR(TODAY())+1;12;31) 

For at kunne vise alle datoer i igangværende periode, skal vi anvende den indbyggede DAX-funktion CALENDAR(Startdato;Slutdato). Funktionen returnerer en hel tabel af datoer, som ligger mellem den ønskede startdato og slutdato.



Dynamisk dato i med DAX

Som du kan se, har jeg tilføjet tre yderligere kolonner til tabellen: En kolonne for År, en for Måned og en for Kvartal. Funktionen for Kvartal er ikke dokumenteret i DAX, men fungerer rent faktisk.

Du kan kopiere hele udtrykket her:

 

Dato = ADDCOLUMNS (
                            CALENDAR (DATE(YEAR(TODAY())-1;1;1); DATE(YEAR(TODAY())+1;12;31));
                            "År"; YEAR ( [Dato] );
                            "Måned"; MONTH( [Dato]) ;
                            "Kvartal" ; INT(FORMAT([Dato]; "q"))
)



Vær opmærksom på, at Power BI kan køre i forskellige sprog. Ovenfor anførte udtryk gælder for den danske installation. Hvis du bruger den engelske version, skal du erstatte [Dato] med [Date], før det virker.

Drop en besked