DAX oversikt
Data Analysis Expressions (DAX) er et formeluttrykksspråk som brukes i Analysis Services, Power BI og Power Pivot i Excel. DAX formler inkluderer funksjoner, operatorer og verdier for å utføre avanserte beregninger og spørringer på data i relaterte tabeller og kolonner i tabelldatamodeller.
Denne artikkelen inneholder bare en grunnleggende innføring i de viktigste konseptene i DAX. Den beskriver DAX når den gjelder for alle produktene som bruker den. Enkelte funksjoner gjelder kanskje ikke for bestemte produkter eller brukstilfeller. Se dokumentasjonen for produktet som beskriver den bestemte implementeringen av DAX.
Beregninger
DAX formler brukes i mål, beregnede kolonner, beregnede tabeller og sikkerhet på radnivå.
Tiltak
Mål er dynamiske beregningsformler der resultatene endres avhengig av kontekst. Mål brukes i rapportering som støtter kombinasjon og filtrering av modelldata ved hjelp av flere attributter, for eksempel en Power BI-rapport eller excel-pivottabell eller pivotdiagram. Mål opprettes ved hjelp av DAX formellinjen i modellutformingen.
En formel i et mål kan bruke standard aggregasjonsfunksjoner automatisk opprettet ved hjelp av Autosummer-funksjonen, for eksempel COUNT eller SUM, eller du kan definere din egen formel ved hjelp av DAX formellinjen. Navngitte mål kan sendes som et argument til andre mål.
Når du definerer en formel for et mål på formellinjen, viser en verktøytipsfunksjon en forhåndsvisning av hva resultatene vil være for totalen i gjeldende kontekst, men ellers blir ikke resultatene umiddelbart utdata hvor som helst. Årsaken til at du ikke kan se de (filtrerte) resultatene av beregningen umiddelbart, er at resultatet av et mål ikke kan bestemmes uten kontekst. Hvis du vil evaluere et mål, må du ha et rapportklientprogram som kan gi konteksten som kreves for å hente dataene som er relevante for hver celle, og deretter evaluere uttrykket for hver celle. Denne klienten kan være en Excel-pivottabell eller et pivotdiagram, en Power BI-rapport eller et tabelluttrykk i en DAX-spørring i SQL Server Management Studio (SSMS).
Uavhengig av klienten kjøres en separat spørring for hver celle i resultatene. Det vil si at hver kombinasjon av rad- og kolonneoverskrifter i en pivottabell, eller hvert utvalg av slicere og filtre i en Power BI-rapport, genererer et annet delsett med data som målet beregnes over. Bruk for eksempel denne svært enkle målformelen:
Total Sales = SUM([Sales Amount])
Når en bruker plasserer totalsalg-målet i en rapport, og deretter plasserer kolonnen Produktkategori fra en produkttabell i filtre, beregnes summen av salgsbeløpet og vises for hver produktkategori.
I motsetning til beregnede kolonner inkluderer syntaksen for et mål målets navn foran formelen. I eksemplet som nettopp er angitt, vises navnet totalt salg foran formelen. Når du har opprettet et mål, vises navnet og definisjonen i feltlisten for rapportklientprogrammet, og avhengig av perspektiver og roller er tilgjengelig for alle brukere av modellen.
Hvis du vil ha mer informasjon, kan du se: mål i Power BI Desktopmål i Analysis Servicesmål i Power Pivot-
Beregnede kolonner
En beregnet kolonne er en kolonne som du legger til i en eksisterende tabell (i modellutformingen), og deretter oppretter du en DAX formel som definerer kolonnens verdier. Når en beregnet kolonne inneholder en gyldig DAX formel, beregnes verdiene for hver rad så snart formelen er angitt. Verdier lagres deretter i datamodellen i minnet. I en datotabell, for eksempel når formelen skrives inn i formellinjen:
= [Calendar Year] & " Q" & [Calendar Quarter]
En verdi for hver rad i tabellen beregnes ved å ta verdier fra kolonnen Kalenderår (i samme datotabell), legge til et mellomrom og bokstaven Q, og deretter legge til verdiene fra Kolonnen Kalenderkvarter (i samme datotabell). Resultatet for hver rad i den beregnede kolonnen beregnes umiddelbart og vises for eksempel som 2017 Q1. Kolonneverdier beregnes bare på nytt hvis tabellen eller en relatert tabell behandles (oppdateres) eller modellen fjernes fra minnet og deretter lastes inn på nytt, for eksempel når du lukker og åpner en Power BI Desktop-fil på nytt.
Hvis du vil ha mer informasjon, kan du se: Beregnede kolonner i Power BI Desktopberegnede kolonner i Analysis Servicesberegnede kolonner i Power Pivot.
Beregnede tabeller
En beregnet tabell er et beregnet objekt, basert på et formeluttrykk, avledet fra hele eller deler av andre tabeller i samme modell. I stedet for å spørre og laste inn verdier i den nye tabellens kolonner fra en datakilde, definerer en DAX formel tabellens verdier.
Beregnede tabeller kan være nyttige i en rollespilldimensjon. Et eksempel er Dato-tabellen, som Ordredato, Forsendelsesdato eller Forfallsdato, avhengig av sekundærnøkkelrelasjonen. Ved å opprette en beregnet tabell for ShipDate eksplisitt, får du en frittstående tabell som er tilgjengelig for spørringer, like fullstendig brukbar som alle andre tabeller. Beregnede tabeller er også nyttige når du konfigurerer et filtrert radsett, eller et delsett eller supersett med kolonner fra andre eksisterende tabeller. Dette gjør at du kan beholde den opprinnelige tabellen intakt mens du oppretter variasjoner av tabellen for å støtte bestemte scenarioer.
Beregnede tabeller støtter relasjoner med andre tabeller. Kolonnene i den beregnede tabellen har datatyper, formatering og kan tilhøre en datakategori. Beregnede tabeller kan navngis og vises eller skjules akkurat som alle andre tabeller. Beregnede tabeller beregnes på nytt hvis noen av tabellene den henter data fra, oppdateres eller oppdateres.
Hvis du vil ha mer informasjon, kan du se: Beregnede tabeller i Power BI Desktopberegnede tabeller i Analysis Services.
Sikkerhet på radnivå
Med sikkerhet på radnivå må en DAX formel evalueres til en boolsk TRUE
/FALSE
betingelse, som definerer hvilke rader som kan returneres av resultatene av en spørring av medlemmer av en bestemt rolle. For medlemmer av salgsrollen kan for eksempel Kunder-tabellen med følgende DAX formel:
= Customers[Country] = "USA"
Medlemmer av salgsrollen vil bare kunne vise data for kunder i USA, og aggregater, for eksempel SUM returneres bare for kunder i USA. Sikkerhet på radnivå er ikke tilgjengelig i Power Pivot i Excel.
Når du definerer sekuiritet på radnivå ved hjelp av DAX formel, oppretter du et tillatt radsett. Dette nekter ikke tilgang til andre rader. de returneres ganske enkelt ikke som en del av det tillatte radsettet. Andre roller kan gi tilgang til radene som utelates av DAX formelen. Hvis en bruker er medlem av en annen rolle, og denne rollens sikkerhet på radnivå gir tilgang til det bestemte radsettet, kan brukeren vise data for denne raden.
Sikkerhetsformler på radnivå gjelder for de angitte radene samt relaterte rader. Når en tabell har flere relasjoner, bruker filtre sikkerhet for relasjonen som er aktiv. Sikkerhetsformler på radnivå krysses sammen med andre formler som er definert for relaterte tabeller.
Hvis du vil ha mer informasjon, kan du se: sikkerhet på radnivå (RLS) med Power BIroller i Analysis Services
Spørringer
DAX spørringer kan opprettes og kjøres i SQL Server Management Studio (SSMS) og åpen kildekode-verktøy som DAX Studio (daxstudio.org). I motsetning til DAX beregningsformler, som bare kan opprettes i tabelldatamodeller, kan DAX spørringer også kjøres mot flerdimensjonale analysis services-modeller. DAX spørringer er ofte enklere å skrive og mer effektive enn MDX-spørringer (Multidimensional Data Expressions).
En DAX spørring er en setning som ligner på en SELECT-setning i T-SQL. Den mest grunnleggende typen DAX spørring er en evaluere setning. For eksempel
EVALUATE
( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC
Returnerer i Resultater en tabell som viser bare de produktene med en SafetyStockLevel mindre enn 200, i stigende rekkefølge av EnglishProductName.
Du kan opprette mål som en del av spørringen. Mål finnes bare for varigheten av spørringen. Hvis du vil ha mer informasjon, kan du se DAX spørringer.
Formler
DAX formler er avgjørende for å opprette beregninger i beregnede kolonner og mål, og sikre dataene ved hjelp av sikkerhet på radnivå. Hvis du vil opprette formler for beregnede kolonner og mål, bruker du formellinjen øverst i vinduet for modellutforming eller DAX Redigering. Hvis du vil opprette formler for sikkerhet på radnivå, bruker du dialogboksen Rollebehandling eller Behandle roller. Informasjon i denne delen er ment å komme i gang med å forstå det grunnleggende om DAX formler.
Grunnleggende om formel
DAX formler kan være veldig enkle eller ganske komplekse. Tabellen nedenfor viser noen eksempler på enkle formler som kan brukes i en beregnet kolonne.
Formel | Definisjon |
---|---|
= TODAY() |
Setter inn dagens dato i hver rad i en beregnet kolonne. |
= 3 |
Setter inn verdien 3 i hver rad i en beregnet kolonne. |
= [Column1] + [Column2] |
Legger til verdiene i samme rad i [Kolonne1] og [Kolonne2], og plasserer resultatene i den beregnede kolonnen i samme rad. |
Uansett om formelen du oppretter er enkel eller kompleks, kan du bruke følgende fremgangsmåte når du bygger en formel:
Hver formel må begynne med et likhetstegn (=).
Du kan enten skrive inn eller velge et funksjonsnavn eller skrive inn et uttrykk.
Begynn å skrive inn de første bokstavene i funksjonen eller navnet du vil bruke, og Autofullfør viser en liste over tilgjengelige funksjoner, tabeller og kolonner. Trykk TAB for å legge til et element fra Autofullfør-listen i formelen.
Du kan også klikke Fx-knappen for å vise en liste over tilgjengelige funksjoner. Hvis du vil velge en funksjon fra rullegardinlisten, bruker du piltastene til å utheve elementet og klikker OK for å legge til funksjonen i formelen.
Angi argumentene til funksjonen ved å velge dem fra en rullegardinliste over mulige tabeller og kolonner, eller ved å skrive inn verdier.
Se etter syntaksfeil: Kontroller at alle parenteser er lukket, og kolonner, tabeller og verdier refereres riktig.
Trykk ENTER for å godta formelen.
Notat
I en beregnet kolonne, så snart du skriver inn formelen og formelen er validert, fylles kolonnen ut med verdier. Når du trykker ENTER, lagres måldefinisjonen i en måling med tabellen. Hvis en formel er ugyldig, vises en feil.
I dette eksemplet skal vi se på en formel i et mål kalt Dager i gjeldende kvartal:
Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))
Dette målet brukes til å opprette et sammenligningsforhold mellom en ufullstendig periode og forrige periode. Formelen må ta hensyn til andelen av perioden som har gått, og sammenligne den med samme andel i forrige periode. I dette tilfellet gir [Dager gjeldende kvartal til dato]/[Dager i gjeldende kvartal] proporsjonen som er gått i gjeldende periode.
Denne formelen inneholder følgende elementer:
Formelelement | Beskrivelse |
---|---|
Days in Current Quarter |
Navnet på målet. |
= |
Likhetstegnet (=) starter formelen. |
COUNTROWS |
COUNTROWS teller antall rader i Dato-tabellen |
() |
Åpne og lukke parentes angir argumenter. |
DATESBETWEEN |
Funksjonen DATESBETWEEN returnerer datoene mellom den siste datoen for hver verdi i Dato-kolonnen i Dato-tabellen. |
'Date' |
Angir Dato-tabellen. Tabeller er i enkle anførselstegn. |
[Date] |
Angir Dato-kolonnen i Dato-tabellen. Kolonner er i hakeparenteser. |
, |
|
STARTOFQUARTER |
Funksjonen STARTOFQUARTER returnerer datoen for starten av kvartalet. |
LASTDATE |
Funksjonen LASTDATE returnerer den siste datoen i kvartalet. |
'Date' |
Angir Dato-tabellen. |
[Date] |
Angir Dato-kolonnen i Dato-tabellen. |
, |
|
ENDOFQUARTER |
Funksjonen ENDOFQUARTER |
'Date' |
Angir Dato-tabellen. |
[Date] |
Angir Dato-kolonnen i Dato-tabellen. |
Bruke autofullfør formel
Autofullfør hjelper deg med å angi en gyldig formelsyntaks ved å gi deg alternativer for hvert element i formelen.
Du kan bruke Autofullfør-formelen midt i en eksisterende formel med nestede funksjoner. Teksten rett før innsettingspunktet brukes til å vise verdier i rullegardinlisten, og all tekst etter innsettingspunktet forblir uendret.
Autofullfør legger ikke til den avsluttende parentesen for funksjoner eller samsvarer automatisk med parenteser. Du må kontrollere at hver funksjon er syntaktisk korrekt, eller at du ikke kan lagre eller bruke formelen.
Bruke flere funksjoner i en formel
Du kan neste funksjoner, noe som betyr at du bruker resultatene fra én funksjon som argument for en annen funksjon. Du kan neste opptil 64 funksjonsnivåer i beregnede kolonner. Nestelse kan imidlertid gjøre det vanskelig å opprette eller feilsøke formler. Mange funksjoner er utformet for å brukes utelukkende som nestede funksjoner. Disse funksjonene returnerer en tabell, som ikke kan lagres direkte som et resultat. det må angis som inndata til en tabellfunksjon. Funksjonene SUMX, AVERAGEXog MINX krever for eksempel en tabell som det første argumentet.
Funksjoner
En funksjon er en navngitt formel i et uttrykk. De fleste funksjoner har obligatoriske og valgfrie argumenter, også kalt parametere, som inndata. Når funksjonen kjøres, returneres en verdi. DAX inkluderer funksjoner du kan bruke til å utføre beregninger ved hjelp av datoer og klokkeslett, opprette betingede verdier, arbeide med strenger, utføre oppslag basert på relasjoner og muligheten til å gjenta over en tabell for å utføre rekursive beregninger. Hvis du er kjent med Excel-formler, vises mange av disse funksjonene svært like. DAX formler er imidlertid forskjellige på følgende viktige måter:
En DAX-funksjon refererer alltid til en fullstendig kolonne eller en tabell. Hvis du bare vil bruke bestemte verdier fra en tabell eller kolonne, kan du legge til filtre i formelen.
Hvis du trenger å tilpasse beregninger etter rad, DAX inneholder funksjoner som lar deg bruke gjeldende radverdi eller en relatert verdi som en type parameter, til å utføre beregninger som varierer etter kontekst. Hvis du vil forstå hvordan disse funksjonene fungerer, kan du se kontekst i denne artikkelen.
DAX inneholder mange funksjoner som returnerer en tabell, i stedet for en verdi. Tabellen vises ikke i en rapporteringsklient, men brukes til å gi inndata til andre funksjoner. Du kan for eksempel hente en tabell og deretter telle de distinkte verdiene i den, eller beregne dynamiske summer på tvers av filtrerte tabeller eller kolonner.
DAX funksjoner inkluderer en rekke tidsintelligens funksjoner. Disse funksjonene lar deg definere eller velge datointervaller og utføre dynamiske beregninger basert på disse datoene eller området. Du kan for eksempel sammenligne summer på tvers av parallelle perioder.
Aggregasjonsfunksjoner
Aggregasjonsfunksjoner beregner en (skalar) verdi, for eksempel antall, sum, gjennomsnitt, minimum eller maksimum for alle rader i en kolonne eller tabell som definert av uttrykket. Hvis du vil ha mer informasjon, kan du se Aggregasjonsfunksjoner.
Dato- og klokkeslettfunksjoner
Dato- og klokkeslettfunksjonene i DAX ligner dato- og klokkeslettfunksjoner i Microsoft Excel. DAX-funksjoner er imidlertid basert på en datetime- datatype fra 1. mars 1900. Hvis du vil ha mer informasjon, kan du se dato- og klokkeslettfunksjoner.
Filterfunksjoner
Filterfunksjonene i DAX returnere bestemte datatyper, slå opp verdier i relaterte historier og filtrere etter relaterte verdier. Oppslagsfunksjonene fungerer ved hjelp av tabeller og relasjoner, for eksempel en database. Filtreringsfunksjonene lar deg manipulere datakonteksten for å opprette dynamiske beregninger. Hvis du vil ha mer informasjon, kan du se Filterfunksjoner.
Økonomiske funksjoner
De økonomiske funksjonene i DAX brukes i formler som utfører økonomiske beregninger, for eksempel netto nåverdi og avkastning. Disse funksjonene ligner på økonomiske funksjoner som brukes i Microsoft Excel. Hvis du vil ha mer informasjon, kan du se Økonomiske funksjoner.
Informasjonsfunksjoner
En informasjonsfunksjon ser på cellen eller raden som er angitt som et argument, og forteller deg om verdien samsvarer med den forventede typen.
ISERROR-funksjonen returnerer for eksempel TRUE
hvis verdien du refererer til, inneholder en feil. Hvis du vil ha mer informasjon, kan du se Informasjonsfunksjoner.
Logiske funksjoner
Logiske funksjoner virker på et uttrykk for å returnere informasjon om verdiene i uttrykket.
TRUE
-funksjonen gir deg for eksempel beskjed om et uttrykk du evaluerer, returnerer en TRUE
verdi. Hvis du vil ha mer informasjon, kan du se Logiske funksjoner.
Matematiske og trigonometriske funksjoner
De matematiske funksjonene i DAX er svært lik de matematiske og trigonometriske funksjonene i Excel. Det finnes noen mindre forskjeller i de numeriske datatypene som brukes av DAX funksjoner. Hvis du vil ha mer informasjon, kan du se Matematikk- og trigsfunksjoner.
Andre funksjoner
Disse funksjonene utfører unike handlinger som ikke kan defineres av noen av kategoriene de fleste andre funksjoner tilhører. Hvis du vil ha mer informasjon, kan du se Andre funksjoner.
Relasjonsfunksjoner
Relasjonsfunksjoner i DAX lar deg returnere verdier fra en annen relatert tabell, angi en bestemt relasjon som skal brukes i et uttrykk, og angi kryssfiltreringsretning. Hvis du vil ha mer informasjon, kan du se Relasjonsfunksjoner.
Statistikkfunksjoner
Statistiske funksjoner beregner verdier relatert til statistiske fordelinger og sannsynlighet, for eksempel standardavvik og antall permutasjoner. Hvis du vil ha mer informasjon, kan du se Statistiske funksjoner.
Tekstfunksjoner
Tekstfunksjoner i DAX er svært lik sine kolleger i Excel. Du kan returnere en del av en streng, søke etter tekst i en streng eller kjede sammen strengverdier. DAX inneholder også funksjoner for å kontrollere formatene for datoer, klokkeslett og tall. Hvis du vil ha mer informasjon, kan du se Tekstfunksjoner.
Tidsintelligensfunksjoner
Tidsintelligensfunksjonene i DAX lar deg opprette beregninger som bruker innebygd kunnskap om kalendere og datoer. Ved å bruke tids- og datointervaller i kombinasjon med aggregasjoner eller beregninger, kan du bygge meningsfulle sammenligninger på tvers av sammenlignbare tidsperioder for salg, beholdning og så videre. Hvis du vil ha mer informasjon, kan du se Tidsintelligensfunksjoner (DAX).
Tabellmanipuleringsfunksjoner
Disse funksjonene returnerer en tabell eller manipulerer eksisterende tabeller. Ved å bruke ADDCOLUMNS kan du for eksempel legge til beregnede kolonner i en angitt tabell, eller du kan returnere en sammendragstabell over et sett med grupper med SUMMARIZECOLUMNS-funksjonen. Hvis du vil ha mer informasjon, kan du se Tabellmanipuleringsfunksjoner.
Variabler
Du kan opprette variabler i et uttrykk ved hjelp av VAR. VAR teknisk sett ikke er en funksjon, er det et nøkkelord for å lagre resultatet av et uttrykk som en navngitt variabel. Denne variabelen kan deretter sendes som et argument til andre måluttrykk. For eksempel:
VAR
TotalQty = SUM ( Sales[Quantity] )
Return
IF (
TotalQty > 1000,
TotalQty * 0.95,
TotalQty * 1.25
)
I dette eksemplet kan TotalQty sendes som en navngitt variabel til andre uttrykk. Variabler kan være av en hvilken som helst skalardatatype, inkludert tabeller. Bruk av variabler i DAX formler kan være utrolig kraftig.
Datatyper
Du kan importere data til en modell fra mange forskjellige datakilder som kan støtte ulike datatyper. Når du importerer data til en modell, konverteres dataene til én av datatypene i tabellmodellen. Når modelldataene brukes i en beregning, konverteres dataene til en DAX datatype for varigheten og utdataene i beregningen. Når du oppretter en DAX formel, vil termene som brukes i formelen, automatisk bestemme verdidatatypen som returneres.
DAX støtter følgende datatyper:
Datatype i modell | Datatype i DAX | Beskrivelse |
---|---|---|
Whole Number |
En heltallsverdi på 64 biter (åtte byte) 1, 2 | Tall som ikke har desimaler. Heltall kan være positive eller negative tall, men må være heltall mellom -9 223 372 036 854 775 808 (-2^63) og 9 223 372 036 854 775 807 (2^63-1). |
Decimal Number |
Et reelt tall på 64 biter (åtte byte) 1, 2 | Reelle tall er tall som kan ha desimaler. Reelle tall dekker et bredt spekter av verdier: Negative verdier fra -1,79E +308 til -2,23E -308 Null Positive verdier fra 2,23E -308 til 1,79E + 308 Antall signifikante sifre er imidlertid begrenset til 17 desimaler. |
Boolean |
Boolsk | Enten en Sann- eller Usann-verdi. |
Text |
Streng | En Unicode-tegndatastreng. Kan være strenger, tall eller datoer representert i et tekstformat. |
Date |
Dato/klokkeslett | Datoer og klokkeslett i en godtatt representasjon av dato/klokkeslett. Gyldige datoer er alle datoer etter 1. mars 1900. |
Currency |
Valuta | Valutadatatypen tillater verdier mellom -922 337 203 685 477,5808 til 922 337 203 685 477,5807 med fire desimaltall med fast presisjon. |
N/A |
Blank | En tom er en datatype i DAX som representerer og erstatter SQL-nullverdier. Du kan opprette en tom verdi ved hjelp av BLANK-funksjonen, og teste for tomme celler ved hjelp av den logiske funksjonen ISBLANK. |
Tabelldatamodeller inkluderer også datatypen Tabell som inndata eller utdata til mange DAX funksjoner. For eksempel tar FILTER-funksjonen en tabell som inndata og sender ut en annen tabell som bare inneholder radene som oppfyller filterbetingelsene. Ved å kombinere tabellfunksjoner med aggregasjonsfunksjoner kan du utføre komplekse beregninger over dynamisk definerte datasett.
Selv om datatyper vanligvis angis automatisk, er det viktig å forstå datatyper og hvordan de gjelder spesielt for DAX formler. Feil i formler eller uventede resultater, for eksempel, skyldes ofte bruk av en bestemt operator som ikke kan brukes med en datatype angitt i et argument. Formelen, = 1 & 2
, returnerer for eksempel et strengresultat på 12. Formelen, = "1" + "2"
, returnerer imidlertid et heltallsresultat på 3.
Sammenheng
kontekst er et viktig konsept å forstå når du oppretter DAX formler. Kontekst er det som gjør det mulig å utføre dynamisk analyse, ettersom resultatene av en formel endres for å gjenspeile gjeldende rad- eller cellevalg og eventuelle relaterte data. Å forstå kontekst og bruke kontekst effektivt er avgjørende for å bygge høytytende, dynamiske analyser og feilsøkingsproblemer i formler.
Formler i tabellmodeller kan evalueres i en annen kontekst, avhengig av andre utformingselementer:
- Filtre som brukes i en pivottabell eller rapport
- Filtre definert i en formel
- Relasjoner angitt ved hjelp av spesielle funksjoner i en formel
Det finnes ulike typer kontekst: radkontekst, spørringskontekstog filterkontekst.
Radkontekst
radkontekst kan betraktes som «gjeldende rad». 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, = [Freight] + [Tax]
, som legger sammen verdier fra to kolonner, Frakt og Avgift, fra samme tabell. Denne formelen henter automatisk bare verdiene fra gjeldende rad i de angitte kolonnene.
Radkontekst følger også eventuelle relasjoner som er definert mellom tabeller, inkludert relasjoner definert i en beregnet kolonne ved hjelp av DAX formler, for å avgjøre 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 den gjeldende tabellen, slå opp området i den relaterte tabellen og deretter hente skattesatsen for området fra den relaterte tabellen.
= [Freight] + RELATED('Region'[TaxRate])
Denne formelen henter avgiftssatsen for gjeldende område fra Område-tabellen og legger den til verdien i Frakt-kolonnen. I DAX formler trenger du ikke å vite eller angi den bestemte relasjonen som kobler sammen tabellene.
Kontekst for flere rader
DAX inneholder funksjoner som itererer beregninger over en tabell. Disse funksjonene kan ha flere gjeldende rader, hver med sin egen radkontekst. I hovedsak lar disse funksjonene deg opprette formler som utfører operasjoner rekursivt over en indre og ytre løkke.
Anta for eksempel at modellen inneholder en Produkter-tabell og en Sales-tabell. Brukere vil kanskje 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.
Med DAX kan du bygge en enkelt formel som returnerer riktig verdi, og resultatene oppdateres automatisk når som helst en bruker legger til data i tabellene.
= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])
Hvis du vil ha et detaljert eksempel på denne formelen, kan du se EARLIER.
For å oppsummere lagrer EARLIER-funksjonen radkonteksten fra operasjonen som gikk foran gjeldende operasjon. Funksjonen lagrer til enhver tid i minnet to sett med kontekst: Ett sett med kontekst representerer gjeldende rad for formelens indre løkke, 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 implisitt hentes for en formel. Når en bruker for eksempel plasserer et mål eller felt i en rapport, undersøker motoren rad- og kolonneoverskrifter, slicere og rapportfiltre for å bestemme konteksten. De nødvendige spørringene kjøres deretter mot modelldata for å få riktig delsett av data, gjøre beregningene definert av formelen og deretter fylle ut verdier i rapporten.
Fordi konteksten endres avhengig av hvor du plasserer formelen, kan resultatene av formelen også endres. Anta for eksempel at du oppretter en formel som summerer verdiene i kolonnen Fortjeneste i tabellen Salg: = SUM('Sales'[Profit])
. Hvis du bruker denne formelen i en beregnet kolonne i tabellen Salg, vil resultatene for formelen være de samme for hele tabellen, fordi spørringskonteksten for formelen alltid er hele datasettet i tabellen Salg. Resultatene vil ha fortjeneste for alle regioner, alle produkter, alle år og så videre.
Brukere ønsker imidlertid vanligvis ikke å se det samme resultatet hundrevis av ganger, men ønsker i stedet å få fortjenesten for et bestemt år, et bestemt land, et bestemt produkt eller en kombinasjon av disse, og deretter få en totalsum.
I en rapport endres konteksten ved å filtrere, legge til eller fjerne felt og bruke slicere. For hver endring evalueres spørringskonteksten der målet evalueres. Derfor evalueres den samme formelen, som brukes i et mål, i en annen spørringskontekst for hver celle.
Filterkontekst
Filterkontekst er settet med verdier som er tillatt i hver kolonne, eller i verdiene som hentes fra en relatert tabell. Filtre kan brukes på kolonnen i utformeren, eller i presentasjonslaget (rapporter og pivottabeller). Filtre kan også defineres eksplisitt av filteruttrykk i formelen.
Filterkontekst legges til når du angir filterbetingelser for settet med verdier som er tillatt i en kolonne eller tabell, ved å bruke argumenter til en formel. Filterkonteksten gjelder på toppen av andre kontekster, for eksempel radkontekst eller spørringskontekst.
Det finnes mange måter å opprette filterkontekst på i tabellmodeller. I konteksten til klienter som kan bruke modellen, for eksempel Power BI-rapporter, kan brukere opprette filtre på farten ved å legge til slicere eller rapportfiltre på rad- og kolonneoverskriftene. Du kan også angi filteruttrykk direkte i formelen for å angi relaterte verdier, filtrere tabeller som brukes som inndata, eller til dynamisk å få kontekst for verdiene som brukes i beregninger. Du kan også fjerne eller selektivt fjerne filtrene på bestemte kolonner. Dette er svært nyttig når du oppretter formler som beregner totalsummer.
Hvis du vil lære mer om hvordan du oppretter filtre i formler, kan du se FILTER Function (DAX). Hvis du vil se et eksempel på hvordan filtre kan fjernes for å opprette totalsummer, kan du se ALL Function (DAX).
Hvis du vil ha eksempler på hvordan du selektivt fjerner og bruker filtre i formler, kan du se ALLEXCEPT.
Fastslå kontekst i formler
Når du oppretter en DAX formel, testes formelen først for gyldig syntaks, og deretter testes for å sikre at navnene på kolonnene og tabellene som er inkludert i formelen, finnes i gjeldende kontekst. Hvis en kolonne eller tabell angitt av formelen ikke finnes, returneres en feil.
Kontekst under validering (og omberegningsoperasjoner) bestemmes som beskrevet i de foregående inndelingene, ved hjelp av de tilgjengelige tabellene i modellen, eventuelle relasjoner mellom tabellene og eventuelle filtre som er brukt.
Hvis du for eksempel nettopp har importert noen data til en ny tabell, og den ikke er relatert til andre tabeller (og du ikke har brukt noen filtre), er gjeldende kontekst hele settet med kolonner i tabellen. Hvis tabellen er koblet av relasjoner til andre tabeller, inneholder gjeldende kontekst de relaterte tabellene. Hvis du legger til en kolonne fra tabellen i en rapport som har slicere og kanskje noen rapportfiltre, er konteksten for formelen delsettet med data i hver celle i rapporten.
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. Den følgende delen inneholder noen eksempler på hvordan formler bruker ulike typer kontekst til dynamisk å returnere resultater.
Operatører
Språket DAX bruker fire forskjellige typer beregningsoperatorer i formler:
- Sammenligningsoperatorer for å sammenligne verdier og returnere en logisk
TRUE
'FALSE' verdi. - Aritmetiske operatorer for å utføre aritmetiske beregninger som returnerer numeriske verdier.
- Tekstsammenkoblingsoperatorer for å føye sammen to eller flere tekststrenger.
- Logiske operatorer som kombinerer to eller flere uttrykk for å returnere ett enkelt resultat.
Hvis du vil ha detaljert informasjon om operatorer som brukes i DAX formler, kan du se DAX operatorer.
Arbeide med tabeller og kolonner
Tabeller i tabelldatamodeller ser ut som Excel-tabeller, men er forskjellige i måten de arbeider med data og formler på:
- Formler fungerer bare med tabeller og kolonner, ikke med individuelle celler, områdereferanser eller matriser.
- Formler kan bruke relasjoner til å hente verdier fra relaterte tabeller. Verdiene som hentes, er alltid relatert til gjeldende radverdi.
- Du kan ikke ha uregelmessige eller "fillete" data som du kan i et Excel-regneark. Hver rad i en tabell må inneholde samme antall kolonner. Du kan imidlertid ha tomme verdier i noen kolonner. Excel-datatabeller og tabellmodelldatatabeller kan ikke byttes ut.
- Fordi en datatype er angitt for hver kolonne, må hver verdi i denne kolonnen være av samme type.
Referere til tabeller og kolonner i formler
Du kan referere til en tabell og kolonne ved hjelp av navnet. Formelen nedenfor illustrerer for eksempel hvordan du refererer til kolonner fra to tabeller ved hjelp av det fullstendige navnet:
= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])
Når en formel evalueres, ser modellutformingen først etter generell syntaks, og kontrollerer deretter navnene på kolonner og tabeller som du angir mot mulige kolonner og tabeller i gjeldende kontekst. Hvis navnet er tvetydig, eller hvis kolonnen eller tabellen ikke blir funnet, får du en feil i formelen (en #ERROR streng i stedet for en dataverdi i celler der feilen oppstår). Hvis du vil lære mer om navnekrav for tabeller, kolonner og andre objekter, kan du se Navnekrav i DAX syntaks.
Tabellrelasjoner
Ved å opprette relasjoner mellom tabeller får du muligheten til å bruke relaterte verdier i andre tabeller i beregninger. Du kan for eksempel bruke en beregnet kolonne til å bestemme alle forsendelsespostene som er relatert til gjeldende forhandler, og deretter summere fraktkostnadene for hver av dem. I mange tilfeller kan det imidlertid hende at en relasjon ikke er nødvendig. Du kan bruke LOOKUPVALUE-funksjonen i en formel til å returnere verdien i result_columnName for raden som oppfyller vilkårene som er angitt i argumentene search_column og search_value.
Mange DAX funksjoner krever at det finnes en relasjon mellom tabellene, eller mellom flere tabeller, for å finne kolonnene du har referert til, og returnere resultater som gir mening. Andre funksjoner vil forsøke å identifisere relasjonen. For best resultat bør du imidlertid alltid opprette en relasjon der det er mulig. Tabelldatamodeller støtter flere relasjoner mellom tabeller. Hvis du vil unngå forvirring eller feil resultater, angis bare én relasjon om gangen som den aktive relasjonen, men du kan endre den aktive relasjonen etter behov for å krysse ulike tilkoblinger i dataene i beregninger. USERELATIONSHIP-funksjonen kan brukes til å angi én eller flere relasjoner som skal brukes i en bestemt beregning.
Det er viktig å følge disse reglene for formelutforming når du bruker relasjoner:
Når tabeller er koblet sammen med en relasjon, må du sørge for at de to kolonnene som brukes som nøkler, har verdier som samsvarer. Referanseintegritet håndheves ikke, derfor er det mulig å ha verdier som ikke samsvarer i en nøkkelkolonne, og likevel opprette en relasjon. Hvis dette skjer, bør du være oppmerksom på at tomme verdier eller verdier som ikke samsvarer, kan påvirke resultatene av formler.
Når du kobler tabeller i modellen ved hjelp av relasjoner, forstørrer du omfanget, eller kontekst, der formlene evalueres. Endringer i kontekst som følge av tillegg av nye tabeller, nye relasjoner eller endringer i den aktive relasjonen, kan føre til at resultatene endres på måter du kanskje ikke forventer. Hvis du vil ha mer informasjon, kan du se kontekst i denne artikkelen.
Behandle og oppdatere
Prosess og omberegning er to separate, men relaterte operasjoner. Du bør forstå disse konseptene grundig når du utformer en modell som inneholder komplekse formler, store mengder data eller data som hentes fra eksterne datakilder.
Prosess (oppdatering) oppdaterer dataene i en modell med nye data fra en ekstern datakilde.
Omberegning er prosessen med å oppdatere resultatene av formler for å gjenspeile eventuelle endringer i formlene selv og for å gjenspeile endringer i de underliggende dataene. Omberegning kan påvirke ytelsen på følgende måter:
Verdiene i en beregnet kolonne beregnes og lagres i modellen. Hvis du vil oppdatere verdiene i den beregnede kolonnen, må du behandle modellen ved hjelp av én av tre behandlingskommandoer – Prosess fullstendig, Prosessdata eller Beregn på nytt. Resultatet av formelen må alltid beregnes på nytt for hele kolonnen når du endrer formelen.
Verdiene som beregnes av mål, evalueres dynamisk når en bruker legger til målet i en pivottabell eller åpner en rapport. når brukeren endrer konteksten, returneres verdiene som returneres av målendringen. Resultatene av målet gjenspeiler alltid det siste i minnehurtigbufferen.
Behandling og omberegning har ingen effekt på sikkerhetsformler på radnivå med mindre resultatet av en ny beregning returnerer en annen verdi, slik at raden kan spørres eller ikke spørres etter rollemedlemmer.
Oppdateringer
DAX blir stadig bedre. Nye og oppdaterte funksjoner utgis med neste tilgjengelige oppdatering, som vanligvis er månedlig. Tjenestene oppdateres først, etterfulgt av installerte programmer som Power BI Desktop, Excel, SQL Server Management Studio (SSMS) og Analysis Services-prosjektutvidelse for Visual Studio (SSDT). SQL Server Analysis Services oppdateres med neste kumulative oppdatering. Nye funksjoner leses først opp og beskrives i DAX funksjonsreferanse som sammenfaller med Power BI Desktop-oppdateringer.
Ikke alle funksjoner støttes i tidligere versjoner av SQL Server Analysis Services og Excel.
Feilsøking
Hvis du får en feilmelding når du definerer en formel, kan formelen inneholde enten en syntaktisk feil, semantisk feileller beregningsfeil.
Syntaktiske feil er det enkleste å løse. De involverer vanligvis manglende parentes eller komma.
Den andre typen feil oppstår når syntaksen er riktig, men verdien eller kolonnen det refereres til, gir ikke mening i konteksten til formelen. Slike semantiske feil og beregningsfeil kan skyldes følgende problemer:
- Formelen refererer til en ikke-eksisterende kolonne, tabell eller funksjon.
- Formelen ser ut til å være riktig, men når datamotoren henter dataene, finner den en typekonflikt og utløser en feil.
- Formelen sender feil tall eller argumenttype til en funksjon.
- Formelen refererer til en annen kolonne som har en feil, og derfor er verdiene ugyldige.
- Formelen refererer til en kolonne som ikke er behandlet, noe som betyr at den har metadata, men ingen faktiske data som skal brukes til beregninger.
I de fire første tilfellene flagger DAX hele kolonnen som inneholder den ugyldige formelen. I det siste tilfellet DAX nedtone kolonnen for å angi at kolonnen er i en ubehandlet tilstand.
Apper og verktøy
Power BI Desktop
Power BI Desktop- er et gratis datamodellerings- og rapporteringsprogram. Modellutformingen inneholder et DAX redigeringsprogram for å opprette DAX beregningsformler.
Power Pivot i Excel
Utformeren Power Pivot i Excel modeller inkluderer et DAX redigeringsprogram for å opprette DAX beregningsformler.
Visual Studio
Visual Studio med Analysis Services-prosjekter utvidelse (VSIX) brukes til å opprette Analysis Services-modellprosjekter. Tabellmodellutforming, installert med prosjektutvidelsen, inkluderer et DAX redigeringsprogram.
SQL Server Management Studio
SQL Server Management Studio (SSMS) er et viktig verktøy for å arbeide med Analysis Services. SSMS inneholder et redigeringsprogram for DAX spørring for spørring av både tabellmodeller og flerdimensjonale modeller.
DAX Studio
DAX Studio er et klientverktøy med åpen kildekode for å opprette og kjøre DAX spørringer mot Analysis Services, Power BI Desktop og Power Pivot i Excel-modeller.
Tabellredigering
ikonet
tabellredigeringsprogram er et åpen kildekode-verktøy som gir en intuitiv, hierarkisk visning av hvert objekt i metadata for tabellmodell. Tabellredigering inneholder et DAX redigeringsprogram med syntaksutheving, som gir en enkel måte å redigere mål, beregnede kolonner og beregnede tabelluttrykk på.
Læringsressurser
Når du lærer DAX, er det best å bruke programmet du skal bruke til å opprette datamodellene. Analysis Services, Power BI Desktop og Power Pivot i Excel har alle artikler og opplæringer som inneholder leksjoner om oppretting av mål, beregnede kolonner og radfiltre ved hjelp av DAX. Her er noen ekstra ressurser:
Bruk DAX i Power BI Desktop læreprogrammet.
Den definitive guiden til DAX av Alberto Ferrari og Marco Russo (Microsoft Press). I den andre utgaven gir denne omfattende veiledningen det grunnleggende om innovative teknikker med høy ytelse for de første datamodellererne og BI-profesjonelle.
Fellesskap
DAX har et levende samfunn som alltid er villig til å dele sin ekspertise. Microsoft Power BI Community har et spesielt diskusjonsforum for DAX, DAX kommandoer og tips.