V květnu jsem měl na téma časových kalkulací přednášku na Techedu v Praze. Bohužel jsem s blogem prokrastinoval a dostávám se ke článku až nyní. Nicméně lepší pozdě, než nikdy :) Slíbil jsem, že na téma napíši související blog post. Samostatným časovým kalkulacím jsem se věnoval v následujícím článku http://www.neoral.cz/2015/06/powerpivot-dax-casove-funkce-1-cast.html Takže nyní přidám jen část o pokročilejších metodách. Konkrétně se bude jednat o práci s otevřeným obdobím. V následujícím blogu popíšu, jak se vypořádat s problémem, když se v čase mění den vůči kterému chci dělat meziroční srovnání.
Problém otevřeného období
Koukněme se na následující kontingenční tabulku
Internet sales je skutečnost, Internet LY minulý rok (last year), Internet VLY variance proti loňskému roku absolutní, hned vedle v procentech.
Rok 2008 je posledním rokem, který obsahuje data a neobsahuje data za kompletní rok. Dnes je 29.6 takže taky máme jen data za půl roku. No a je nesmysl na roční úrovni porovnávat uzavřený rok 2016 s půlkou roku 2017. Něco podobného právě dělá můj aktuální Excelový model.
Chtěl bych porovnávat jen proporciální část prodejů roku vztaženou ke dnešnímu dni.
V tabulce internet sales si můžu pomoci počítaným sloupcem, kde jednoduše skryji prodeje, které jsou po 29.6.
DAXový vzorec by vypadal následovně
=
IF (
VALUE ( MID ( [OrderDateKey], 5, 2 ) ) > MONTH ( TODAY () )
|| (
VALUE ( MID ( [OrderDateKey], 5, 2 ) ) = MONTH ( TODAY () )
&& VALUE ( RIGHT ( [OrderDateKey], 2 ) ) > DAY ( TODAY () )
),
BLANK (),
[SalesAmount]
)
OrderDateKey je datum ve formátu RRRRMMDD, funkcí mid řežu příslušnou část, kterou chci porovnat s měsícem/dnem z dneška.
Textově rozloženo VALUE ( MID ( [OrderDateKey], 5, 2 ) ) > MONTH ( TODAY () )
říká pokud je měsíc objednávky vyšší, než měsíc dnešního datumu
Nebo ||
(
VALUE ( MID ( [OrderDateKey], 5, 2 ) ) = MONTH ( TODAY () ) –měsíc je stejný
&& VALUE ( RIGHT ( [OrderDateKey], 2 ) ) > DAY ( TODAY () ) – den v měsíci je větší
)
vrátit prázdnou buňku, jinak vrátit skutečnost.
Pokud nad tímto vytvořím měřítko Internet Sales TD (To date /ke dnešku) jako
=SUM(‘FactInternetSales’[Sales TD detail])
A příslušné variance které umístím do následující kontingenční tabulky dostanu následující výstup
Sekce 1 mi zobrazuje prodeje prodeje za celé uzavřené období.
Sekce 2 jsou prodeje po dnešek, tedy 29.6.
Sekce 3 variance proti předchozímu roku v absolutních číslech za celé uzavřené období (VLY) a srovnání po dnešek VLY TD. Zde je to právě velmi zajímavé. Když kouknete na rok 2008, je rozdíl, jestli -20160 proti loňsku (způsobeno, neúplným rokem 2008). Nebo srovnávám srovnatelné se srovnatelným a zjišťuji, že jsem vlastně 6,7 milionu v plusu za stejné období od ledna do konce června.
Sekce 4 stejná jako 3, ale vyjádřená v procentech. Místo toho, aby firma byla -0,2 procenta ve ztrátě, je vlastně 221% v plusu a to je hodně velký rozdíl :)
Závěr
Pro potřeby analýzy je nutno srovnávat srovnatelné se srovnatelným. Nikoliv celý minulý rok s aktuálním rokem otevřeným. Logika by se dala aplikovat i na nižší úrovně časové hierarchie jako kvartály, měsíce, týdny dokonce i dny. V dnešním článku jsem Vám ukázal jak by se dalo vypořádat s tímto problémem pomocí počítaného sloupce. Dalo by se to vyřešit i přímo v Measure. Šlo mi v tuto fázi ale hlavně o onu myšlenku :) Příště se vrhnu na jiný problém při práci s časem a sice proměnnost vzorce pro meziroční srovnání.