Kontrola kontextu filtru
Funkce VALUES
DAX umožňuje vzorcům určit, jaké hodnoty jsou v kontextu filtru.
Syntaxe VALUES
funkce je následující:
VALUES(<TableNameOrColumnName>)
Funkce vyžaduje předání odkazu na tabulku nebo na sloupec. Při předání odkazu na tabulku se vrátí objekt tabulky se stejnými sloupci, které obsahují řádky pro to, co je v kontextu filtru. Při předání odkazu na sloupec se vrátí tabulka s jedním sloupcem jedinečných hodnot, které jsou v kontextu filtru.
Funkce vždycky vrací objekt tabulky a tabulka může obsahovat více řádků. Pokud tedy chcete otestovat, jestli je konkrétní hodnota v kontextu filtru, musí vzorec nejprve otestovat, že VALUES
funkce vrací jeden řádek. S tímto úkolem vám můžou pomoct dvě funkce: funkce jazyka HASONEVALUE
SELECTEDVALUE
DAX a .
Funkce HASONEVALUE
vrátí TRUE
, když je odkaz na daný sloupec vyfiltrován na jednu hodnotu.
Funkce SELECTEDVALUE
zjednodušuje úlohu určení, co může být jedna hodnota. Když funkci předáte odkaz na sloupec, vrátí jednu hodnotu. Pokud se v kontextu filtru nachází více hodnot, funkce vrátí hodnotu BLANK (případně alternativní hodnotu, kterou předáte funkci).
V následujícím příkladu použijete HASONEVALUE
funkci . Do tabulky Sales přidejte následující míru, která vypočítá provizi z prodeje. Všimněte si, že ve společnosti Adventure Works je provize 10 procent výnosů pro všechny země/oblasti s výjimkou USA. Ve Spojených státech mají prodejci provizi 15 procent. Míru naformátujte jako měnu se dvěma desetinnými místy a pak ji přidejte do vizuálu tabulky, který najdete v sestavě na stránce°3.
Sales Commission =
[Revenue]
* IF(
HASONEVALUE('Sales Territory'[Country]),
IF(
VALUES('Sales Territory'[Country]) = "United States",
0.15,
0.1
)
)
Všimněte si, že výsledek celkové provize z prodeje (Sales Comission) je BLANK. Důvodem je to, že více hodnot je v kontextu filtru pro sloupec Country (Země ) v tabulce Sales Territory (Prodejní oblast ). V tomto případě funkce vrátí hodnotu FALSE
, což vede k tomu, HASONEVALUE
že míra Revenue se vynásobí hodnotou BLANK (hodnota vynásobená hodnotou BLANK je BLANK). Pokud chcete získat součet, musíte použít funkci iterátoru, které se budeme podrobněji věnovat dále v tomto modulu.
K otestování stavu filtru můžete použít další tři funkce:
-
ISFILTERED
– Vrátí,TRUE
když je přímo filtrován předaný odkaz na sloupec. -
ISCROSSFILTERED
– Vrátí,TRUE
když je předaný odkaz na sloupec nepřímo filtrován. Sloupec se filtruje křížově, když filtr použitý u jiného sloupce ve stejné (nebo související) tabulce ovlivní odkazovaný sloupec tím, že ho vyfiltruje. -
ISINSCOPE
– Vrátí,TRUE
pokud je předaný odkaz na sloupec úroveň v hierarchii úrovní.
Vraťte se na stránku 2 sestavy a potom upravte definici míry Revenue % Total Country (Výnosy v procentech celkové země), abyste mohli otestovat, že sloupec Region (Oblast) v tabulce Sales Territory (Prodejní oblast ) je v oboru. Pokud není v rozsahu, výsledkem míry by měla být hodnota BLANK.
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
IF(
ISINSCOPE('Sales Territory'[Region]),
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
)
V maticovém vizuálu si všimněte, že hodnoty Revenue % Total Country (Celkové % výnosů podle země) se teď zobrazí, jen když bude oblast v rozsahu.