
October 23, 2020
DAX funkcija CALCULATE
V članku je uporabljen Power BI Desktop verzije 2.76.5678.782 (December 2019).
Funkcija CALCULATE() je najpomembnejša funkcija v jeziku DAX. Je skoraj edina funkcija, ki lahko spremeni filterni kontekst, ki pride iz vizualizacij. Več o filternem kontekstu si lahko preberemo v članku Filterni kontekst v Power BI in Prehod konteksta v Power BI.
Kako deluje funkcija CALCULATE()? Predstavljajmo si, da v podjetju vsak mesec naročimo naslednji paket pisarniških produktov.
Standardno mesečno naročilo vsebuje: papir, pisala, mape, kuverte in sponke.
Pred oddajo naročila za aktualni mesec ugotovimo, da imamo sponke še na zalogi in jih ta mesec ne bomo naročili. Pri naročilu bi sporočili: “Želimo standardni paket, brez sponk. ” Podobno naredi funkcija CALCULATE(). Tabelo filtrira, da ostane zgolj vsebina, ki jo želimo, in izračuna vredonst izraza. Uporabimo lahko nobenega, en ali več filtrov. Funkcija pred vrednotenjem rezultata spremeni filterni kontekst, filtri se prelijejo skozi povezave in filtrirajo tudi povezane tabele.
Sintaksa
CALCULATE(Expression, Filter1, Filter2, Filter3, …)
Parameter | Opis |
Expression | Izraz, ki ga želimo filtrirati |
Filter1, Filter2, Filter3, … | Filtri |
Primer: filtriranje ene tabele
Imamo tabelo Supplies z evidenco trenutne zaloge pisarniškega materiala.
Ugotoviti želimo, koliko kosov pisarniškega materiala bomo naročili, če vemo, da bomo naročili vse razen sponk oz. “Paper clips”. Sledimo naslednjim korakom.
1. Ustvarimo novo mero in uporabimo naslednjo formulo.
CALCULATE_Example = CALCULATE(SUM(Supplies[Quantity]), Supplies[Name] <> “Paper clips”)
2. Mero uporabimo v vizualizaciji Matrika. Pričakovano je odgovor 1300.
Primer: filtriranje druge tabele
Filtri se lahko nanašajo tudi na druge tabele. Želimo npr. dohodek od produktov v skupini Board games.
Uporabimo naslednji primer:
CALCULATE_Example = CALCULATE(SUM(Sales[Amount]), Product[Genre] = “Board games”)
Formula se izvede po naslednjh korakih.
- Tabela Product se filtrira, tako da ostanejo le vrstice, ki imajo v stolpcu Genre vrednost Board games.
- Filter nato potuje po povezavi do tabele Sales, kjer tudi ostanejo vrstice, ki imajo v stolpcu Genre vrednost Board games.
- V filtrirani tabeli Sales se izračuna vsota stolpca Amount.
Primer: filtriranje z več filtri
Uporabimo lahko poljubno število filtrov. Želimo npr. dohodek od produktov v skupini Board games na lokaciji UK, v letu 2019.
Uporabimo naslednji primer:
CALCULATE_Example = CALCULATE(SUM(Sales[Amount]), Product[Genre] = “Board games”, Location[Name] = “UK”, Calendar[Year] = 2019)
Formula se izvede po naslednjh korakih.
- Tabela Product se filtrira, tako da ostanejo le vrstice, ki imajo v stolpcu Genre vrednost Board games.
- Tabela Location se filtrira, tako da ostanejo le vrstice, ki imajo v stolpcu Name vrednost UK.
- Tabela Calendar se filtrira, tako da ostanejo le vrstice, ki imajo v stolpcu Year vrednost 2019.
- Filtri nato potujejo po povezavah do tabele Sales, kjer tudi ostanejo samo vrstice, ki niso bile filtrirane.
- V filtrirani tabeli Sales se izračuna vsota stolpca Amount.