Filtrování dat ve vzorcích jazyka DAX

Platí pro
Excel pro Microsoft 365 Excel 2024 Excel 2021 Excel 2019 Excel 2016

Tato část popisuje, jak vytvořit filtry ve vzorcích jazyka DAX (Data Analysis Expressions). Vytvářením filtrů můžete ve vzorcích omezit hodnoty ze zdrojových dat, které se používají ve výpočtech. Dosáhnete toho zadáním tabulky jako vstupu do vzorce a následným definováním výrazu filtru. Výraz filtru, který zadáte, se použije k dotazování dat a vrátí jenom podmnožinu zdrojových dat. Filtr se dynamicky použije pokaždé, když aktualizujete výsledky vzorce, v závislosti na aktuálním kontextu dat.

V tomto článku

Vytvoření filtru v tabulce použité ve vzorci

Filtry můžete použít ve vzorcích, které jako vstupní data používají tabulku. Místo zadání názvu tabulky můžete použít funkci FILTER k definování podmnožiny řádků ze zadané tabulky. Tato podmnožina se pak předá jiné funkci pro operace, jako jsou vlastní agregace.

Předpokládejme například, že máte tabulku dat, která obsahuje informace o objednávkách prodejců, a chcete vypočítat, kolik každý prodejce prodal. Vy však chcete zobrazit objem prodeje pouze u prodejců, kteří prodali více kusů vašich produktů s vyšší hodnotou. Následující vzorec, založený na ukázkovém sešitu jazyka DAX, ukazuje příklad vytvoření výpočtu pomocí filtru:

=SUMX(
     FILTER ('ResellerSales_USD', 'ResellerSales_USD'[Množství] > 5 &&
     "ResellerSales_USD"[ProductStandardCost_USD] > 100),
     'ResellerSales_USD'[SalesAmt]
     )

  • První část vzorce určuje jednu z agregačních funkcí Power Pivotu, která používá tabulku jako argument. Funkce SUMX vypočítá součet pomocí tabulky.

  • Druhá část vzorce určujeSUMX, FILTER(table, expression),která data se mají použít. SUMX vyžaduje tabulku nebo výraz, jehož výsledkem je tabulka. V tomto případě místo použití všech dat v tabulce použijete funkci k FILTER určení řádků z tabulky, které se mají použít.
    Výraz filtru má dvě části: první část pojmenuje tabulku, na kterou se filtr vztahuje. Druhá část definuje výraz, který se má použít jako podmínka filtru. V tomto případě filtrujete prodejce, kteří prodali více než 5 jednotek, a produkty, které stojí více než 100 USD. Operátor && je logický operátor AND, který určuje, že obě části podmínky musí být splněny, aby řádek patřil do filtrované podmnožiny.

  • Třetí část vzorce říká SUMX funkci, které hodnoty se mají sečíst. V tomto případě používáte jenom prodejní částku.
    Funkce jako FILTR, které vracejí tabulku, nikdy nevrací tabulku ani řádky přímo, ale jsou vždy vložené do jiné funkce. Další informace o funkci FILTER a dalších funkcích používaných k filtrování včetně dalších příkladů najdete v tématu Funkce FILTER (DAX).

    Poznámka

    Výraz filtru je ovlivněn kontextem, ve kterém se používá. Pokud například použijete filtr v míře a míra se použije v kontingenční tabulce nebo kontingenčním grafu, může být vrácená podmnožina dat ovlivněna dalšími filtry nebo průřezy, které uživatel použil v kontingenční tabulce. Další informace o kontextu naleznete v tématu Kontext ve vzorcích jazyka DAX.

Filtry, které odebírají duplicity

Kromě filtrování konkrétních hodnot můžete vrátit jedinečnou sadu hodnot z jiné tabulky nebo sloupce. To může být užitečné, když chcete spočítat počet jedinečných hodnot ve sloupci nebo použít seznam jedinečných hodnot pro jiné operace. Jazyk DAX poskytuje dvě funkce pro vrácení jedinečných hodnot: funkce DISTINCT a funkce VALUES.

  • Funkce DISTINCT prozkoumá jeden sloupec, který zadáte jako argument funkce, a vrátí nový sloupec obsahující jenom rozdílné hodnoty.
  • Funkce VALUES vrátí také seznam jedinečných hodnot, ale vrátí také neznámý člen. To je užitečné, pokud používáte hodnoty ze dvou tabulek, které jsou propojeny relací, a hodnota chybí v jedné tabulce a je přítomná v druhé. Další informace o neznámém členovi naleznete v tématu Kontext ve vzorcích jazyka DAX.

