Med kontekst kan du udføre dynamisk analyse, hvor resultatet af en formel kan ændres, så det afspejler den aktuelle markering af række eller celle samt eventuelle relaterede data. Forståelse af kontekst og effektiv brug af kontekst er meget vigtigt for at opbygge højtydende formler, dynamiske analyser og for fejlfinding af problemer i formler.
I dette afsnit defineres de forskellige typer kontekst: rækkekontekst, forespørgselskontekst og filterkontekst. Her forklares det, hvordan kontekst evalueres for formler i beregnede kolonner og pivottabeller.
Den sidste del af denne artikel indeholder links til detaljerede eksempler, der illustrerer, hvordan resultaterne af formler ændres i henhold til konteksten.
Forstå konteksten
Formler i Power Pivot kan påvirkes af de filtre, der anvendes i en pivottabel, af relationer mellem tabeller og af filtre, der anvendes i formler. Kontekst er det, der gør det muligt at udføre dynamisk analyse. Det er vigtigt at forstå konteksten for at opbygge og foretage fejlfinding af formler.
Der findes forskellige typer kontekst: rækkekontekst, forespørgselskontekst og filterkontekst.
Rækkekontekst kan betragtes som "den aktuelle række". Hvis du har oprettet en beregnet kolonne, består rækkekonteksten af værdierne i hver enkelt række og værdierne i kolonner, der er relateret til den aktuelle række. Der er også nogle funktioner (TIDLIGERE og TIDLIGST), der henter en værdi fra den aktuelle række og derefter bruger denne værdi, mens der udføres en handling over en hel tabel.
Forespørgselskontekst refererer til det undersæt af data, der implicit oprettes for hver celle i en pivottabel, afhængigt af række- og kolonneoverskrifterne.
Filterkontekst er det sæt værdier, der er tilladt i hver kolonne, baseret på filterbegrænsninger, der blev anvendt på rækken, eller som er defineret af filterudtryk i formlen.
Rækkekontekst
Hvis du opretter en formel i en beregnet kolonne, medtager rækkekonteksten for den pågældende formel værdierne fra alle kolonner i den aktuelle række. Hvis tabellen er relateret til en anden tabel, omfatter indholdet også alle de værdier fra denne tabel, der er relateret til den aktuelle række.
Antag f.eks., at du opretter en beregnet kolonne, =[Fragt] + [Moms], der sammenlægger to kolonner fra den samme tabel. Denne formel fungerer som formler i en Excel-tabel, som automatisk refererer til værdier fra den samme række. Bemærk, at tabeller er forskellige fra områder: Du kan ikke referere til en værdi fra rækken før den aktuelle række ved hjælp af områdenotation, og du kan ikke referere til en vilkårlig enkelt værdi i en tabel eller celle. Du skal altid arbejde med tabeller og kolonner.
Rækkekontekst følger automatisk relationerne mellem tabeller for at afgøre, hvilke rækker i relaterede tabeller, der er knyttet til den aktuelle række.
Følgende formel bruger f.eks. funktionen RELATERET til at hente et momsværdi fra en relateret tabel baseret på det område, som ordren blev sendt til. Momsværdien bestemmes ved hjælp af værdien for område i den aktuelle tabel, ved at slå området op i den relaterede tabel og derefter hente momsprocenten for det pågældende område fra den relaterede tabel.
= [Freight] + RELATED('Region'[TaxRate])
Denne formel henter ganske enkelt momsprocenten for det aktuelle område fra tabellen Område. Du behøver ikke at kende eller angive den nøgle, der forbinder tabellerne.
Kontekst med flere rækker
Desuden indeholder DAX funktioner, der gentager beregninger over en tabel. Disse funktioner kan have flere aktuelle rækker og aktuelle rækkekontekster. I programmeringstermer kan du oprette formler, der recurser over en indre og ydre løkke.
Antag f.eks., at projektmappen indeholder tabellerne Produkter og Salg . Det kan være en god ide at gennemgå hele tabellen Salg, som er fuld af transaktioner med flere produkter, og finde det største antal bestilt for hvert produkt i en hvilken som helst transaktion.
I Excel kræver denne beregning en række mellemliggende oversigter, som skal genopbygges, hvis dataene ændres. Hvis du er superbruger af Excel, kan du muligvis bygge matrixformler, der kan gøre jobbet. Alternativt kan du i en relationsdatabase skrive indlejrede undermarkeringer.
Men med DAX kan du bygge en enkelt formel, der returnerer den korrekte værdi, og resultaterne opdateres automatisk, hver gang du føjer data til tabellerne.
=MAKSX(FILTER(Salg,[ProdKey]=EARLIER([ProdKey])),Salg[Ordreantal])
Du kan finde en detaljeret gennemgang af denne formel under funktionen TIDLIGERE.
Kort sagt gemmer funktionen TIDLIGERE rækkekonteksten fra den handling, der gik forud for den aktuelle handling. Funktionen gemmer hele tiden to sæt kontekst i hukommelsen: Et sæt kontekst repræsenterer den aktuelle række for formlens indre løkke, og et andet sæt kontekst repræsenterer den aktuelle række for formlens ydre løkke. DAX føder automatisk værdier mellem de to løkker, så du kan oprette komplekse aggregater.
Forespørgselskontekst
Forespørgselskontekst refererer til det undersæt af data, der implicit hentes for en formel. Når du slipper en måling eller et andet værdifelt i en celle i en pivottabel, undersøger PowerPivot-programmet række- og kolonneoverskrifter, udsnitsværktøjerne og rapportfiltrene for at bestemme konteksten. Derefter foretager Power Pivot de nødvendige beregninger for at udfylde hver celle i pivottabellen. Det sæt data, der hentes, er forespørgselskonteksten for hver celle.
Da konteksten kan ændre sig afhængigt af, hvor du placerer formlen, ændres resultatet af formlen også, afhængigt af om du bruger formlen i en pivottabel med mange grupperinger og filtre eller i en beregnet kolonne uden filtre og minimal kontekst.
Antag f.eks., at du opretter denne enkle formel, der opsummerer værdierne i kolonnen Overskud i tabellen Salg :
=SUM('Salg'[Profit])
Hvis du bruger denne formel i en beregnet kolonne i tabellen Salg , vil resultatet for formlen være det samme for hele tabellen, fordi forespørgselskonteksten for formlen altid er hele datasættet i tabellen Salg . Dine resultater vil have overskud for alle områder, alle produkter, alle år og så videre.
Men du ønsker typisk ikke at se det samme resultat hundredvis af gange, men i stedet vil du have overskuddet for et bestemt år, et bestemt land eller område, et bestemt produkt eller en kombination af disse, og derefter få en hovedtotal.
I en pivottabel er det nemt at ændre konteksten ved at tilføje eller fjerne kolonne- og rækkeoverskrifter og ved at tilføje eller fjerne udsnit. Du kan oprette en formel som den ovenfor i en måling og derefter slippe den i en pivottabel. Når du føjer kolonne- eller rækkeoverskrifter til pivottabellen, ændrer du den forespørgselskontekst, som målingen evalueres i. Udsnits- og filtreringshandlinger påvirker også konteksten. Derfor evalueres den samme formel, som bruges i en pivottabel, i en anden forespørgselskontekst for hver celle.
Filterkontekst
Filterkontekst tilføjes, når du angiver filterbegrænsninger på det sæt af værdier, der er tilladt i en kolonne eller tabel, ved hjælp af argumenter til en formel. Filterkontekst anvendes oven på andre kontekster, f.eks. rækkekontekst eller forespørgselskontekst.
En pivottabel beregner f.eks. sine værdier for hver celle baseret på række- og kolonneoverskrifter, som beskrevet i det forrige afsnit om forespørgselskontekst. Inden for de målinger eller beregnede kolonner, du føjer til pivottabellen, kan du dog angive filterudtryk for at styre de værdier, der bruges af formlen. Du kan også selektivt rydde filtrene på bestemte kolonner.
Du kan finde flere oplysninger om, hvordan du opretter filtre i formler, under filterfunktionerne.
Du kan finde et eksempel på, hvordan filtre kan ryddes for at oprette hovedtotaler, under funktionen ALL.
Du kan finde eksempler på, hvordan du selektivt kan rydde og anvende filtre i formler, under funktionen ALLEXCEPT .
Derfor skal du gennemgå definitionen af målinger eller formler, der bruges i en pivottabel, så du er opmærksom på filterkonteksten, når du fortolker resultaterne af formler.
Fastslå kontekst i formler
Når du opretter en formel, kontrollerer Power Pivot til Excel først, om den generelle syntaks og derefter navnene på kolonnerne og tabellerne, som du angiver, mod mulige kolonner og tabeller i den aktuelle kontekst. Hvis Power Pivot ikke kan finde de kolonner og tabeller, der er angivet af formlen, får du en fejl.
Konteksten fastlægges som beskrevet i de foregående afsnit ved hjælp af de tilgængelige tabeller i projektmappen, eventuelle relationer mellem tabellerne og eventuelle filtre, der er blevet anvendt.
Hvis du f.eks. lige har importeret nogle data til en ny tabel og ikke har anvendt nogen filtre, er hele sættet af kolonner i tabellen en del af den aktuelle kontekst. Hvis du har flere tabeller, der er kædet sammen af relationer, og du arbejder i en pivottabel, der er filtreret ved at tilføje kolonneoverskrifter og bruge udsnit, omfatter konteksten også de relaterede tabeller og eventuelle filtre på dataene.
Kontekst er et effektivt begreb, som også kan gøre det svært at foretage fejlfinding af formler. Vi anbefaler, at du starter med enkle formler og relationer for at se, hvordan konteksten fungerer, og derefter begynder at eksperimentere med simple formler i pivottabeller. Følgende afsnit indeholder også nogle eksempler på, hvordan formler bruger forskellige typer kontekst til dynamisk at returnere resultater.
Eksempler på kontekst i formler
- Funktionen RELATED udvider konteksten for den aktuelle række til at medtage værdier i en relateret kolonne. Dette giver dig mulighed for at foretage opslag. Eksemplet i dette emne illustrerer interaktionen mellem filtrering og rækkekontekst.
- Med funktionen FILTRER kan du angive de rækker, der skal medtages i den aktuelle kontekst. Eksemplerne i dette emne illustrerer også, hvordan du integrerer filtre i andre funktioner, der udfører aggregeringer.
- Funktionen ALLE angiver kontekst i en formel. Du kan bruge det til at tilsidesætte filtre, der anvendes som et resultat af forespørgselskonteksten.
- Med funktionen ALLEUNDTAGEN kan du fjerne alle filtre med undtagelse af ét, du angiver. Begge emner indeholder eksempler, der hjælper dig med at opbygge formler og forstå komplekse sammenhænge.
- Med funktionerne EARLIER og EARLIEST kan du gå gennem tabeller i løkke ved at udføre beregninger, mens du refererer til en værdi fra en indre løkke. Hvis du er bekendt med begrebet rekursion og med indre og ydre løkker, vil du sætte pris på den kraft, som funktionerne EARLIER og EARLIEST giver. Hvis disse begreber er nyt for dig, skal du følge trinnene i eksemplet nøje for at se, hvordan de indre og ydre kontekster bruges i beregninger.
Referentiel integritet
I dette afsnit diskuteres nogle avancerede koncepter, der er relateret til manglende værdier i Power Pivot-tabeller, der er forbundet med relationer. Dette afsnit kan være nyttigt for dig, hvis du har projektmapper med flere tabeller og komplekse formler og vil have hjælp til at forstå resultaterne.
Hvis du er ny bruger af relationelle databegreber, anbefaler vi, at du først læser det indledende emne, Oversigt over relationer.
Referentiel integritet og Power Pivot-relationer
Power Pivot kræver ikke, at der skal gennemtvinges referentiel integritet mellem to tabeller for at definere en gyldig relation. I stedet oprettes en tom række i den "en"-ende af hver en-til-mange-relation, som bruges til at håndtere alle ikke-matchende rækker fra den relaterede tabel. Den fungerer effektivt som en ydre SQL-joinforbindelse.
Hvis du i pivottabeller grupperer data efter en-siden af relationen, grupperes ikke-relaterede data på mange-siden af relationen sammen og medtages i totaler med en tom rækkeoverskrift. Den tomme overskrift svarer stort set til det "ukendte medlem".
Forstå det ukendte medlem
Begrebet ukendt medlem kender du sikkert, hvis du har arbejdet med flerdimensionelle databasesystemer, f.eks. SQL Server Analysis Services. Hvis udtrykket er nyt for dig, forklarer følgende eksempel, hvad det ukendte medlem er, og hvordan det påvirker beregninger.
Antag, at du opretter en beregning, der summerer det månedlige salg for hver butik, men en kolonne i tabellen Salg mangler en værdi for butiksnavnet. Da tabellerne for Store og Salg er forbundet ved hjælp af butiksnavnet, hvad forventer du så sker i formlen? Hvordan skal pivottabellen gruppere eller vise salgstal, der ikke er relateret til en eksisterende butik?
Dette problem er almindeligt i datavarehuse, hvor store tabeller med fakta logisk skal relateres til dimensionstabeller, der indeholder oplysninger om butikker, områder og andre attributter, der bruges til at kategorisere og beregne fakta. For at løse dette problem tildeles alle nye oplysninger, der ikke er relateret til en eksisterende enhed, midlertidigt til det ukendte medlem. Det er grunden til, at ikke-relaterede fakta vises grupperet i en pivottabel under en tom overskrift.
Behandling af tomme værdier kontra den tomme række
Tomme værdier er forskellige fra de tomme rækker, der er tilføjet for at give plads til det ukendte medlem. Den tomme værdi er en særlig værdi, der bruges til at repræsentere null-værdier, tomme strenge og andre manglende værdier. Du kan finde flere oplysninger om den tomme værdi samt andre DAX-datatyper under Datatyper i datamodeller.