Funkcje sumowania w czasie (skumulowane)
Sumowanie w czasie czy to w wersji Month to date czy też Year to date nigdy nie było prostsze w Power BI. Wydaje mi się, że w tej chwili DAX oferuje niektóre funkcje prostsze od Excela. Jak zatem opracować kumulatywne sumy w czasie? Z pomocą przychodzi kilka funkcji w DAX, które dziś omówimy.
Wróćmy do naszego testowego zbioru Financial Sample (oferowany w Power BI).

W raporcie pojawiła się nowa wizualizacja o nazwie Sales in time. Prezentuje ona rozkład sprzedaży w czasie. Formuła Current Sales znana z poprzedniego wpisu prezentuje sprzedaż z danego miesiąca. Poniżej miara dla przypomnienia:
_CurrentSales=
SUM(
fFinancials[Sales]
)
Wyłączyłem relacje pomiędzy filtrami daty, a wykresem miesięcy. Seria YTD Sales prezentuje skumulowaną wartość sprzedaży dla danego roku, natomiast QTD Sales prezentuje skumulowaną wartość sprzedaży w kwartale. Jak zauważysz każdy kolejny miesiąc zawiera sumę poprzedniego plus aktualnego w danym roku/kwartale. Jak do tego dojść? DAX oferuje zbiór konkretnych funkcji sumowania w czasie:
TOTALMTD – skumulowana suma wartości dla miesiąca
TOTALQTD – skumulowana suma wartości dla kwartału
TOTALYTD – skumulowana suma wartości dla roku
Jako że nasz zbiór zawiera dane miesięczne ograniczyłem się do wykorzystania dwóch miar (QTD i YTD), choć ich opracowanie jest identyczne. Jak wygląda funkcja TOTALYTD od środka?
TOTALYTD=
(
<wyrażenie>,
,
[filtr],
[koniec roku]
)
W miejscu wyrażenia wpisujemy wartość, którą chcemy skumulować (zazwyczaj suma). Kolejnym argumentem jest wskazanie kolumny dat, którą będziemy się posługiwać w celu skumulowania wartości. Filtr jest dodatkowym argumentem (opcjonalnym). Koniec roku choć jest opcjonalny, może być użyteczny – w przypadku raportowania finansowego, gdzie rok obrachunkowy kończy się w innym miesiącu niż grudniu możemy wskazać, który miesiąc wskazuje na ostatni w roku obrachunkowym. W przypadku gdyby rok obrachunkowy kończyłby się w czerwcu, moja formuła wyglądałaby jak poniżej:
_TotalYTDSales =
TOTALYTD(
[_CurrentSales],
'Calendar'[Date],
ALL('Calendar'[Date]),
"6/30"
)
Efekt na zrzucie ekranu poniżej:

Funkcje czasu w DAX są dość intuicyjne i podstawowe przekształcenia nie wymagają zaawansowanej znajomości DAX. Już niedługo omówimy na blogu bardziej złożone przypadki skumulowanych wartości.