Ďalšie výpočty časovej inteligencie
Existujú aj iné funkcie časovej inteligencie jazyka DAX, ktoré sa týkajú vrátenia jedného dátumu. O týchto funkciách sa dozviete tak, že ich použijete v dvoch rôznych scenároch.
Funkcie FIRSTDATE
DAX a LASTDATE
vrátia prvý a posledný dátum v aktuálnom kontexte filtra pre zadaný stĺpec dátumov.
Vypočítanie nových výskytov
Ďalším využitím funkcií časovej inteligencie je spočítanie nových výskytov. Nasledujúci príklad znázorňuje, ako môžete vypočítať počet nových zákazníkov za určité časové obdobie. Nový zákazník sa započítava do časového obdobia, v ktorom uskutočnil svoj prvý nákup.
Vašou prvou úlohou je pridať nasledujúcu mierku do tabuľky Sales (Predaj ), ktorá vypočíta počet jednotlivých zákazníkov obdobia od začiatku do súčasnosti (LTD). Od začiatku do súčasnosti znamená od počiatočného dátumu až do posledného dátumu v kontexte filtra. Naformátujte mierku ako celé číslo pomocou oddeľovača tisícok.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Do vizuálu matice pridajte mierku Zákazníci LTD. Všimnite si, že sa vypočíta počet jednotlivých LTD zákazníkov až do konca každého mesiaca.
Funkcia DATESBETWEEN
vráti tabuľku obsahujúcu stĺpec dátumov, ktorý sa začína daným počiatočným dátumom a pokračuje až do daného koncového dátumu. Keď má počiatočný dátum hodnotu BLANK (je prázdny), použije sa prvý dátum v stĺpci dátumov. (Naopak, keď má dátum ukončenia hodnotu BLANK, použije sa posledný dátum v stĺpci dátumov.) V tomto prípade je dátum ukončenia určený funkciou MAX, ktorá vráti posledný dátum v kontexte filtra. Preto, ak je mesiac august 2017 v kontexte filtra, funkcia MAX vráti dátum 31. august 2017 a DATESBETWEEN
funkcia vráti všetky dátumy až do 31. augusta 2017.
Potom môžete upraviť mierku tak, že ju premenujete na Noví zákazníci a pridáte jej druhú premennú na uloženie počtu jednotlivých zákazníkov pred časovým obdobím v kontexte filtra. Klauzula RETURN
teraz od ltd zákazníkov odčíta túto hodnotu, aby vytvorila výsledok, čo je počet nových zákazníkov v časovom období.
New Customers =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
VAR CustomersPrior =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MIN('Date'[Date]) - 1
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD - CustomersPrior
V prípade premennej CustomersPrior si všimnite, že DATESBETWEEN
funkcia obsahuje dátumy až do prvého dátumu v kontexte filtra mínus jeden. Keďže služba Microsoft Power BI interne ukladá dátumy ako čísla, môžete pripočítať alebo odčítať čísla, aby sa došlo k posunu dátumu.
Výpočty snímok
Príležitostne sa údaje faktov ukladajú ako snímky v čase. Medzi bežné príklady patria množstvá zásob inventára alebo zostatky na konte. Snímka hodnôt sa načíta do tabuľky na periodickej báze.
Pri vytváraní súhrnu hodnôt snímok (ako sú množstvá zásob inventára) môžete sumarizovať hodnoty v rámci ľubovoľnej dimenzie okrem dátumu. Zmysluplný súhrn vytvoríte vtedy, ak pridáte množstvo zásob v rámci jednotlivých kategórií produktov, no nie vtedy, ak pridáte množstvo zásob v rámci obdobia dátumov. Pridanie včerajšieho množstva zásob k dnešnému množstvu zásob nie je užitočnou operáciou (ibaže by ste chceli vypočítať ich priemer).
Pri vytváraní súhrnu tabuliek snímok sa vzorce mierky môžu oprieť o funkcie časovej inteligencie jazyka DAX, ktoré vynútia filter jedného dátumu.
V nasledujúcom príklade budete skúmať scenár pre spoločnosť Adventure Works. Prepnite na zobrazenie modelu a vyberte diagram modelu Inventár.
Všimnite si, že diagram zobrazuje tri tabuľky: Produkt, Dátum a Inventár. V tabuľke Inventár sú uložené snímky zostatkov jednotiek pre každý dátum a produkt. Dôležité je, že tabuľka neobsahuje žiadne prázdne dátumy a žiadne duplicitné položky pre produkt v rovnakom dátume. Tiež treba spomenúť, že posledný záznam snímky je uložený pre dátum 15. júna 2020.
Teraz sa prepnite na zobrazenie zostavy a vyberte stranu 2 zostavy. Pridajte stĺpec UnitsBalance tabuľky Inventory do vizuálu matice. Jeho predvolená sumarizácia je nastavená na sčítanie hodnôt.
Táto konfigurácia vizuálu je príkladom toho, ako nesumarizovať hodnotu snímky. Pridávanie denných zostatkov snímok spolu nevypočíta zmysluplný výsledok. Odstráňte preto pole UnitsBalance z vizuálu matice.
Teraz pridáte do tabuľky Inventory mierku, ktorá sčíta hodnotu poľa UnitsBalancepre jeden dátum. Dátum bude posledným dátumom každého časového obdobia. Dosiahne sa použitím LASTDATE
funkcie . Naformátujte mierku ako celé číslo pomocou oddeľovača tisícok.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Poznámka
Všimnite si, že vzorec mierky SUM
používa funkciu . Agregačnú funkciu je potrebné použiť (mierky nepovoľujú priame odkazy na stĺpce), ale vzhľadom na to, že pre každý produkt existuje iba jeden riadok, SUM
bude funkcia fungovať iba v jednom riadku.
Do vizuálu matice pridajte mierku Množstvá zásob na sklade. Hodnota pre každý produkt je teraz založená na zostatku posledných zaznamenaných jednotiek pre každý mesiac.
Mierka vráti hodnoty BLANK pre jún 2020, pretože pre posledný dátum v júni neexistuje žiadny záznam. Podľa údajov sa tak ešte nestalo.
Filtrovanie podľa posledného dátumu v kontexte filtra má neodmysliteľné problémy: Dátum zaznamenania nemusí existovať, pretože ešte nenastal alebo pravdepodobne preto, že zostatky zásob sa nezaznamenávajú cez víkendy.
Ďalším krokom je úprava vzorca mierky s cieľom určiť posledný dátum, ktorý nemá prázdne pole výsledku, a potom filtrovať údaje podľa tohto dátumu. Túto úlohu môžete splniť pomocou LASTNONBLANK
funkcie DAX.
Pomocou tejto definície mierky môžete upraviť mierku Množstvá zásob na sklade.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
Vo vizuáli matice si všimnite hodnoty pre jún 2020 a celkový súčet (predstavujúci celý rok).
Táto LASTNONBLANK
funkcia je iteračnou funkciou. Vráti posledný dátum, na základe ktorého sa vypočíta výsledok, ktorý nemá hodnotu BLANK. Tento výsledok dosiahnete zopakovaním všetkých dátumov v kontextovom filtri v zostupnom chronologickom poradí. (Naopak, FIRSTNONBLANK
iteruje vo vzostupnom chronologickom poradí.) Pre každý dátum sa vyhodnotí odovzdaný výraz. Keď sa vyskytne výsledok, ktorý nie je prázdny, funkcia vráti dátum. Tento dátum sa potom použije na filtrovanie CALCULATE
funkcie.
Poznámka
Funkcia LASTNONBLANK
vyhodnotí svoj výraz v kontexte riadka. Funkcia CALCULATE
sa musí použiť na prechod kontextu riadka na filtrovanie kontextu na správne vyhodnotenie výrazu.
Teraz by ste v tabuľke Inventár mali skryť stĺpec UnitsBalance. Zabránite tak tomu, aby autori zostáv nevhodne sumarizovali zostatky jednotiek snímok.
Potrebujete pomoc? Pozrite si nášho sprievodcu riešením problémov alebo odošlite konkrétne pripomienky nahlásením problému.