Další výpočty s časovým měřítkem
Existují další funkce časového měřítka DAX, které zajišťují vrácení jediného data. Tyto funkce pochopíte, když je použijete ve dvou různých scénářích.
Funkce FIRSTDATE
a LASTDATE
jazyka DAX vrátí první a poslední datum v aktuálním kontextu filtru pro zadaný sloupec kalendářních dat.
Vypočet nových výskytů
Dalším použitím funkcí časového měřítka je výpočet nových výskytů. Následující příklad ukazuje, jak můžete vypočítat počet nových zákazníků za určité časové období. Nový zákazník se počítá za časové období, ve kterém realizoval první nákup.
Vaším prvním úkolem je přidat do tabulky Sales (Sales ) následující míru, která počítá počet jedinečných zákazníků od začátku životnosti (LTD). Od chvíle vzniku znamená od počátku času do posledního data v kontextu filtru. Naformátujte míru jako celé číslo s oddělovačem tisíců.
Customers LTD =
VAR CustomersLTD =
CALCULATE(
DISTINCTCOUNT(Sales[CustomerKey]),
DATESBETWEEN(
'Date'[Date],
BLANK(),
MAX('Date'[Date])
),
'Sales Order'[Channel] = "Internet"
)
RETURN
CustomersLTD
Přidejte do maticového vizuálu míru Customers LTD (Zákazníci od chvíle vzniku). Všimněte si, že výsledek ukazuje počet jedinečných zákazníků od chvíle vzniku do konce každého měsíce.
Funkce DATESBETWEEN
vrátí tabulku obsahující sloupec kalendářních dat, který začíná daným počátečním datem a pokračuje až do daného koncového data. Když je počáteční datum prázdné, použije se první datum ve sloupci data. (Když je prázdné koncové datum, použije se poslední datum ve sloupci data.) V tomto případě je koncové datum určeno funkcí MAX, která vrací poslední datum v kontextu filtru. Pokud je tedy měsíc srpen 2017 v kontextu filtru, vrátí funkce MAX 31. srpna 2017 a DATESBETWEEN
funkce vrátí všechna data až do 31. srpna 2017.
Dále upravíte míru přejmenováním na New Customers (Noví zákazníci). Potom přidáte druhou proměnnou pro uložení počtu jedinečných zákazníků před časovým obdobím v kontextu filtru. Klauzule RETURN
nyní odečte tuto hodnotu od zákazníků LTD, aby získala výsledek, což je počet nových zákazníků v časovém 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
U proměnné CustomersPrior si všimněte, že DATESBETWEEN
funkce v kontextu filtru zahrnuje kalendářní data do prvního data minus jedno. Protože Microsoft Power BI interně ukládá data jako čísla, můžete přidáním nebo odečtením čísla posunout datum.
Výpočty snímků
Občas se faktická data ukládají jako snímky v čase. Mezi běžné příklady patří úrovně skladových zásob nebo zůstatky účtů. Snímek hodnot se v pravidelných intervalech načítá do tabulky.
Při tvorbě souhrnů hodnot snímků (jako jsou úrovně skladových zásob) můžete hodnoty shrnout v jakékoli dimenzi kromě data. Přidáním množství skladových zásob k různým kategoriím produktů vznikne smysluplný souhrn, ale přidáním množství skladových zásob ke kalendářním datům nikoli. Přidání včerejší úrovně skladových zásob k dnešnímu množství není vhodná operace (pokud nechcete výsledek průměrovat).
Při vytváření tabulek souhrnných snímků mohou vzorce měr vycházet z funkcí časového měřítka DAX, aby vynutily filtr s jedním datem.
V následujícím příkladu se podíváte na scénář pro společnost Adventure Works. Přepněte do zobrazení modelu a vyberte diagram modelu Inventory (Skladové zásoby).
Všimněte si, že diagram znázorňuje tři tabulky: Produkt, Datum a Inventář. V tabulce Inventory se ukládají snímky zůstatků jednotek pro každé datum a produkt. Důležité je, že tabulka neobsahuje žádná chybějící kalendářní data a žádné duplicitní položky pro žádný produkt v konkrétní datum. Poslední záznam snímku je uložen pro datum 15. června 2020.
Nyní přepněte do zobrazení sestavy a vyberte stranu 2 sestavy. Přidejte sloupec UnitsBalance tabulky Inventory do maticového vizuálu. Jeho výchozí souhrn je nastaven na součet hodnot.
Tato konfigurace vizuálu je ukázkou toho, jak nedělat souhrn hodnot snímku. Součet denních zůstatků snímků nepřináší smysluplný výsledek. Proto z maticového vizuálu odeberte pole UnitsBalance.
Teď přidáte do tabulky Inventory míru, která sečte hodnotu UnitsBalancepro jedno datum. Datum bude poslední datum každého časového období. Dosáhnete toho pomocí LASTDATE
funkce. Naformátujte míru jako celé číslo s oddělovačem tisíců.
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTDATE('Date'[Date])
)
Poznámka
Všimněte si, že vzorec míry používá SUM
funkci . Je nutné použít agregační funkci (míry neumožňují přímé odkazy na sloupce), ale vzhledem k tomu, že pro každý produkt pro každé datum existuje pouze jeden řádek, SUM
bude funkce fungovat pouze na jednom řádku.
Přidejte do maticového vizuálu míru Stock on Hand (Dostupné skladové zásoby). Hodnota pro každý produkt teď vychází z posledního zaznamenaného jednotkového zůstatku za každý měsíc.
Míra vrací prázdné hodnoty pro červen 2020, protože pro poslední datum v červnu neexistuje žádný záznam. Podle dat tento den ještě neproběhl.
Filtrování podle posledního data v kontextu filtru má své vnitřní problémy: Je možné, že zaznamenané datum neexistuje, protože ještě neproběhlo, nebo možná proto, že se o víkendech nezaznamenávají zůstatky skladových zásob.
Dalším krokem je upravit vzorec míry, aby určil poslední datum, které není prázdné, a pak podle tohoto data filtrovat. Tohoto úkolu můžete dosáhnout pomocí funkce JAZYKA LASTNONBLANK
DAX.
Pomocí následující definice míry upravte míru Stock on Hand (Dostupné skladové zásoby).
Stock on Hand =
CALCULATE(
SUM(Inventory[UnitsBalance]),
LASTNONBLANK(
'Date'[Date],
CALCULATE(SUM(Inventory[UnitsBalance]))
)
)
V maticovém vizuálu si všimněte hodnot z června 2020 a celkového součtu (představuje celý rok).
Funkce LASTNONBLANK
je funkce iterátoru. Vrátí poslední datum, jehož výsledek není prázdný. Funkce toho dosáhne iterací všech kalendářních dat v kontextu filtru v sestupném chronologickém pořadí. (Naopak FIRSTNONBLANK
iteruje ve vzestupném chronologickém pořadí.) Pro každé datum vyhodnocuje předaný výraz. Když narazí na výsledek, který není prázdný, vrátí funkce příslušné datum. Toto datum se pak použije k filtrování CALCULATE
funkce.
Poznámka
Funkce LASTNONBLANK
vyhodnocuje svůj výraz v kontextu řádku. Funkce CALCULATE
se musí použít k přechodu kontextu řádku na kontext filtru, aby se výraz správně vyhodnotil.
Nyní byste měli skrýt sloupec UnitsBalance v tabulce Inventory. Zabráníte tak autorům sestav v nevhodném shrnutí jednotkových zůstatků snímků.