Použijte proměnné ke zlepšení vzorců DAX
Jako modelátor dat může být psaní a ladění některých DAX výpočtů náročné. Je běžné, že složité požadavky na výpočty často zahrnují psaní složených nebo složitých výrazů. Složené výrazy můžou zahrnovat použití mnoha vnořených funkcí a případně opakované použití logiky výrazů.
Použití proměnných ve vzorcích DAX vám může pomoct psát složitější a efektivnější výpočty. Proměnné můžou zlepšit výkon, spolehlivost, čitelnost a snížit složitost.
V tomto článku předvedeme první tři výhody pomocí ukázkové míry pro meziroční růst prodeje (YoY). (Vzorec pro meziroční růst prodeje je prodej daného období, minus prodej za stejné období v minulém roce, děleno prodejem za stejné období v minulém roce.)
Začněme následující definicí míry.
Sales YoY Growth % =
DIVIDE(
([Sales] - CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))),
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
)
Míra vytvoří správný výsledek, ale teď se podíváme, jak se dá vylepšit.
Zvýšení výkonu
Všimněte si, že vzorec opakuje výraz, který vypočítá "stejné období minulý rok". Tento vzorec je neefektivní, protože power BI vyžaduje, aby stejný výraz vyhodnotil dvakrát. Definici míry lze zefektivnit pomocí proměnné VAR.
Následující definice míry představuje zlepšení. Pomocí výrazu přiřadí výsledek z téhož období loňského roku proměnné s názvem SalesPriorYear. Proměnná se pak ve výrazu RETURN použije dvakrát.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
Opatření i nadále poskytuje správné výsledky a to s přibližně polovičním časem dotazu.
Zlepšení čitelnosti
V předchozí definici míry si všimněte, jak volba názvu proměnné usnadňuje pochopení výrazu RETURN. Výraz je krátký a samopisný.
Zjednodušení ladění
Proměnné vám také mohou usnadnit ladění vzorce. Chcete-li otestovat výraz přiřazený k proměnné, dočasně přepíšete výraz RETURN pro výstup proměnné.
Následující definice míry vrátí pouze proměnnou SalesPriorYear. Všimněte si, jak „komentuje“ zamýšlený výraz RETURN. Tato technika umožňuje snadno to vrátit po dokončení ladění.
Sales YoY Growth % =
VAR SalesPriorYear =
CALCULATE([Sales], PARALLELPERIOD('Date'[Date], -12, MONTH))
RETURN
--DIVIDE(([Sales] - SalesPriorYear), SalesPriorYear)
SalesPriorYear
Snížení složitosti
V dřívějších verzích DAXse proměnné zatím nepodporovaly. Složité výrazy, které zavedly nové kontexty filtru, se vyžadovaly k použití funkcí EARLIER nebo EARLIESTDAX pro odkazování na kontexty vnějšího filtru. Modelování dat bohužel zjistilo, že tyto funkce jsou obtížně pochopitelné a používané.
Proměnné se vždy vyhodnocují mimo filtry, které výraz RETURN použije. Z tohoto důvodu při použití proměnné v upraveném kontextu filtru dosáhne stejného výsledku jako EARLIEST funkce. Použití funkcí EARLIER nebo EARLIEST je proto možné se vyhnout. To znamená, že teď můžete psát vzorce, které jsou méně složité a které jsou snadněji pochopitelné.
Představte si následující definici počítaného sloupce přidanou do tabulky Subcategory. Vyhodnotí pořadí pro každou podkategorii produktu na základě hodnot sloupce Subcategory Sales.
Subcategory Sales Rank =
COUNTROWS(
FILTER(
Subcategory,
EARLIER(Subcategory[Subcategory Sales]) < Subcategory[Subcategory Sales]
)
) + 1
Funkce EARLIER slouží k odkazování na hodnotu sloupce Subcategory Salesv kontextu aktuálního řádku.
Definici počítaného sloupce je možné vylepšit pomocí proměnné místo funkce EARLIER. Proměnná CurrentSubcategorySales ukládá hodnotu sloupce Subcategory Salesvkontextu aktuálního řádku a výraz RETURN ji používá v rámci upraveného filtračního kontextu.
Subcategory Sales Rank =
VAR CurrentSubcategorySales = Subcategory[Subcategory Sales]
RETURN
COUNTROWS(
FILTER(
Subcategory,
CurrentSubcategorySales < Subcategory[Subcategory Sales]
)
) + 1
Související obsah
- VAR DAX článek
- Výuková cesta: Použití DAX v Power BI Desktopu
- Otázky? Zkuste požádat komunitu Power BI o