LASKEA

Koskee seuraavia: Laskettu sarakeLaskettu taulukkoMittarinvisuaalinen laskutoimitus

Laskee lausekkeen muokatussa suodatinkontekstissa.

Muistiinpano

Saatavilla on myös CALCULATETABLE-funktio . Se suorittaa täsmälleen samat toiminnot, mutta se muokkaa suodatinkontekstia, jota käytetään taulukko-objektin palauttavan lausekkeen kanssa.

Syntaksi

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

Parametrit

Termi Määritelmä
Ilmaisun Laskettava lauseke.
filter1, filter2,... (Valinnainen) Totuusarvolausekkeet tai taulukkolausekkeet, jotka määrittävät suodattimia tai suodattimen muokkausfunktioita.

Ensimmäisenä parametrina käytettävä lauseke on sama kuin mittayksikkö.

Suodattimet voivat olla seuraavat:

  • Totuusarvosuodatinlausekkeet
  • Taulukkosuodatinlausekkeet
  • Suodattimen muokkausfunktiot

Kun suodattimia on useita, ne voidaan laskea käyttämällä AND-operaattoria (&&) loogisella operaattorilla, mikä tarkoittaa, että kaikkien ehtojen on oltava TOSIA, tai OR:n (||) loogisen operaattorin avulla, mikä tarkoittaa, että jompikumpi ehto voi olla tosi.

Totuusarvosuodatinlausekkeet

Totuusarvolausekkeen suodatin on lauseke, joka antaa tulokseksi TOSI tai EPÄTOSI. Niiden on noudatettava useita sääntöjä:

  • Ne voivat viitata yhden taulukon sarakkeisiin.
  • Ne eivät voi viitata mittareihin.
  • Ne eivät voi käyttää sisäkkäistä CALCULATE-funktiota.

Power BI Desktopin syyskuun 2021 versiosta alkaen myös seuraavat ovat voimassa:

  • Ne eivät voi käyttää funktioita, jotka skannaavat tai palauttavat taulukon, ellei niitä välitetä argumentteina koostamisfunktioihin.
  • Ne voivat sisältää koostefunktion, joka palauttaa skalaariarvon. Esimerkki:
    Total sales on the last selected date =
    CALCULATE (
        SUM ( Sales[Sales Amount] ),
        'Sales'[OrderDateKey] = MAX ( 'Sales'[OrderDateKey] )
    )
    

Taulukkosuodatinlauseke

Taulukkolausekesuodatin käyttää suodattimena taulukko-objektia. Se voi olla viittaus mallitaulukkoon, mutta todennäköisempää on, että se on funktio, joka palauttaa taulukko-objektin. FILTER-funktiolla voit käyttää monimutkaisia suodatusehtoja, myös sellaisia, joita ei voi määrittää totuusarvosuodatinlausekkeella.

Suodattimen muokkausfunktiot

Suodattimen muokkausfunktioiden avulla voit tehdä muutakin kuin vain lisätä suodattimia. Ne tarjoavat lisäohjausobjektin suodatinkontekstin muokkaamiseen.

Function Tarkoitus
REMOVEFILTERS Poista kaikki suodattimet tai suodattimet yhdestä tai useammasta taulukon sarakkeesta tai yksittäisen taulukon kaikista sarakkeista.
ALL1, ALLEXCEPT, ALLNOBLANKROW Poista suodattimet yhdestä tai useammasta sarakkeesta tai yhden taulukon kaikista sarakkeista.
KEEPFILTERS Lisää suodatin poistamatta samojen sarakkeiden aiemmin luotuja suodattimia.
USERELATIONSHIP Ota passiivinen yhteys käyttöön liittyvien sarakkeiden välillä, jolloin aktiivinen yhteys poistetaan automaattisesti käytöstä.
CROSSFILTER Muokkaa suodattimen suuntaa (molemmista yksittäiseen tai yksittäisestä molempiin) tai poista suhde käytöstä.

1 ALL-funktio ja sen muunnokset toimivat sekä suodattimen muokkaajina että funktioina, jotka palauttavat taulukko-objekteja. Jos työkalu tukee REMOVEFILTERS-funktiota, on parempi käyttää sitä suodattimien poistamiseen.

Palautusarvo

Arvo, joka on lausekkeen tulos.

