Použití funkcí modifikátoru filtru
Při použití CALCULATE
funkce můžete předat funkce pro úpravu filtru, které umožňují dosáhnout více než přidávání samotných filtrů.
Odebrání filtrů
REMOVEFILTERS
K odebrání filtrů z kontextu filtru použijte funkci DAX jako CALCULATE
výraz filtru. Můžete odebrat filtry z jednoho nebo více sloupců nebo ze všech sloupců jedné tabulky.
Poznámka
Funkce REMOVEFILTERS
je relativně nová. V předchozích verzích jazyka DAX jste filtry odebrali pomocí funkce jazyka ALL
DAX nebo variant, včetně ALLEXCEPT
funkcí a jazyka ALLNOBLANKROW
DAX. Tyto funkce se chovají jako modifikátory filtru i jako funkce, které vracejí objekty tabulky s různými hodnotami. O těchto funkcích se teď zmiňujeme proto, že pravděpodobně narazíte na dokumentaci a ukázky vzorců, které pomocí nich filtry odebírají.
V následujícím příkladu přidáte do tabulky Sales novou míru, která vyhodnocuje míru Revenue,ale odebere filtry z tabulky Sales Territory . Naformátujte míru jako měnu se dvěma desetinnými místy.
Revenue Total Region = CALCULATE([Revenue], REMOVEFILTERS('Sales Territory'))
Do maticového vizuálu na stránce 2 v sestavě přidejte míru Revenue Total Region (Celkové výnosy podle oblasti). Matice vizuálu se seskupí podle tří sloupců tabulky Sales Territory u řádků: Group (Skupina), Country (Země) a Region (Oblast).
Všimněte si, že všechny hodnoty ve sloupci Revenue Total Region (Celkové výnosy podle oblasti) jsou stejné. Jedná se o hodnotu celkových výnosů.
I když tento výsledek sám o sobě není užitečný, když ho použijete jako jmenovatele v poměru, vypočítá procento celkového součtu. Proto nyní přepíšete definici míry Revenue Total Region (Celkové výnosy podle oblasti) následující definicí. (Tato nová definice změní název míry a deklaruje dvě proměnné. Nezapomeňte míru naformátovat jako procento se dvěma desetinnými místy.)
Revenue % Total Region =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalRegionRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory')
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalRegionRevenue
)
Ověřte, že maticový vizuál teď zobrazuje hodnoty Revenue % Total Region (Celkové % výnosů podle oblasti).
Nyní vytvoříte další míru, ale tentokrát vypočítáte poměr výnosů pro oblast vydělený výnosy dané země.
Před dokončením tohoto úkolu si všimněte, že hodnota Revenue % Total Region (Celkové % výnosů podle oblasti) v oblasti Southwest (Jihozápad) je 22,95 %. Prozkoumejte kontext filtru pro tuto buňku. Přepněte do zobrazení dat a pak v podokně Pole vyberte tabulku Sales Territory (Prodejní oblast ).
Použijte následující filtry sloupců:
- Group (Skupina) – North America (Severní Amerika)
- Country (Země) – United States (Spojené státy americké)
- Region (Oblast) – Southwest (Jihozápad)
Všimněte si, že filtry omezují tabulku pouze na jeden řádek. Pokud chcete vypočítat poměr výnosů oblasti k výnosům země, vymažte filtr ze sloupce Region (Oblast).
Všimněte si, že nyní existuje pět řádků, z nichž každý patří do země United States (Spojené státy americké). Když tedy vymažete filtry sloupce Region (Oblast), ale zachováte filtry u sloupců Country (Země) a Group (Skupina), budete mít nový kontext filtrů, který je určený pro zemi dané oblasti.
V následující definici míry si všimněte, jak můžete vymazat nebo odebrat filtr ze sloupce. V logice DAX se jedná o malou a drobnou změnu, která se provádí ve vzorci míry Revenue % Total Region (Celkové % výnosů podle oblasti): Funkce REMOVEFILTERS
teď odebere filtry ze sloupce Region (Oblast ) místo všech sloupců tabulky Sales Territory (Oblast prodeje ).
Revenue % Total Country =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalCountryRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS('Sales Territory'[Region])
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalCountryRevenue
)
Přidejte míru Revenue % Total Country (Celkové % výnosů podle země) do tabulky Sales (Prodej ) a naformátujte ji jako procento se dvěma desetinnými místy. Novou míru přidejte do maticového vizuálu.
Všimněte si, že všechny hodnoty, s výjimkou hodnot pro oblasti Spojených států amerických, tvoří 100 procent. Důvodem je to, že ve společnosti Adventure Works se pro Spojené státy americké používají oblasti, ale pro jiné země ne.
Poznámka
Tabulkové modely nepodporují nepravidelné hierarchie, což jsou hierarchie s proměnlivou hloubkou. Proto se běžně při návrhu opakují nadřazené hodnoty (nebo jiné nadřazené prvky) na nižších úrovních hierarchie. Například Austrálie nemá oblast, takže se hodnota země/oblasti opakuje jako název oblasti. Vždy je lepší ukládat smysluplnou hodnotu místo hodnoty BLANK.
Dalším příkladem je poslední míra, kterou vytvoříte. Přidejte míru Revenue % Total Group (Celkové % výnosů podle skupiny) a naformátujte ji jako procento se dvěma desetinnými místy. Potom novou míru přidejte do maticového vizuálu.
Revenue % Total Group =
VAR CurrentRegionRevenue = [Revenue]
VAR TotalGroupRevenue =
CALCULATE(
[Revenue],
REMOVEFILTERS(
'Sales Territory'[Region],
'Sales Territory'[Country]
)
)
RETURN
DIVIDE(
CurrentRegionRevenue,
TotalGroupRevenue
)
Když odeberete filtry ze sloupců Region (Oblast ) a Country (Země ) v tabulce Sales Territory (Prodejní oblast), míra vypočítá výnosy z oblasti jako poměr výnosů skupiny.
Zachování filtrů
Funkci DAX můžete použít KEEPFILTERS
jako výraz filtru ve CALCULATE
funkci pro zachování filtrů.
Pokud chcete zjistit, jak se tato úloha provádí, přepněte na stránku 1 sestavy. Pak upravte definici míry Revenue Red (Výnosy z červených tržeb) tak, aby používala KEEPFILTERS
funkci .
Revenue Red =
CALCULATE(
[Revenue],
KEEPFILTERS('Product'[Color] = "Red")
)
Ve vizuálu tabulky si všimněte, že existuje pouze jedna hodnota Revenue Red (Výnosy z červených produktů). Důvodem je to, že výraz logického filtru zachovává existující filtry ve sloupci Color v tabulce Product . U ostatní barev je hodnota BLANK, protože kontexty a výrazy filtru jsou u těchto dvou filtrů zkombinované. Černá a červená barva se protínají, a protože obojí nemůže být TRUE
současně, výraz se nefiltruje podle žádných řádků produktu. Je možné, že oba červené filtry můžou být TRUE
současně, což vysvětluje, proč se zobrazuje hodnota Revenue Red (Výnosy z červených).
Použití neaktivních relací
Neaktivní relace modelu může šířit filtry pouze tehdy, USERELATIONSHIP
když se funkce DAX předá funkci jako výraz CALCULATE
filtru. Když použijete tuto funkci, abyste zahrnuli neaktivní relace, aktivní relace se automaticky změní na neaktivní.
Projděte si příklad definice míry, která používá neaktivní relaci k výpočtu míry Revenue (Výnosy) podle kalendářních dat expedice:
Revenue Shipped =
CALCULATE (
[Revenue],
USERELATIONSHIP('Date'[DateKey], Sales[ShipDateKey])
)
Úprava chování relace
Chování relace modelu při vyhodnocování výrazu můžete upravit tak, že funkci DAX předáte CROSSFILTER
jako filtrovací výraz CALCULATE
. Jedná se o pokročilou funkci.
Funkce CROSSFILTER
může změnit směr filtru (z obou na jeden nebo z jednoho na oba) a dokonce zakázat relaci.