Kontekst gjør det mulig å utføre dynamisk analyse, der resultatene av en formel kan endres for å gjenspeile gjeldende rad- eller cellevalg og eventuelle relaterte data. Det er svært viktig å forstå kontekst og bruke kontekst effektivt for å bygge formler med høy ytelse, dynamisk analyse og feilsøking av problemer i formler.
Denne delen definerer de ulike konteksttypene: radkontekst, spørringskontekst og filterkontekst. Den forklarer hvordan konteksten evalueres for formler i beregnede kolonner og i pivottabeller.
Den siste delen av denne artikkelen inneholder koblinger til detaljerte eksempler som illustrerer hvordan resultatene av formler endres i henhold til kontekst.
Forstå kontekst
Formler i Power Pivot kan påvirkes av filtrene som brukes i en pivottabell, etter relasjoner mellom tabeller og filtre som brukes i formler. Kontekst er det som gjør det mulig å utføre dynamisk analyse. Det er viktig å forstå kontekst for å bygge og feilsøke formler.
Det finnes ulike typer kontekst: radkontekst, spørringskontekst og filterkontekst.
Radkontekst kan ses på som «gjeldende rad». Hvis du har opprettet en beregnet kolonne, består radkonteksten av verdiene i hver enkelt rad og verdier i kolonner som er relatert til gjeldende rad. Det finnes også noen funksjoner (EARLIER og EARLIEST) som henter en verdi fra gjeldende rad, og deretter bruker denne verdien mens du utfører en operasjon over en hel tabell.
Spørringskontekst refererer til delsettet med data som er implisitt opprettet for hver celle i en pivottabell, avhengig av rad- og kolonneoverskriftene.
Filterkontekst er settet med verdier som tillates i hver kolonne, basert på filterbetingelser som ble brukt på raden, eller som er definert av filteruttrykk i formelen.
Radkontekst
Hvis du oppretter en formel i en beregnet kolonne, inneholder radkonteksten for formelen verdiene fra alle kolonnene i gjeldende rad. Hvis tabellen er relatert til en annen tabell, inneholder innholdet også alle verdiene fra den andre tabellen som er relatert til gjeldende rad.
Anta for eksempel at du oppretter en beregnet kolonne, =[Frakt] + [Avgift], som legger sammen to kolonner fra samme tabell. Denne formelen fungerer som formler i en Excel-tabell, som automatisk refererer til verdier fra samme rad. Vær oppmerksom på at tabeller er forskjellige fra områder: du kan ikke referere til en verdi fra raden før gjeldende rad ved hjelp av områdenotering, og du kan ikke referere til en vilkårlig enkeltverdi i en tabell eller celle. Du må alltid arbeide med tabeller og kolonner.
Radkontekst følger automatisk relasjonene mellom tabeller for å bestemme hvilke rader i relaterte tabeller som er knyttet til gjeldende rad.
Formelen nedenfor bruker for eksempel RELATED-funksjonen til å hente en avgiftsverdi fra en relatert tabell, basert på området som ordren ble sendt til. Avgiftsverdien bestemmes ved å bruke verdien for området i gjeldende tabell, slå opp området i den relaterte tabellen og deretter hente avgiftssatsen for området fra den relaterte tabellen.
= [Freight] + RELATED('Region'[TaxRate])
Denne formelen henter ganske enkelt avgiftssatsen for gjeldende område, fra Område-tabellen. Du trenger ikke å vite eller angi nøkkelen som kobler sammen tabellene.
Kontekst for flere rader
I tillegg inkluderer DAX funksjoner som gjentar beregninger over en tabell. Disse funksjonene kan ha flere gjeldende rader og gjeldende radkontekster. Når det gjelder programmering, kan du opprette formler som gjentas over en indre og ytre løkke.
Anta for eksempel at arbeidsboken inneholder en Produkter-tabell og en Salgstabell . Det kan være lurt å gå gjennom hele salgstabellen, som er full av transaksjoner som involverer flere produkter, og finne det største antallet som er bestilt for hvert produkt i én transaksjon.
I Excel krever denne beregningen en rekke mellomliggende sammendrag, som må bygges på nytt hvis dataene endres. Hvis du er en avansert bruker av Excel, kan det hende du kan bygge matriseformler som gjør jobben. Du kan også skrive nestede merkinger i en relasjonsdatabase.
Med DAX kan du imidlertid bygge én formel som returnerer den riktige verdien, og resultatene oppdateres automatisk når du legger til data i tabellene.
=MAXX(FILTER(Sales,[ProdKey]=EARLIER([ProdKey])),Sales[OrderQty])
Hvis du vil ha en detaljert gjennomgang av denne formelen, kan du se EARLIER-funksjonen.
Kort sagt lagrer EARLIER-funksjonen radkonteksten fra operasjonen som gikk forut for gjeldende operasjon. Funksjonen lagrer til enhver tid to sett med kontekst i minnet: ett sett med kontekst representerer gjeldende rad for den indre løkken i formelen, og et annet sett med kontekst representerer gjeldende rad for den ytre løkken i formelen. DAX mater automatisk verdier mellom de to løkkene, slik at du kan opprette komplekse aggregater.
Spørringskontekst
Spørringskontekst refererer til delsettet med data som er implisitt hentet for en formel. Når du slipper et mål eller et annet verdifelt i en celle i en pivottabell, undersøker Power Pivot-motoren rad- og kolonneoverskriftene, slicerne og rapportfiltrene for å bestemme konteksten. Deretter foretar Power Pivot de nødvendige beregningene for å fylle ut hver celle i pivottabellen. Datasettet som hentes, er spørringskonteksten for hver celle.
Fordi konteksten kan endres avhengig av hvor du plasserer formelen, endres resultatene av formelen også avhengig av om du bruker formelen i en pivottabell med mange grupperinger og filtre, eller i en beregnet kolonne uten filtre og minimal kontekst.
Anta for eksempel at du oppretter denne enkle formelen som summerer verdiene i Fortjeneste-kolonnen i Salg-tabellen :
=SUMMER('Salg'[Fortjeneste])
Hvis du bruker denne formelen i en beregnet kolonne i Salg-tabellen , vil resultatene for formelen være de samme for hele tabellen, fordi spørringskonteksten for formelen alltid er hele datasettet i Salg-tabellen . Resultatene får fortjeneste for alle områder, alle produkter, alle år og så videre.
Vanligvis ønsker du imidlertid ikke å se det samme resultatet hundrevis av ganger, men i stedet ønsker du å få fortjenesten for et bestemt år, et bestemt land eller område, et bestemt produkt eller en kombinasjon av disse, og deretter få en totalsum.
I en pivottabell er det enkelt å endre konteksten ved å legge til eller fjerne kolonne- og radoverskrifter og ved å legge til eller fjerne slicere. Du kan opprette en formel som den ovenfor, i et mål, og deretter slippe den i en pivottabell. Når du legger til kolonne- eller radoverskrifter i pivottabellen, endrer du spørringskonteksten der målet evalueres. Oppdelings- og filtreringsoperasjoner påvirker også konteksten. Derfor evalueres den samme formelen, som brukes i en pivottabell, i en annen spørringskontekst for hver celle.
Filterkontekst
Filterkontekst legges til når du angir filterbetingelser for settet med verdier som tillates i en kolonne eller tabell, ved å bruke argumenter til en formel. Filterkontekst gjelder oppå andre kontekster, for eksempel radkontekst eller spørringskontekst.
En pivottabell beregner for eksempel verdiene for hver celle basert på rad- og kolonneoverskriftene, som beskrevet i den forrige inndelingen om spørringskontekst. I målene eller de beregnede kolonnene du legger til i pivottabellen, kan du imidlertid angi filteruttrykk for å kontrollere verdiene som brukes av formelen. Du kan også selektivt fjerne filtrene på bestemte kolonner.
Hvis du vil ha mer informasjon om hvordan du oppretter filtre i formler, kan du se filterfunksjonene.
Hvis du vil se et eksempel på hvordan filtre kan fjernes for å opprette totalsummer, kan du se ALL-funksjonen.
Hvis du vil ha eksempler på hvordan du selektivt fjerner og bruker filtre i formler, kan du se ALLEXCEPT-funksjonen.
Derfor må du se gjennom definisjonen av mål eller formler som brukes i en pivottabell, slik at du er klar over filterkontekst når du tolker resultatene av formler.
Fastslå kontekst i formler
Når du oppretter en formel, søker Power Pivot for Excel først etter generell syntaks, og deretter kontrollerer den navnene på kolonner og tabeller som du oppgir mot mulige kolonner og tabeller i gjeldende kontekst. Hvis Power Pivot ikke finner kolonnene og tabellene som er angitt av formelen, får du en feilmelding.
Kontekst bestemmes som beskrevet i de foregående inndelingene, ved å bruke de tilgjengelige tabellene i arbeidsboken, eventuelle relasjoner mellom tabellene og eventuelle filtre som er brukt.
Hvis du for eksempel nettopp har importert noen data til en ny tabell og ikke har brukt noen filtre, er hele settet med kolonner i tabellen en del av gjeldende kontekst. Hvis du har flere tabeller som er koblet etter relasjoner, og du arbeider i en pivottabell som er filtrert ved å legge til kolonneoverskrifter og bruke slicere, inkluderer konteksten de relaterte tabellene og eventuelle filtre på dataene.
Kontekst er et kraftig konsept som også kan gjøre det vanskelig å feilsøke formler. Vi anbefaler at du begynner med enkle formler og relasjoner for å se hvordan kontekst fungerer, og deretter begynner å eksperimentere med enkle formler i pivottabeller. Den følgende delen inneholder også noen eksempler på hvordan formler bruker ulike typer kontekst til å returnere resultater dynamisk.
Eksempler på kontekst i formler
-
RELATED-funksjonen utvider konteksten for gjeldende rad til å inkludere verdier i en relatert kolonne. Dette lar deg utføre oppslag. Eksemplet i dette emnet illustrerer samhandlingen mellom filtrering og radkontekst.
-
FILTER-funksjonen lar deg angi radene som skal inkluderes i gjeldende kontekst. Eksemplene i dette emnet illustrerer også hvordan du bygger inn filtre i andre funksjoner som utfører aggregater.
-
ALL-funksjonen angir kontekst i en formel. Du kan bruke den til å overstyre filtre som brukes som resultat av spørringskontekst.
-
Med ALLEXCEPT-funksjonen kan du fjerne alle filtre unntatt ett du angir. Begge emnene omfatter eksempler som veileder deg gjennom å bygge formler og forstå komplekse kontekster.
-
Funksjonene EARLIER og EARLIEST lar deg gå gjennom tabeller ved å utføre beregninger, samtidig som du refererer til en verdi fra en indre løkke. Hvis du er kjent med begrepet rekursjon og med indre og ytre løkker, vil du sette pris på kraften som funksjonene EARLIER og EARLIEST gir. Hvis du ikke har brukt disse konseptene før, bør du følge trinnene i eksemplet nøye for å se hvordan de indre og ytre kontekstene brukes i beregninger.
Referanseintegritet
Denne delen beskriver noen avanserte konsepter relatert til manglende verdier i Power Pivot tabeller som er koblet sammen av relasjoner. Denne inndelingen kan være nyttig for deg hvis du har arbeidsbøker med flere tabeller og komplekse formler og ønsker hjelp til å forstå resultatene.
Hvis du ikke har brukt relasjonelle datakonsepter før, anbefaler vi at du først leser det innledende emnet, Relasjonsoversikt.
Referanseintegritet og Power Pivot relasjoner
Power Pivot krever ikke at referanseintegritet håndheves mellom to tabeller for å definere en gyldig relasjon. I stedet opprettes en tom rad på «én»-enden av hver én-til-mange-relasjon og brukes til å håndtere alle rader som ikke samsvarer, fra den relaterte tabellen. Den fungerer effektivt som en YTRE SQL-sammenføyning.
Hvis du grupperer data etter én side av relasjonen i pivottabeller, grupperes alle unike data på mange-siden av relasjonen sammen og inkluderes i totalsummer med en tom radoverskrift. Den tomme overskriften tilsvarer omtrent det ukjente medlemmet.
Forstå det ukjente medlemmet
Konseptet med det ukjente medlemmet er sannsynligvis kjent for deg hvis du har jobbet med flerdimensjonale databasesystemer, for eksempel SQL Server Analysis Services. Hvis termen er ny for deg, forklarer eksemplet nedenfor hva det ukjente medlemmet er, og hvordan det påvirker beregninger.
La oss si at du oppretter en beregning som summerer månedlig salg for hver butikk, men en kolonne i Salg-tabellen mangler en verdi for butikknavnet. Gitt at tabellene for Store og Salg er koblet sammen med butikknavnet, hva forventer du å skje i formelen? Hvordan skal pivottabellgruppen eller vise salgstallene som ikke er relatert til et eksisterende lager?
Dette problemet er vanlig i datalagre, der store tabeller med faktadata må være logisk relatert til dimensjonstabeller som inneholder informasjon om butikker, områder og andre attributter som brukes til å kategorisere og beregne fakta. For å løse problemet blir alle nye fakta som ikke er relatert til en eksisterende enhet, midlertidig tilordnet til det ukjente medlemmet. Derfor vises ikke-relaterte fakta gruppert i en pivottabell under en tom overskrift.
Behandling av tomme verdier kontra den tomme raden
Tomme verdier er forskjellige fra de tomme radene som legges til for å gi plass til det ukjente medlemmet. Den tomme verdien er en spesiell verdi som brukes til å representere nullverdier, tomme strenger og andre manglende verdier. Hvis du vil ha mer informasjon om den tomme verdien, i tillegg til andre DAX-datatyper, kan du se datatyper i datamodeller.