Kontekst vam omogućava da izvršite dinamičku analizu u kojoj rezultati formule mogu da se promene kako bi odrazili trenutni izbor reda ili ćelije, kao i sve srodne podatke. Razumevanje konteksta i efikasno korišćenje konteksta veoma su važni za izradu formula sa visokim performansama, dinamičke analize i rešavanje problema u formulama.
Ovaj odeljak definiše različite tipove konteksta: kontekst reda, kontekst upita i kontekst filtera. Članak objašnjava kako se procenjuje kontekst formula u izračunatim kolonama i izvedenim tabelama.
Poslednji deo ovog članka obezbeđuje veze ka detaljnim primerima koji ilustruju kako se rezultati formula menjaju u skladu sa kontekstom.
Razumevanje konteksta
Na formule u programskom dodatku Power Pivot mogu da utiču filteri primenjeni u izvedenoj tabeli, relacije između tabela i filteri koji se koriste u formulama. Kontekst je ono što omogućava dinamičnu analizu. Razumevanje konteksta je važno za izgradnju formula i za rešavanje problema sa njima.
Postoje različiti tipovi konteksta: kontekst reda, kontekst upita i kontekst filtera.
Kontekst reda možete da posmatrate kao "trenutni red". Ako ste kreirali izračunatu kolonu, kontekst reda se sastoji od vrednosti u svakom pojedinačnom redu i vrednosti iz kolona koje su povezane sa trenutnim redom. Postoje i neke funkcije (EARLIER i EARLIEST) koje preuzimaju vrednost iz trenutnog reda i zatim koriste tu vrednost prilikom izvršavanja operacije nad celom tabelom.
Kontekst upita se odnosi na podskup podataka koji se implicitno kreira za svaku ćeliju u izvedenoj tabeli, u zavisnosti od zaglavlja redova i kolona.
Kontekst filtera je skup dozvoljenih vrednosti u svakoj koloni, na osnovu ograničenja filtera koja su primenjena na red ili koja su definisana izrazima filtera u formuli.
Kontekst reda
Ako formulu kreirate u izračunatoj koloni, kontekst reda za tu formulu uključuje vrednosti iz svih kolona u trenutnom redu. Ako je tabela povezana sa drugom tabelom, sadržaj takođe uključuje sve vrednosti iz te druge tabele koje su povezane sa trenutnim redom.
Na primer, recimo da kreirate izračunatu kolonu =[Troškovi prevoza] + [Porez] koja sabira dve kolone iz iste tabele. Ova formula se ponaša kao formule u Excel tabeli, koje automatski upućuju na vrednosti iz istog reda. Imajte na umu da se tabele razlikuju od opsega: ne možete da uputite na vrednost iz reda pre trenutnog reda pomoću zapisivanja opsega i ne možete da upućujete na bilo koju proizvoljnu pojedinačnu vrednost u tabeli ili ćeliji. Uvek morate da radite sa tabelama i kolonama.
Kontekst reda automatski prati relacije između tabela da bi se utvrdilo koji su redovi u srodnim tabelama povezani sa trenutnim redom.
Na primer, sledeća formula koristi funkciju RELATED za preuzimanje vrednosti poreza iz povezane tabele, na osnovu regiona u koji je porudžbina isporučena. Vrednost poreza se utvrđuje korišćenjem vrednosti za region u trenutnoj tabeli, traženjem regiona u srodnoj tabeli i dobijanjem poreske stope za taj region iz srodne tabele.
= [Troškovi prevoza] + RELATED('Region'[PoreskaStopa])
Ova formula jednostavno preuzima poresku stopu za trenutni region, iz tabele "Region". Ne morate da znate ili da navedete ključ koji povezuje tabele.
Kontekst više redova
Pored toga, DAX uključuje funkcije koje vrše ponavljanje izračunavanja preko tabele. Ove funkcije mogu da imaju više trenutnih redova i konteksta trenutnog reda. U terminima programiranja, možete da kreirate formule koje se ponavljaju u unutrašnjoj i spoljašnjoj petlji.
Na primer, pretpostavimo da radna sveska sadrži tabele "Proizvodi " i tabelu "Prodaja ". Možda ćete želeti da prođete kroz celu tabelu prodaje koja je puna transakcija koje uključuju više proizvoda i pronađete najveću poručenu količinu za svaki proizvod u bilo kojoj transakciji.
U programu Excel ovo izračunavanje zahteva niz posrednih rezimea, koji bi morali da se ponovo naprave ako se podaci promene. Ako ste napredni korisnik programa Excel, možda ćete moći da izgradite formule niza koje će obaviti posao. Druga mogućnost je da u relacionoj bazi podataka napišete ugnežđene podizbore.
Međutim, uz DAX možete da napravite jednu formulu koja vraća tačnu vrednost, a rezultati se automatski ažuriraju svaki put kada dodate podatke u tabele.
=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])
Detaljno uputstvo za ovu formulu potražite u funkciji EARLIER .
Ukratko, funkcija EARLIER skladišti kontekst reda iz operacije koja je prethodila trenutnoj operaciji. Funkcija uvek skladišti dva skupa konteksta u memoriji: jedan skup konteksta predstavlja trenutni red za unutrašnju petlju formule, a drugi skup konteksta predstavlja trenutni red za spoljnu petlju formule. DAX automatski ubacuje vrednosti između dve petlje kako biste mogli da kreirate složene agregacije.
Kontekst upita
Kontekst upita se odnosi na podskup podataka koji se implicitno preuzimaju za formulu. Kada u ćeliju u izvedenoj tabeli otpustite polje mere ili druge vrednosti, Power Pivot mašina ispituje zaglavlja redova i kolona, module "Slicer" i filtere izveštaja da bi utvrdila kontekst. Power Pivot zatim vrši neophodna izračunavanja za popunjavanje svake ćelije u izvedenoj tabeli. Skup podataka koji se preuzima predstavlja kontekst upita za svaku ćeliju.
Pošto kontekst može da se promeni u zavisnosti od toga gde stavite formulu, rezultati formule se takođe menjaju u zavisnosti od toga da li koristite formulu u izvedenoj tabeli sa mnogo grupisanja i filtera ili u izračunatoj koloni bez filtera i sa minimalnim kontekstom.
Na primer, pretpostavimo da kreirate ovu jednostavnu formulu koja sabira vrednosti u koloni " Profit " tabele "Prodaja ":
=SUM('Prodaja'[Dobit])
Ako koristite ovu formulu u izračunatoj koloni u tabeli "Prodaja ", rezultati formule će biti isti za celu tabelu jer je kontekst upita za formulu uvek ceo skup podataka tabele "Prodaja ". Vaši rezultati će imati profit za sve regione, sve proizvode, sve godine i tako dalje.
Međutim, obično ne želite da vidite isti rezultat stotine puta, već umesto toga želite da dobijete profit za određenu godinu, određenu zemlju ili region, određeni proizvod ili neku kombinaciju navedenog, a zatim dobijete ukupan zbir.
Kontekst u izvedenoj tabeli je lako promeniti dodavanjem ili uklanjanjem zaglavlja kolona i redova i dodavanjem ili uklanjanjem modula Slicer. Možete da napravite formulu kao što je ova gorenavedena, u određenoj meri, a zatim da je ispustite u izvedenu tabelu. Svaki put kada dodate naslove kolone ili reda u izvedenu tabelu, menjate kontekst upita u kojem se procenjuje mera. Operacije sečenja i filtriranja takođe utiču na kontekst. Stoga, ista formula, korišćena u izvedenoj tabeli, procenjuje se u različitom kontekstu upita za svaku ćeliju.
Kontekst filtera
Kontekst filtera se dodaje kada navedete ograničenja filtera za skup vrednosti dozvoljenih u koloni ili tabeli, korišćenjem argumenata u formuli. Kontekst filtera se primenjuje povrh drugih konteksta, kao što je kontekst reda ili kontekst upita.
Na primer, izvedena tabela izračunava vrednosti za svaku ćeliju na osnovu naslova redova i kolona, kao što je opisano u prethodnom odeljku o kontekstu upita. Međutim, u okviru mera ili izračunatih kolona koje dodate u izvedenu tabelu možete da navedete izraze filtera da biste kontrolisali vrednosti koje formula koristi. Možete i selektivno da obrišete filtere u određenim kolonama.
Više informacija o načinu kreiranja filtera u formulama potražite u članku Funkcije filtera.
Primer brisanja filtera radi kreiranja sveukupnih vrednosti potražite u okviru funkcije ALL.
Primere selektivnog brisanja i primene filtera u formulama potražite u funkciji ALLEXFE.
Stoga morate da pregledate definiciju mera ili formula koje se koriste u izvedenoj tabeli da biste bili svesni konteksta filtera kada tumačite rezultate formula.
Utvrđivanje konteksta u formulama
Kada kreirate formulu, Power Pivot za Excel prvo proverava opštu sintaksu, a zatim imena kolona i tabela koje navedete porede sa mogućim kolonama i tabelama u trenutnom kontekstu. Ako Power Pivot ne može da pronađe kolone i tabele navedene u formuli, dobićete grešku.
Kontekst se određuje kao što je opisano u prethodnim odeljcima, pomoću dostupnih tabela u radnoj svesci, odnosa između tabela i filtera koji su primenjeni.
Na primer, ako ste upravo uvezli neke podatke u novu tabelu i niste primenili nikakve filtere, ceo skup kolona u tabeli predstavlja deo trenutnog konteksta. Ako imate više tabela koje su povezane relacijama, a radite u izvedenoj tabeli koja je filtrirana dodavanjem naslova kolona i upotrebom modula "Slicer", kontekst uključuje povezane tabele i filtere podataka.
Kontekst je moćan koncept koji takođe može da oteža rešavanje problema sa formulama. Preporučujemo da počnete sa jednostavnim formulama i relacijama da biste videli kako kontekst funkcioniše, a zatim da eksperimentišete sa jednostavnim formulama u izvedenim tabelama. Sledeći odeljak pruža i nekoliko primera toga kako formule koriste različite tipove konteksta da bi dinamički vratile rezultate.
Primeri konteksta u formulama
- Funkcija RELATED proširuje kontekst trenutnog reda kako bi uključila vrednosti iz povezane kolone. To vam omogućava da izvršite pronalaženja. Primer u ovoj temi ilustruje interakciju filtriranja i konteksta reda.
- Funkcija FILTER vam omogućava da navedete redove koje će biti uključene u aktuelnom kontekstu. Primeri u ovoj temi takođe ilustruju kako da ugradite filtere u druge funkcije koje izvršavaju agregacije.
- Funkcija ALL postavlja kontekst unutar formule. Možete da ga koristite da biste zamenili filtere koji se primenjuju kao rezultat konteksta upita.
- Funkcija ALLEXCEPT omogućava da uklonite sve filtere osim jednog koji navedete. Obe teme obuhvataju primere koji vas vode kroz izgradnju formula i razumevanje složenih konteksta.
- Funkcije EARLIER i EARLIEST vam omogućavaju da se kružite kroz tabele tako što ćete izvršiti izračunavanja, dok upućujete na vrednost iz unutrašnje petlje. Ako ste upoznati sa konceptom rekurzije i sa unutrašnjim i spoljnim petljama, cenićete moć koju pružaju funkcije EARLIER i NEJRANIJE. Ako niste upoznati sa ovim konceptima, trebalo bi pažljivo da pratite korake u primeru da biste videli kako se unutrašnji i spoljašnji konteksti koriste u izračunavanjima.
Referencijalni integritet
U ovom odeljku su objašnjeni neki napredni koncepti u vezi sa vrednostima koje nedostaju u Power Pivot tabelama koje su povezane relacijama. Ovaj odeljak može da vam bude koristan ako imate radne sveske sa više tabela i složenim formulama i želite pomoć za razumevanje rezultata.
Ako prvi put koristite koncepte relacionih podataka, preporučujemo da prvo pročitate uvodnu temu, "Pregled relacija".
referencijalni integritet i Power Pivot relacije
Power Pivot ne zahteva da se referencijalni integritet nametne između dve tabele kako bi se definisala važeća relacija. Umesto toga, pravi se prazan red na kraju "jedan" svake relacije "jedan-prema-više" i koristi se za rukovanje svim redovima iz srodne tabele koji se ne podudaraju. On se efikasno ponaša kao SQL spoljni spoj.
Ako u izvedenim tabelama grupišete podatke po jednoj strani relacije, svi podaci bez podudaranja na strani relacije "više" grupišu se zajedno i uključuju se u ukupne vrednosti sa naslovom praznog reda. Prazan naslov je otprilike isti kao "nepoznati član".
Razumevanje nepoznatog člana
Koncept nepoznatog člana vam je verovatno poznat ako ste radili sa višedimenzionalnim sistemima baza podataka, kao što je SQL Server Analysis Services. Ako vam je termin nov, sledeći primer objašnjava šta je to nepoznati član i kako on utiče na izračunavanja.
Pretpostavimo da pravite izračunavanje koje sabira mesečnu prodaju za svaku prodavnicu, ali koloni u tabeli " Prodaja " nedostaje vrednost za ime prodavnice. S obzirom na to da su tabele za tabele "Prodavnica" i " Prodaja" povezane imenom prodavnice, šta biste očekivali da se desi u formuli? Kako da grupiše ili prikaže podatke o prodaji koji nisu povezani sa postojećom prodavnicom?
Ovaj problem je čest u skladištima podataka, gde velike tabele podataka moraju biti logički povezane sa tabelama dimenzija koje sadrže informacije o skladištima, regionima i drugim atributima koji se koriste za kategorizovanje i izračunavanje činjenica. Da bi se rešio problem, sve nove činjenice koje nisu povezane sa postojećim entitetom privremeno se dodeljuju nepoznatom članu. Zato će se nepovezane činjenice pojaviti grupisane u izvedenoj tabeli ispod praznog naslova.
Tretman praznih vrednosti u odnosu na prazan red
Prazne vrednosti se razlikuju od praznih redova koji se dodaju da bi se smestili nepoznati član. Prazna vrednost je posebna vrednost koja se koristi da predstavi vrednosti bez vrednosti, prazne niske i druge vrednosti koje nedostaju. Više informacija o praznoj vrednosti, kao i o drugim DAX tipovima podataka, potražite u članku Tipovi podataka u modelima podataka.