Poznámka
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete sa skúsiť prihlásiť alebo zmeniť adresáre.
Na prístup k tejto stránke sa vyžaduje oprávnenie. Môžete skúsiť zmeniť adresáre.
Vzťahuje sa na:
vypočítaný stĺpec
vypočítanej tabuľky![]()
vizuálového výpočtu
Vyhodnotí výraz v kontexte upraveného filtra.
Nota
K dispozícii je aj funkcia CALCULATETABLE. Vykonáva úplne rovnakú funkčnosť, s výnimkou, že upraví kontext filtra použitý pre výraz, ktorý vracia objekt tabuľky .
Syntax
CALCULATE(<expression>[, <filter1> [, <filter2> [, …]]])
Parametre
| Termín | Definícia |
|---|---|
expression |
Výraz, ktorý sa má vyhodnotiť. |
filter1, filter2,… |
(Voliteľné) Booleovské výrazy alebo výrazy tabuľky, ktoré definujú filtre alebo funkcie modifikátora filtrov. |
Výraz, ktorý používate ako prvý parameter, funguje ako mierka.
Filtre môžu byť:
- Booleovské výrazy filtra
- Tabuľkové výrazy filtra
- Funkcie modifikovania filtra
Ak používate viacero filtrov, môžete ich vyhodnotiť pomocou logického AND operátora (&&), čo znamená, že všetky podmienky musia byť , alebo OR logický operátor (||), čo znamená, že obe podmienky môžu mať TRUEhodnotu true. Ďalšie informácie nájdete v téme DAX> Logické operátory operátorov.
Booleovské výrazy filtra
Filter booleovského výrazu je výraz, ktorý sa vyhodnotí ako TRUE alebo FALSE. Musí dodržiavať niekoľko pravidiel:
Môže odkazovať na stĺpce z jednej tabuľky.
Nemôže odkazovať na mierky.
Nemôže použiť vnorenú CALCULATE funkciu.
Nemôže používať funkcie, ktoré prehľadávajú alebo vracajú tabuľku, pokiaľ ich neodovzdajú ako argumenty do agregačných funkcií.
Môže obsahovať agregačnú funkciu, ktorá vráti skalárnu hodnotu. Napríklad:
Total sales on the last selected date = CALCULATE ( SUM ( Sales[Sales Amount] ), 'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] ) )
Tabuľkové výrazy filtra
Filter výrazov tabuľky použije objekt tabuľky ako filter. Môže ísť o odkaz na tabuľku modelu, ale pravdepodobnejšie je to funkcia, ktorá vracia objekt tabuľky. Funkciu môžete použiť FILTER na použitie zložitých podmienok filtrov vrátane tých, ktoré nie je možné definovať pomocou booleovského výrazu filtra.
Funkcie modifikátora filtra
Funkcie modifikátora filtrov vám umožňujú viac než len pridávať filtre. Pri úprave kontextu filtra vám poskytujú dodatočnú kontrolu.
| Funkcia | Účel |
|---|---|
| REMOVEFILTERS | Odstráňte všetky filtre alebo filtre z jedného alebo viacerých stĺpcov tabuľky alebo zo všetkých stĺpcov jednej tabuľky. |
| ALL 1, ALLEXCEPTALLNOBLANKROW | Odstráňte filtre z jedného alebo viacerých stĺpcov tabuľky alebo zo všetkých stĺpcov jednej tabuľky. |
| KEEPFILTERS | Pridajte filter bez odstránenia existujúcich filtrov v rovnakých stĺpcoch. |
| USERELATIONSHIP | Zapojte neaktívny vzťah medzi súvisiacimi stĺpcami, čím sa aktívny vzťah automaticky stane neaktívnym. |
| CROSSFILTER | Upravte smer filtrovania (z oboch na jeden alebo z jedného do oba) alebo vypnite vzťah. |
1 Funkcia ALL a jej varianty sa správajú ako modifikátory filtrov aj ako funkcie, ktoré vracajú objekty tabuľky. Ak váš nástroj funkciu podporuje REMOVEFILTERS , použite ju na odstránenie filtrov.
Vrátená hodnota
Hodnota, ktorá je výsledkom výrazu.
Poznámky
Keď zadáte výrazy filtra, funkcia upraví kontext filtra tak, CALCULATE aby vyhodnotil výraz. Pre každý výraz filtra existujú dva štandardné výsledky, keď výraz filtra nie je zabalený vo funkcii KEEPFILTERS :
- Ak sa stĺpce alebo tabuľky nenachádzajú v kontexte filtra, do kontextu filtra sa pridajú nové filtre na vyhodnotenie výrazu.
- Ak sa stĺpce alebo tabuľky už v kontexte nachádzajú, existujúce filtre sa prepíšu novými filtrami na vyhodnotenie výrazu CALCULATE .
CALCULATE Použitím funkcie bez filtrov dosiahnete špecifickú požiadavku. Kontext riadka sa presunie na kontext filtra. Tento prechod sa vyžaduje, keď sa výraz (nie modelová mierka), ktorý sumarizuje modelové údaje, musí vyhodnotiť v kontexte riadka. Tento scenár môže nastať vo vzorci vypočítaného stĺpca alebo pri vyhodnocovaní výrazu v iterátorovej funkcii. Keď v kontexte riadka použijete modelovú mierku, zmena kontextu je automatická.
-
Táto funkcia nie je podporovaná na použitie v režime DirectQuery, keď sa používa vo vypočítaných stĺpcoch alebo v pravidlách zabezpečenia na úrovni riadkov (RLS).
Príklady
Príklady v tomto článku možno použiť so vzorovým modelom aplikácie Power BI Desktop Adventure Works DW 2020. Ak chcete získať model, pozrite si DAX ukážkový model.
Nasledujúci definícia mierky Sales tabuľke vypočíta výsledok výnosov, ale iba pre produkty, ktoré majú modrú farbu.
Blue Revenue =
CALCULATE ( SUM ( Sales[Sales Amount] ), 'Product'[Color] = "Blue" )
| Kategória | Čiastka predaja | Modré výnosy |
|---|---|---|
| Príslušenstvo | 1 272 057,89 $ | 165 406,62 $ |
| Bicykle | 94 620 526,21 USD | 8 374 313,88 USD |
| Oblečenie | 2 117 613,45 $ | 259 488,37 $ |
| Komponenty | 11 799 076,66 $ | 803 642,10 $ |
| Celkový | 109 809 274,20 USD | 9 602 850,97 USD |
Funkcia CALCULATE vyhodnotí súčet tabuľky SalesStĺpca Čiastka predaja v upravenom kontexte filtra. Nový filter sa pridá do tabuľky
Nasledujúca definícia mierky Sales tabuľkovej mierky produkuje pomer predaja vo všetkých kanáloch predaja k predaju.
Revenue % Total Channel =
DIVIDE (
SUM ( Sales[Sales Amount] ),
CALCULATE (
SUM ( Sales[Sales Amount] ),
REMOVEFILTERS ( 'Sales Order'[Channel] )
)
)
| Kanál | Čiastka predaja | Celkový kanál výnosov % |
|---|---|---|
| internet | 29 358 677,22 USD | 26,74% |
| Predajcu | 80 450 596,98 $ | 73,26% |
| Celkový | 109 809 274,20 USD | 100,00% |
Funkcia DIVIDE delí výraz, ktorý je súčtom tabuľky SalesČiastka predaja hodnotou stĺpca (v kontexte filtra) rovnakým výrazom v upravenom kontexte filtra. Je to funkcia CALCULATE, ktorá upraví kontext filtra pomocou funkcie REMOVEFILTERS, čo je funkcia modifikátora filtra. Odstráni filtre z tabuľky Sales Orderstĺpci Kanál.
Nasledujúca definícia vypočítaného stĺpca Customer klasifikuje zákazníkov podľa vernostnej triedy. Je to veľmi jednoduchý scenár: Keď sú výnosy, ktoré zákazník vytvoril, menšie ako 2 500 USD, sú klasifikované ako Low; V opačnom prípade sú Vysoké.
Customer Segment =
IF (
CALCULATE (
SUM ( Sales[Sales Amount] ),
ALLEXCEPT ( Customer, Customer[CustomerKey] )
) < 2500,
"Low",
"High"
)
| Customer Segment | Počet zákazníkov | Čiastka predaja |
|---|---|---|
| Vysoký | 4,637 | 102 670 663,09 $ |
| Nízky | 13,848 | 7 138 611,11 USD |
| Celkový | 18,485 | 109 809 274,20 USD |
V tomto príklade sa kontext riadka konvertuje na kontext filtra. Označuje sa ako kontextová transformácia. Funkcia ALLEXCEPT odstráni filtre zo všetkých stĺpcov tabuľky Customer s výnimkou stĺpca CustomerKey.