Huomautukset

  • Kun suodatinlausekkeita annetaan, CALCULATE-funktio muokkaa suodatinkontekstia lausekkeen arvioimiseksi. Kullekin suodatinlausekkeelle on kaksi mahdollista vakiotulosta, kun suodatinlauseketta ei ole pakattu KEEPFILTERS-funktioon:

    • Jos sarakkeet (tai taulukot) eivät ole suodatinkontekstissa, suodatinkontekstiin lisätään uusia suodattimia lausekkeen arvioimiseksi.
    • Jos sarakkeet (tai taulukot) ovat jo suodatinkontekstissa, uudet suodattimet korvaavat olemassa olevat suodattimet CALCULATE-lausekkeen arvioimiseksi.
  • Ilman suodattimia käytettävä CALCULATE-funktio saavuttaa tietyn vaatimuksen. Se siirtää rivikontekstin suodatinkontekstiin. Sitä tarvitaan, kun mallitietojen yhteenvedon sisältävä lauseke (ei mallin mittari) on arvioitava rivikontekstissa. Tämä skenaario voi tapahtua lasketun sarakkeen kaavassa tai kun iteraattori-funktion lauseke arvioidaan. Ota huomioon, että kun mallin mittaria käytetään rivikontekstissa, kontekstin siirtymä on automaattinen.

  • Tätä funktiota ei tueta DirectQuery-tilassa lasketuissa sarakkeissa tai rivitason suojauksen (RLS) säännöissä käytettäväksi.

Esimerkit

Seuraava Myynti-taulukon mittarin määritys tuottaa tuoton tuloksen, mutta vain tuotteille, joiden väri on sininen.

Tämän artikkelin esimerkkejä voidaan käyttää Adventure Works DW 2020 Power BI Desktop -mallissa. Jos haluat saada mallin, katso DAX-esimerkkimalli.

Blue Revenue =
CALCULATE(
    SUM(Sales[Sales Amount]),
    'Product'[Color] = "Blue"
)
Luokka Myynnin määrä Sininen tuotto
Lisävarusteet 1 272 057,89 dollaria 165 406,62 $
Polkupyörät 94 620 526,21 $ 8 374 313,88 dollaria
Vaatteet 2 117 613,45 dollaria 259 488,37 $
Osat 11 799 076,66 dollaria 803 642,10 $
Yhteensä 109 809 274,20 $ 9 602 850,97 dollaria

CALCULATE-funktio arvioi Myynti-taulukonsumman Myyntisumma-sarakkeessa muokatussa suodatinkontekstissa. Tuote-taulukonVäri-sarakkeeseen lisätään uusi suodatin, tai suodatin korvaa kaikki sarakkeessa jo käytetyt suodattimet.

Seuraava Myynti-taulukon mittarin määritys tuottaa myynnin suhteen kaikkien myyntikanavien myyntiin.

Kanava Myynnin määrä Tuotto-% yhteensä kanava
Internet 29 358 677,22 $ 26.74%
Reseller 80 450 596,98 $ 73.26%
Yhteensä 109 809 274,20 $ 100.00%
Revenue % Total Channel =
DIVIDE(
    SUM(Sales[Sales Amount]),
    CALCULATE(
        SUM(Sales[Sales Amount]),
        REMOVEFILTERS('Sales Order'[Channel])
    )
)

DIVIDE-funktio jakaa lausekkeen, joka laskee yhteen Myynti-taulukonMyyntisumma-sarakkeen arvon (suodatinkontekstissa) saman lausekkeen avulla muokatussa suodatinkontekstissa. Kyseessä on CALCULATE-funktio, joka muokkaa suodatinkontekstia käyttämällä REMOVEFILTERS-funktiota, joka on suodattimen muokkausfunktio. Se poistaa suodattimet Myyntitilaus-taulukon Kanava-sarakkeesta.

Seuraava Asiakas-taulukon lasketun sarakkeen määritelmä luokittelee asiakkaat uskollisuusluokkaan. Skenaario on hyvin yksinkertainen: Kun asiakkaan tuottama tuotto on alle 2 500 dollaria, asiakkaan luokkana on Pieni, muussa tapauksessa Suuri.

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

Tässä esimerkissä rivikonteksti muunnetaan suodatinkontekstiin. Sitä kutsutaan kontekstisiirtymäksi. ALLEXCEPT-funktio poistaa suodattimet kaikista Asiakas-taulukon sarakkeista lukuun ottamatta CustomerKey-saraketta.

Suodatinkonteksti
Rivikonteksti
CALCULATETABLE-funktio
Suodatinfunktiot