Obě tyto funkce vracejí celý sloupec hodnot. Proto použijete funkce k získání seznamu hodnot, který se pak předá jiné funkci. Pomocí následujícího vzorce můžete například získat seznam jedinečných produktů prodávaných konkrétním prodejcem pomocí jedinečného kódu Product Key a potom spočítat produkty v tomto seznamu pomocí funkce COUNTROWS:

=COUNTROWS(DISTINCT('ResellerSales_USD'[ProductKey]))

Začátek stránky

Jak kontext ovlivňuje filtry

Když přidáte vzorec jazyka DAX do kontingenční tabulky nebo kontingenčního grafu, můžou být výsledky vzorce ovlivněné kontextem. Pokud pracujete v tabulce Power Pivot, kontextem je aktuální řádek a jeho hodnoty. Pokud pracujete v kontingenční tabulce nebo kontingenčním grafu, kontextem se rozumí množina nebo podmnožina dat, která je definovaná operacemi, jako je krájení nebo filtrování. Návrh kontingenční tabulky nebo kontingenčního grafu také vytváří vlastní kontext. Pokud například vytvoříte kontingenční tabulku, ve které jsou prodeje seskupené podle oblastí a roků, zobrazí se v kontingenční tabulce jenom data, která pro tyto oblasti a roky platí. Všechny míry, které přidáte do kontingenční tabulky, se proto počítají v kontextu záhlaví sloupců a řádků a případných filtrů ve vzorci míry.

Další informace najdete v tématu Kontext ve vzorcích jazyka DAX.

Začátek stránky

Odebrání filtrů

Při práci se složitými vzorci můžete chtít přesně vědět, o jaké filtry se jedná, nebo můžete chtít upravit filtrovací část vzorce. Jazyk DAX poskytuje několik funkcí, které umožňují odebrat filtry a určit, které sloupce zůstanou zachovány jako součást aktuálního kontextu filtru. Tato část obsahuje přehled toho, jak tyto funkce ovlivňují výsledky ve vzorci.

Přepsání všech filtrů pomocí funkce ALL

Pomocí této ALL funkce můžete přepsat všechny dříve použité filtry a vrátit všechny řádky v tabulce na funkci, která provádí agregační nebo jinou operaci. Pokud jako argumenty použijete ALLjeden nebo více sloupců místo tabulky, ALL vrátí funkce všechny řádky bez ohledu na kontextové filtry.

Poznámka

Pokud znáte terminologii relačních databází, lze si představit ALL , že generujete přirozené levé vnější spojení všech tabulek.

Předpokládejme například, že máte tabulky Prodej a Produkty a chcete vytvořit vzorec, který vypočítá součet prodejů pro aktuální produkt dělený prodejem pro všechny produkty. Je třeba vzít v úvahu skutečnost, že pokud je vzorec použit v míru, uživatel kontingenční tabulky může používat průřez pro filtrování konkrétního produktu s názvem produktu na řádcích. Proto, abyste získali skutečnou hodnotu jmenovatele bez ohledu na filtry nebo průřezy, musíte přidáním funkce ALL přepsat všechny filtry. Následující vzorec je jedním z příkladů, jak pomocí funkce ALL potlačit účinky předchozích filtrů:

=SUM(Prodej[Částka])/SUMX(Prodej[Částka]], FILTR(Prodej, VŠE(Výrobky)))

  • První část vzorce, SUMA (Prodej[Částka]), vypočítá čitatel.
  • Součet bere v úvahu aktuální kontext, což znamená, že pokud přidáte vzorec do počítaného sloupce, použije se kontext řádku. Pokud vzorec přidáte do kontingenční tabulky jako měřítko, použijí se všechny filtry použité v kontingenční tabulce (kontext filtru).
  • V druhé části vzorce se vypočítá jmenovatel. Funkce ALL přepíše všechny filtry, které můžou být u tabulky použité Products .

Další informace včetně podrobných příkladů naleznete v tématu Funkce ALL.

Přepsání konkrétních filtrů pomocí funkce ALLEXCEPT

Funkce ALLEXCEPT také přepíše existující filtry, ale můžete určit, že některé existující filtry se mají zachovat. Sloupce, které uvedete jako argumenty funkce ALLEXCEPT určují, které sloupce budou dále filtrovány. Pokud chcete přepsat filtry většiny sloupců a ne všech, je vhodnější použít funkci ALLEXCEPT než ALL. Funkce ALLEXCEPT je užitečná zejména v případě, že vytváříte kontingenční tabulky, které mohou být filtrované v mnoha různých sloupcích, a chcete určit hodnoty použité ve vzorci. Další informace včetně podrobného příkladu použití funkce ALLEXCEPT v kontingenční tabulce najdete v tématu Funkce ALLEXCEPT

Začátek stránky