12.2024 | dax | power bi | dax obsługa dat
DAX (Data Analysis Expressions) oferuje potężne narzędzia do pracy z datami, które są kluczowe w analizie biznesowej. Ten przewodnik pomoże Ci zrozumieć i efektywnie wykorzystywać funkcje czasowe w DAX.
// Dzisiejsza data
TODAY()
// Aktualna data i czas
NOW()
// Tworzenie daty z komponentów
DATE(rok, miesiąc, dzień)
// Data z tekstu
DATEVALUE("2024-01-01")
// Rok z daty
YEAR('Tabela'[Data])
// Miesiąc z daty
MONTH('Tabela'[Data])
// Dzień z daty
DAY('Tabela'[Data])
// Kwartał
QUARTER('Tabela'[Data])
// Numer tygodnia
WEEKNUM('Tabela'[Data])
// Dodawanie dni
DATEADD('Tabela'[Data], 7, DAY)
// Dodawanie miesięcy
DATEADD('Tabela'[Data], 1, MONTH)
// Dodawanie lat
DATEADD('Tabela'[Data], 1, YEAR)
// Koniec miesiąca
EOMONTH('Tabela'[Data], 0)
Kalendarz =
VAR MinData = MIN('Fakty'[Data])
VAR MaxData = MAX('Fakty'[Data])
RETURN
ADDCOLUMNS(
CALENDAR(MinData, MaxData),
"Rok", YEAR([Date]),
"Miesiąc", MONTH([Date]),
"DzieńTygodnia", WEEKDAY([Date], 2),
"NazwaMiesiąca", FORMAT([Date], "mmmm"),
"RokMiesiąc", FORMAT([Date], "yyyy-mm"),
"Kwartał", "Q" & QUARTER([Date])
)
KalendarzZaawansowany =
VAR MinData = MIN('Fakty'[Data])
VAR MaxData = MAX('Fakty'[Data])
RETURN
ADDCOLUMNS(
CALENDAR(MinData, MaxData),
"Rok", YEAR([Date]),
"Miesiąc", MONTH([Date]),
"DzieńTygodnia", WEEKDAY([Date], 2),
"NazwaMiesiąca", FORMAT([Date], "mmmm"),
"RokMiesiąc", FORMAT([Date], "yyyy-mm"),
"Kwartał", "Q" & QUARTER([Date]),
"RokFiskalny",
VAR MiesiacFiskalny = MONTH([Date])
RETURN IF(
MiesiacFiskalny >= 7,
YEAR([Date]) + 1,
YEAR([Date])
),
"KwartałFiskalny",
VAR MiesiacFiskalny = MONTH([Date])
RETURN "FQ" & ROUNDUP((MOD(MiesiacFiskalny + 5, 12) + 1) / 3, 0),
"JestDzieńRoboczy",
NOT(WEEKDAY([Date], 2) IN {6, 7})
)
// Sprzedaż w poprzednim miesiącu
SprzedażPoprzedniMiesiąc =
CALCULATE(
[Sprzedaż],
DATEADD('Kalendarz'[Data], -1, MONTH)
)
// Sprzedaż rok temu
SprzedażRokTemu =
CALCULATE(
[Sprzedaż],
SAMEPERIODLASTYEAR('Kalendarz'[Data])
)
// Zmiana procentowa rok do roku
ZmianaRokDoRoku =
VAR SprzedażBieżąca = [Sprzedaż]
VAR SprzedażPoprzednia = [SprzedażRokTemu]
RETURN
DIVIDE(
SprzedażBieżąca - SprzedażPoprzednia,
SprzedażPoprzednia,
BLANK()
)
// Narastająco w roku
SprzedażNarastającoRok =
CALCULATE(
[Sprzedaż],
DATESYTD('Kalendarz'[Data])
)
// Narastająco w kwartale
SprzedażNarastającoKwartał =
CALCULATE(
[Sprzedaż],
DATESQTD('Kalendarz'[Data])
)
// Narastająco w miesiącu
SprzedażNarastającoMiesiąc =
CALCULATE(
[Sprzedaż],
DATESMTD('Kalendarz'[Data])
)
// Prosty YoY
ZmianaRoR =
DIVIDE(
[Sprzedaż] - [SprzedażRokTemu],
[SprzedażRokTemu],
BLANK()
)
// YoY z wieloma miarami
AnalizaRoR =
VAR SprzedażBieżąca = [Sprzedaż]
VAR SprzedażPoprzednia = [SprzedażRokTemu]
VAR Zmiana = SprzedażBieżąca - SprzedażPoprzednia
VAR ZmianaProc = DIVIDE(Zmiana, SprzedażPoprzednia, BLANK())
RETURN
SWITCH(
TRUE(),
ZmianaProc > 0.1, "Znaczący wzrost",
ZmianaProc > 0, "Wzrost",
ZmianaProc < -0.1, "Znaczący spadek",
ZmianaProc < 0, "Spadek",
"Bez zmian"
)
// YoY z uwzględnieniem dni roboczych
ZmianaRoRSkorygowana =
VAR DniRoboczeBieżące =
CALCULATE(
COUNTROWS('Kalendarz'),
'Kalendarz'[JestDzieńRoboczy] = TRUE
)
VAR DniRoboczePoprzednie =
CALCULATE(
COUNTROWS('Kalendarz'),
'Kalendarz'[JestDzieńRoboczy] = TRUE,
SAMEPERIODLASTYEAR('Kalendarz'[Data])
)
VAR SprzedażDzienna = DIVIDE([Sprzedaż], DniRoboczeBieżące)
VAR SprzedażDziennaPoprzednia =
DIVIDE([SprzedażRokTemu], DniRoboczePoprzednie)
RETURN
DIVIDE(
SprzedażDzienna - SprzedażDziennaPoprzednia,
SprzedażDziennaPoprzednia,
BLANK()
)
// Moving Annual Total (MAT)
MAT =
CALCULATE(
[Sprzedaż],
DATESINPERIOD(
'Kalendarz'[Data],
LASTDATE('Kalendarz'[Data]),
-12,
MONTH
)
)
// Moving Quarter Total (MQT)
MQT =
CALCULATE(
[Sprzedaż],
DATESINPERIOD(
'Kalendarz'[Data],
LASTDATE('Kalendarz'[Data]),
-3,
MONTH
)
)
// Średnia krocząca 3-miesięczna
ŚredniaKrocząca3M =
AVERAGEX(
DATESINPERIOD(
'Kalendarz'[Data],
LASTDATE('Kalendarz'[Data]),
-3,
MONTH
),
[Sprzedaż]
)
// Indeks sezonowości
IndeksSezonowości =
VAR ŚredniaMiesięczna =
CALCULATE(
AVERAGE([Sprzedaż]),
ALL('Kalendarz')
)
RETURN
DIVIDE(
[Sprzedaż],
ŚredniaMiesięczna,
BLANK()
)
// Wykrywanie szczytów sprzedaży
SzczytSprzedaży =
VAR MaxSprzedaż =
CALCULATE(
MAX([Sprzedaż]),
ALL('Kalendarz')
)
RETURN
IF(
[Sprzedaż] = MaxSprzedaż,
"Szczyt",
"Normal"
)
// Średnia dzienna sprzedaż
ŚredniaDziennaSprzedaż =
VAR DniRobocze =
CALCULATE(
COUNTROWS('Kalendarz'),
'Kalendarz'[JestDzieńRoboczy] = TRUE
)
RETURN
DIVIDE(
[Sprzedaż],
DniRobocze,
BLANK()
)
Efektywna praca z datami w DAX wymaga:
Wdrażam rozwiązania analityczne, buduję raporty zarządcze i pomagam zrozumieć dane.
Korzystam z Google Marketing Cloud, Microsoft Power BI, Google Cloud oraz Python.
Pracowałem m.in. dla Credit Suisse, Phonak, Hansaton, Unitron, Nestle, IBM, Play.
Jestem współtwórcą grupy Hexe Capital SA.
Zapraszam do lektury i współpracy.
Krzysztof Surowiecki
Chcę porozmawiać o współpracy →Moje certyfikaty