Contact us

Pošlji
povpraševanje

Zakladnica znanja

  • Predzanje

  • Kategorije

May 18, 2020

Dinamični koledar v Power BI z DAX funkcijo CALENDARAUTO()

Avtor: Branka Trifunović

V članku je uporabljen Power BI Desktop verzije 2.76.5678.782 (januar 2020).

Koledar je najpomembnejša tabela v podatkovnem modelu Power BI. Ogledali smo si že, kako izgleda Koledar v Power BI in Dinamični koledar v Power Queryu z M funkcijo. Danes si bomo ogledali izdelavo dinamičnega koledarja v Power BI s pomočjo po meri narejene DAX funkcije.

Funkcija CALENDARAUTO()

Formule, s katerimi v Power BI urejamo podatke, pišemo v jeziku DAX. Sintaksa je zelo podobna tisti, ki jo že poznamo iz Excela. Funkcija, ki jo uporabimo za ustvarjanje koledarja, je CALENDARAUTO(). Funkcija samodejno zazna najstarejši in najnovejši datum v našem podatkovnem modelu, in generira seznam vseh zaporednih datumov med začetkom najmanjšega in koncem največjega leta. Če sta v podatkovnem modelu ta datuma 3. april 2000 in 20. november 2019, bo CALENDARAUTO() ustvaril zaporedje datumov med 1.1.2000 in 31.12.2019.

Podatkovna tabela.

Koledar ustvarimo tako, da kliknemo na New Table in v vnosno polje za formulo vpišemo Calendar = CALENDARAUTO() ter potrdimo z Enter. Dobimo novo tabelo z imenom Calendar, ki vsebuje vse datume v našem modelu.

Ustvarjanje preprostega koledarja s funkcijo CALENDARAUTO().

Običajno želimo poznati še atribute datuma, kot so dan, mesec, kvartal in leto. Atributi nam omogočajo, da filtriramo naše podatke. Ko bomo npr. želeli vedeti, kakšni stroške smo imeli v letu 2019, bo Power BI uporabil koledarsko tabelo, s pomočjo katere bo filtriral vse datume, ki spadajo v leto 2019.

Vsakega od atributov lahko dodamo kot novo kolono v tabeli. Za atribut mesec bi izbrali New column in v vnosno polje za formulo vpisali Month = MONTH(Calendar[Date]).

Dodajanje atributov datuma v koledarsko tabelo.

Podobno bi storili za dan, teden, kvartal, številko tedna in podobno. Uporabili bi funkcije:

Quarter = QUARTER(Calendar[Date]),

WeekdayNo = WEEKDAY(Calendar[Date]),

WeekNo = WEEKNUM(Calendar[Date]).

DAX funkcija po meri

Vse ukaze, ki bi jih izvedli ročno, lahko zapišemo v funkcijo. Vsakič, ko želimo ustvariti koledarsko tabelo, torej lahko uporabimo funkcijo, ki v enem koraku ustvari tabelo vseh datumov in njegovih atributov. Funkcija je dokaj preprosta:

Calendar = ADDCOLUMNS ( CALENDARAUTO ();

“Year”; FORMAT([Date]; “yyyy”);

“MonthNo”; MONTH([Date]);

“Month”; FORMAT([Date];”MMM”);

“Quarter”; FORMAT([Date];”\QQ”);

“YearMonth”; FORMAT([Date];”YYYY-MM”);

“WeekdayNo”; WEEKDAY([Date];2); //1-Sun..Sat; 2-Mon..Sat

“Weekday”; FORMAT([Date];”ddd”);

“WeekNo”; WEEKNUM([Date]; 2);

“Week”; “W” & WEEKNUM([Date]; 2) )

Funkcija, s katero ustvarimo koledar v Power BI.

Uporabimo jo enako, kot smo uporabili funkcijo CALENDARAUTO(): izberemo New Table in v vnosno vrstico kopiramo zgornjo formulo. Dobimo naslednjo koledarsko tabelo:

Končni izgled koledarja.

Slabosti funkcije CALENDARAUTO(): datum in čas v Power BI

Čeprav je uporaba funkcije priročna in hitra, ima nekatere slabosti. Če imamo v modelu polje, ki vsebuje čas, bo funkcija te podatke prebrala kot datum 0.1.1900. Čas je namreč v Power BI modelu decimalno število, ki predstavlja delež dneva. Podobno je datum število, ki predstavlja število dni od 1.1.1900. Število 0,5 torej predstavlja čas 0.1.1900 ob 12h. Število 0 bi predstavljalo čas 00:00:00, število 1 pa 24:00:00. Če torej čas (število med 0 in 1) pretvorimo v datum, vedno dobimo 0.1.1900. Funkcija CALENDARAUTO() bo zato kot najmanjši datum v modelu vzela leto 1899. Dobili bomo ogromno koledarsko tabelo, ki bo po nepotrebnem upočasnjevala naš model.

Power BI tretira datume in čas kot števila in obratno. Zgoraj so v vseh treh stolpcih zapisana enaka števila, razlika je zgolj v formatiranju. Prvi stolpec je v formatu število, drugi v formatu datum, tretji pa v formatu čas.

Na podobno težavo lahko naletimo, če imamo v modelu podatek o rojstnih datumih. Spet bo funkcija sama prebrala najzgodnejši datum v celotnem modelu in ustvarila veliko koledarsko tabelo, v kateri bo večina datumov za naš model nepotrebnih.

Boljši način, da ustvarimo dinamični koledar, smo si ogledali v članku Dinamični koledar v Power Query z M funkcijo.

 

Kazalo