VYPOČÍTAT

Vyhodnotí výraz v upraveném kontextu filtru.

Poznámka:

K dispozici je také funkce CALCULATETABLE . Provádí přesně stejné funkce, s výjimkou toho, že upravuje kontext filtru použitý u výrazu , který vrací objekt tabulky.

Syntaxe

CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])

Parametry

Pojem definice
výraz Výraz, který se má vyhodnotit.
filter1, filter2,... (Volitelné) Logické výrazy nebo výrazy tabulky, které definují filtry nebo modifikační funkce filtru.

Výraz použitý jako první parametr je v podstatě stejný jako míra.

Filtry můžou být:

  • Logické výrazy filtru
  • Výrazy filtru tabulky
  • Funkce úprav filtru

Pokud existuje více filtrů, je možné je vyhodnotit pomocí logického operátoru AND (&&), což znamená, že všechny podmínky musí být PRAVDA, nebo logickým operátorem OR (||). To znamená, že podmínka může být pravdivá.

Logické výrazy filtru

Logický filtr výrazů je výraz, který se vyhodnotí jako TRUE, nebo FALSE. Existuje několik pravidel, která musí dodržovat:

  • Mohou odkazovat na sloupce z jedné tabulky.
  • Nemůžou odkazovat na míry.
  • Nemůžou použít vnořenou funkci CALCULATE.

Od verze Power BI Desktopu ze září 2021 platí také toto:

  • Nemůžou používat funkce, které prohledávají nebo vracejí tabulku, pokud nejsou předány jako argumenty agregačním funkcím.
  • Mohou obsahovat agregační funkci, která vrací skalární hodnotu. Například
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Výraz filtru tabulky

Filtr tabulkových výrazů použije objekt tabulky jako filtr. Může se jednat o odkaz na tabulku modelu, ale s větší pravděpodobností se jedná o funkci, která vrací objekt tabulky. Pomocí funkce FILTER můžete použít komplexní podmínky filtru, včetně těch, které nelze definovat logickým výrazem filtru.

Modifikační funkce filtru

Modifikační funkce filtru umožňují provádět více než pouhé přidávání filtrů. Poskytují vám další ovládací prvek při úpravě kontextu filtru.

Function Účel
REMOVEFILTERS Odeberte všechny filtry nebo filtry z jednoho nebo více sloupců tabulky nebo ze všech sloupců jedné tabulky.
ALL1, ALLEXCEPT, ALLNOBLANKROW Odeberte filtry z jednoho nebo více sloupců nebo ze všech sloupců jedné tabulky.
KEEPFILTERS Přidejte filtr bez odebrání existujících filtrů ve stejných sloupcích.
USERELATIONSHIP Zapojte neaktivní relaci mezi souvisejícími sloupci, v takovém případě se aktivní relace automaticky stane neaktivní.
CROSSFILTER Změňte směr filtru (z obou na jeden nebo z jednoho na oba) nebo zakažte relaci.

1 Funkce ALL a její varianty se chovají jako modifikátory filtru i jako funkce, které vracejí objekty tabulky. Pokud nástroj podporuje funkci REMOVEFILTERS, je lepší ji použít k odebrání filtrů.

Vrácená hodnota

Hodnota, která je výsledkem výrazu.

Poznámky

  • Pokud jsou k dispozici výrazy filtru, funkce CALCULATE upraví kontext filtru tak, aby vyhodnotil výraz. U každého výrazu filtru existují dva možné standardní výsledky, pokud není výraz filtru zabalený ve funkci KEEPFILTERS:

    • Pokud sloupce (nebo tabulky) nejsou v kontextu filtru, přidají se do kontextu filtru nové filtry, aby se výraz vyhodnotil.
    • Pokud jsou sloupce (nebo tabulky) již v kontextu filtru, stávající filtry budou přepsány novými filtry pro vyhodnocení výrazu CALCULATE.
  • Funkce CALCULATE použitá bez filtrů dosáhne konkrétního požadavku. Přemísní kontext řádku na kontext filtru. Vyžaduje se, když je potřeba vyhodnotit výraz (ne míru modelu), který shrnuje data modelu v kontextu řádku. K tomuto scénáři může dojít ve vzorci počítaného sloupce nebo při vyhodnocení výrazu pomocí funkce iterátoru. Všimněte si, že při použití míry modelu v kontextu řádku je přechod kontextu automatický.

  • Tato funkce není podporována pro použití v režimu DirectQuery při použití v počítaných sloupcích nebo pravidlech zabezpečení na úrovni řádků (RLS).

Příklady

Následující definice míry Sales (Prodej) vytvoří výsledek výnosů, ale pouze pro produkty, které mají modrou barvu.

Příklady v tomto článku můžete použít s ukázkovým modelem Adventure Works DW 2020 Power BI Desktopu. Pokud chcete získat model, podívejte se na ukázkový model DAX.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Kategorie Částka prodeje Modré výnosy
Accessories 1 272 057,89 Kč 165 406,62 Kč
Bikes 94 620 526,21 Kč 8 374 313,88 Kč
Clothing 2 117 613,45 Kč 259 488,37 Kč
Komponenty 11 799 076,66 Kč 803 642,10 Kč
Celkem 109 809 274,20 Kč 9 602 850,97 Kč

Funkce CALCULATE vyhodnotí součet sloupce Sales table Sales Amount (Částka prodeje) v upraveném kontextu filtru. Do sloupce Barva tabulky Product se přidá nový filtr nebo filtr přepíše všechny filtry, které už jsou u sloupce použité.

Následující definice míry tabulky Sales vytvoří poměr prodeje oproti prodeji pro všechny prodejní kanály.

Kanál Částka prodeje Revenue % Total Channel
Internet 29 358 677,22 Kč 26.74%
Reseller $80,450,596.98 73.26%
Celkem 109 809 274,20 Kč 100.00%
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

Funkce DIVIDE vydělí výraz, který sečte hodnotu sloupce Sales table Sales Amount (v kontextu filtru) stejným výrazem v upraveném kontextu filtru. Jedná se o funkci CALCULATE, která upravuje kontext filtru pomocí funkce REMOVEFILTERS, což je modifikátor filtru. Odebere filtry ze sloupce Kanál prodejní objednávky.

Následující tabulka Customer počítaná definice sloupce klasifikuje zákazníky do partnerské třídy. Jedná se o velmi jednoduchý scénář: Když jsou výnosy vytvořené zákazníkem nižší než 2500 USD, jsou klasifikovány jako Nízké, jinak jsou vysoké.

Customer Segment =
IF(
    CALCULATE(SUM(Sales[Sales Amount]), ALLEXCEPT(Customer, Customer[CustomerKey])) < 2500,
    "Low",
    "High"
)

V tomto příkladu se kontext řádku převede na kontext filtru. Označuje se jako přechod kontextu. Funkce ALLEXCEPT odebere filtry ze všech sloupců tabulky Customer s výjimkou sloupce CustomerKey .

Kontext filtru
Kontext řádku
CALCULATETABLE
Funkce filtru