Del via


DAX oversikt

Data Analysis Expressions (DAX) er et formeluttrykksspråk som brukes i Analysis Services, Power BI, andPower Pivot i Excel. DAX formler inkluderer funksjoner, operatorer, andvalues for å utføre avanserte beregninger and spørringer på data i related tabeller and 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 all produktene som bruker den. Enkelte funksjoner kan not gjelde for enkelte produkter or brukstilfeller. Se dokumentasjonen for productsom beskriver den bestemte implementeringen av DAX.

Beregninger

DAX formler brukes i mål, beregnede kolonner, beregnede tabeller, and sikkerhet på radnivå.

Tiltak

Mål er dynamiske beregningsformler der resultatene endres avhengig av kontekst. Mål brukes i rapportering som støtter kombinasjon av and filtrering av modelldata ved hjelp av flere attributter, for eksempel en Power BI-rapport or Pivottabell i Excel or pivotdiagram. Mål opprettes ved hjelp av DAX formellinjen i modellutformingen.

En formel i en measure kan bruke standard aggregasjonsfunksjoner automatisk opprettet ved hjelp av Autosummer-funksjonen, for eksempel COUNTorSUM, or du kan define din egen formel ved hjelp av DAX formellinjen. Navngitte mål kan sendes som et argument til andre mål.

Når du define en formel for en measure på formellinjen, viser en verktøytipsfunksjon en forhåndsvisning av hva resultatene vil være for totalen i gjeldende kontekst, men ellers blir resultatene not umiddelbart utdata hvor som helst. Årsaken til at du ikke kan se de (filtrerte) resultatene av beregningen umiddelbart, er at resultatet av en measure ikke kan fastslås uten kontekst. Hvis du vil evaluate en measure krever et rapportklientprogram som kan gi konteksten som kreves for å hente dataene som er relevante for hver celle, and deretter evaluate uttrykket for hver celle. Denne klienten kan være en Excel-pivottabell or pivotdiagram, en Power BI-rapport, or 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 and kolonneoverskrifter i en pivottabell, or hvert utvalg av slicere andfilters i en Power BI-rapport, genererer et annet delsett med data som measure beregnes over. Hvis du for eksempel bruker denne svært enkle measure formelen:

Total Sales = SUM([Sales Amount])

Når en bruker plasserer TotalSalg-measure i en rapport, plasserer and deretter Product kategorikolonnen fra en Product tabell i Filters, beregnes sum salgsbeløp and for hver product kategori.

I motsetning til beregnede kolonner inneholder syntaksen for en measuremeasurenavn foran formelen. I eksemplet som nettopp er angitt, vises navnet totalt salg foran formelen. Når du har opprettet en measure, vises navnet and definisjonen i feltlisten for rapportklientprogrammet, and avhengig av perspektiver and roller er tilgjengelige for all 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) and deretter opprette en DAX formel som definerer kolonnens values. Når en beregnet kolonne contains en gyldig DAX formel, beregnes values for hver rad så snart formelen er angitt. Values lagres deretter i datamodellen i minnet. I en Date tabell, for eksempel når formelen skrives inn i formellinjen:

= [Calendar Year] & " Q" & [Calendar Quarter]

En value for hver rad i tabellen beregnes ved å ta values fra den CalendarYear kolonnen (i samme Date tabell), legge til et mellomrom and bokstaven Q, and deretter legge til values fra CalendarQuarter-kolonnen (i samme Date tabell). Resultatet for hver rad i den beregnede kolonnen beregnes umiddelbart and vises, for eksempel som 2017 Q1. Kolonne values beregnes bare på nytt if tabellen or alle related tabeller behandles (oppdateres) or modellen fjernes fra minnet and deretter lastes inn på nytt, for eksempel når du lukker and åpne 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 allor del av andre tabeller i samme modell. I stedet for å spørre and laste values inn i kolonnene i den nye tabellen fra en datakilde, definerer en DAX formel tabellens values.

Beregnede tabeller kan være nyttige i en rollespilldimensjon. Et eksempel er Date tabellen, som OrderDate, ShipDate, or DueDate, 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, or et delsett or 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, and kan tilhøre en datakategori. Beregnede tabeller kan navngis, and dukket opp or skjult akkurat som alle andre tabeller. Beregnede tabeller beregnes på nytt if alle tabellene de henter data fra, oppdateres or 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 evaluate til en boolsk TRUE/FALSE betingelse, og definere 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, and aggregater, for eksempel SUM returneres bare for kunder i USA. Sikkerhet på radnivå er not tilgjengelig i Power Pivot i Excel.

Når du definerer sekuiritet på radnivå ved hjelp av DAX formel, oppretter du et tillatt radsett. Dette not nekte tilgang til andre rader. i stedet er de ganske enkelt not returnert som en del av det tillatte radsettet. Andre roller kan gi tilgang til radene som utelates av DAX formelen. If en bruker er medlem av en annen rolle, and 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 related rader. Når en tabell har flere relasjoner, filters bruke sikkerhet for relasjonen som er aktiv. Sikkerhetsformler på radnivå krysses sammen med andre formler som er definert for related tabeller.

Hvis du vil ha mer informasjon, kan du se: sikkerhet på radnivå (RLS) med Power BI-roller i Analysis Services-

Spørringer

DAX spørringer kan opprettes and kjøres i SQL Server Management Studio (SSMS) and å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 and 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 evaluate 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 duration for 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 and mål, and sikre dataene ved hjelp av sikkerhet på radnivå. Hvis du vil opprette formler for beregnede kolonner and mål, bruker du formellinjen øverst i modellutformingen windoworDAX Redigering. Hvis du vil opprette formler for sikkerhet på radnivå, bruker du dialogboksen Rollebehandling or 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 or ganske komplekse. Tabellen nedenfor viser noen eksempler på enkle formler som kan brukes i en beregnet kolonne.

Formel Definisjon
= TODAY() Setter inn today's date i hver rad i en beregnet kolonne.
= 3 Setter inn value 3 i hver rad i en beregnet kolonne.
= [Column1] + [Column2] Legger til values i samme rad i [Kolonne1] and [Kolonne2] and plasserer resultatene i den beregnede kolonnen i samme rad.

Om formelen du oppretter er enkel or kompleks, kan du bruke følgende fremgangsmåte når du bygger en formel:

  1. Hver formel må begynne med en lik sign (=).

  2. Du kan enten skrive inn or velge et funksjonsnavn, or skrive inn et uttrykk.

  3. Begynn å skrive inn first få bokstavene i funksjonen or navnet du vil bruke, and Autofullfør viser en liste over tilgjengelige funksjoner, tabeller and 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, and klikker du OK for å legge til funksjonen i formelen.

  4. Angi argumentene til funksjonen ved å velge dem fra en rullegardinliste over mulige tabeller and kolonner, or ved å skrive inn values.

  5. Se etter syntaksfeil: Kontroller at all parenteser er lukket and kolonner, vises tabeller andvalues riktig.

  6. Trykk ENTER for å godta formelen.

Notat

I en beregnet kolonne, så snart du skriver inn formelen and formelen valideres, fylles kolonnen ut med values. Når du trykker ENTER i en measure, lagres measure definisjonen med tabellen. If en formel er ugyldig, vises en error.

La oss se på en formel i et measure kalt Days in Current Quarteri dette eksemplet:

Days in Current Quarter = COUNTROWS( DATESBETWEEN( 'Date'[Date], STARTOFQUARTER( LASTDATE('Date'[Date])), ENDOFQUARTER('Date'[Date])))

Denne measure brukes til å opprette et sammenligningsforhold mellom en ufullstendig periode andprevious perioden. Formelen må ta hensyn til andelen av perioden som har gått, and sammenligne den med samme andel i previous perioden. I dette tilfellet gir [Days Current Quarter til Date]/[Days in Current Quarter] proporsjonen som er gått i gjeldende periode.

Denne formelen contains følgende elementer:

Formelelement Beskrivelse
Days in Current Quarter Navnet på measure.
= Er lik sign (=) starter formelen.
COUNTROWS COUNTROWS teller antall rader i Date tabellen
() Åpne and høyreparentes angir argumenter.
DATESBETWEEN Funksjonen DATESBETWEEN returnerer datoene mellom lastdate for hver value i Date-kolonnen i Date tabellen.
'Date' Angir Date tabellen. Tabeller er i enkle anførselstegn.
[Date] Angir den Date kolonnen i Date tabellen. Kolonner er i hakeparenteser.
,
STARTOFQUARTER Funksjonen STARTOFQUARTER returnerer date starten av quarter.
LASTDATE Funksjonen LASTDATE returnerer lastdate for quarter.
'Date' Angir Date tabellen.
[Date] Angir den Date kolonnen i Date tabellen.
,
ENDOFQUARTER Funksjonen ENDOFQUARTER
'Date' Angir Date tabellen.
[Date] Angir den Date kolonnen i Date 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 values i rullegardinlisten, andall av teksten etter innsettingspunktet forblir uendret.

  • Autofullfør legger not til den avsluttende parentesen for funksjoner or samsvarer automatisk med parenteser. Du må kontrollere at hver funksjon er syntaktisk korrekt or du ikke kan lagre or 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 or 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, AVERAGEX, andMINXall krever for eksempel en tabell som argumentet first.

Funksjoner

En funksjon er en navngitt formel i et uttrykk. De fleste funksjoner har krevd and valgfrie argumenter, også kalt parametere, som inndata. Når funksjonen kjøres, returneres en value. DAX inneholder funksjoner du kan bruke til å utføre beregninger ved hjelp av datoer and klokkeslett, opprette betingede values, arbeide med strenger, utføre oppslag basert på relasjoner, and muligheten til å gjenta over en tabell for å utføre rekursive beregninger. If 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 or en tabell. If du bare vil bruke bestemte values fra en tabell or kolonne, kan du legge til filters i formelen.

  • If du må tilpasse beregninger på rad-for-rad-basis, gir DAX funksjoner som lar deg bruke gjeldende rad valueor en relatedvalue 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 value. Tabellen vises not i en rapporteringsklient, men brukes til å gi inndata til andre funksjoner. Du kan for eksempel hente en tabell and deretter count den distinkte values i den, orcalculate dynamiske summer på tvers av filtrerte tabeller or kolonner.

  • DAX funksjoner inkluderer en rekke funksjoner for time intelligens. Disse funksjonene lar deg defineor velge date områder, and utføre dynamiske beregninger basert på disse datoene orrange. Du kan for eksempel sammenligne summer på tvers av parallelle perioder.

Aggregasjonsfunksjoner

Aggregasjonsfunksjoner calculate en (skalar) value som count, sum, average, minimum, or maksimum for all rader i en kolonne or tabell som definert av uttrykket. Hvis du vil ha mer informasjon, kan du se Aggregasjonsfunksjoner.

Date and time funksjoner

De dateandtime funksjonene i DAX ligner på dateandtime funksjoner 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 Dateandtime funksjoner.

Filter funksjoner

De filter funksjonene i DAX returnerer bestemte datatyper, slår opp values i related historier, andfilter av relatedvalues. Oppslagsfunksjonene fungerer ved hjelp av tabeller and relasjoner, for eksempel en database. Filtreringsfunksjonene lar deg manipulere datakonteksten for å opprette dynamiske beregninger. Hvis du vil ha mer informasjon, kan du se Filter funksjoner.

Økonomiske funksjoner

De økonomiske funksjonene i DAX brukes i formler som utfører økonomiske beregninger, for eksempel nettopresent valueandrate av 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 or rad som er angitt som et argument and forteller deg om value samsvarer med den forventede typen. ISERROR-funksjonen returnerer for eksempel TRUEifvalue du refererer contains en error. Hvis du vil ha mer informasjon, kan du se Informasjonsfunksjoner.

Logiske funksjoner

Logiske funksjoner fungerer på et uttrykk for å returnere informasjon om values i uttrykket. TRUE-funksjonen gir deg for eksempel beskjed om et uttrykk du evaluerer, returnerer en TRUEvalue. Hvis du vil ha mer informasjon, kan du se Logiske funksjoner.

Matematiske and trigonometriske funksjoner

De matematiske funksjonene i DAX er svært lik de matematiske funksjonene i Excel and trigonometriske funksjoner. Det finnes noen mindre forskjeller i de numeriske datatypene som brukes av DAX funksjoner. Hvis du vil ha mer informasjon, kan du se Matematiske and trigonometrifunksjoner.

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 values fra en annen related tabell, angi en bestemt relasjon som skal brukes i et uttrykk, and angi kryssfiltreringsretning. Hvis du vil ha mer informasjon, kan du se Relasjonsfunksjoner.

Statistikkfunksjoner

Statistiske funksjoner calculatevaluesrelated til statistiske fordelinger and sannsynlighet, for eksempel standardavvik and 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, search for tekst i en streng, orconcatenate streng values. DAX inneholder også funksjoner for å kontrollere formatene for datoer, klokkeslett og and tall. Hvis du vil ha mer informasjon, kan du se Tekstfunksjoner.

Time intelligensfunksjoner

De time intelligensfunksjonene i DAX lar deg opprette beregninger som bruker innebygd kunnskap om kalendere and datoer. Ved å bruke timeanddate områder i kombinasjon med aggregasjoner or beregninger, kan du bygge meningsfulle sammenligninger på tvers av sammenlignbare time perioder for salg, beholdning, and så videre. Hvis du vil ha mer informasjon, kan du se Time intelligensfunksjoner (DAX).

Tabellmanipuleringsfunksjoner

Disse funksjonene returnerer en tabell or manipulere eksisterende tabeller. Ved å bruke ADDCOLUMNS kan du for eksempel legge til beregnede kolonner i en angitt tabell, or 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 er not 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 measure uttrykk. 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 durationand utdata for beregningen. Når du oppretter en DAX formel, vil termene som brukes i formelen, automatisk bestemme value datatypen som returneres.

DAX støtter følgende datatyper:

Datatype i modell Datatype i DAX Beskrivelse
Whole Number Et 64-biters heltall (åtte byte) value1, 2 Tall som ikke har desimaler. Heltall kan være positive or negative tall, men må være heltall mellom -9 223 372 036 854 775 808 (-2^63) and 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 range av values:

Negativ values fra -1,79E +308 til -2,23E -308

Null

Positiv values fra 2,23E -308 til 1,79E + 308

Antall signifikante sifre er imidlertid begrenset til 17 desimaler.
Boolean Boolsk Enten en TrueorFalsevalue.
Text Streng En Unicode tegndatastreng. Kan være strenger, tall or datoer representert i en tekst format.
Date Date/time Datoer and ganger i en godtatt date-time representasjon.

Gyldige datoer er all datoer etter 1. mars 1900.
Currency Currency Currency datatypen tillater values mellom -922,337,203,685,477.5808 til 922,337,203,685,477.5807 med fire desimaler med fixed presisjon.
N/A Blank En blank er en datatype i DAX som representerer and erstatter SQL-nullverdier. Du kan opprette en blank ved hjelp av BLANK-funksjonen, and test for tomme celler ved hjelp av den logiske funksjonen ISBLANK.

Tabelldatamodeller inkluderer også datatypen tabell som inndata or utdata til mange DAX funksjoner. For eksempel tar FILTER-funksjonen en tabell som inndata and sender ut en annen tabell som bare contains radene som oppfyller filter betingelsene. 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 and hvordan de gjelder spesielt for DAX formler. Feil i formler or 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 or cellevalg and også eventuelle related data. Å forstå kontekst and å bruke kontekst effektivt er avgjørende for å bygge dynamiske analyser med høy ytelse, and for feilsøkingsproblemer i formler.

Formler i tabellmodeller kan evalueres i en annen kontekst, avhengig av andre utformingselementer:

  • Filters brukt i en pivottabellrapport or
  • Filters definert i en formel
  • Relasjoner angitt ved hjelp av spesielle funksjoner i en formel

Det finnes ulike typer kontekst: radkontekst, spørringskontekst, andfilter kontekst.

Radkontekst

radkontekst kan betraktes som «gjeldende rad». If du oppretter en formel i en beregnet kolonne, inneholder radkonteksten for formelen values fra all kolonner i gjeldende rad. If tabellen er related til en annen tabell, inneholder innholdet også allvalues fra den andre tabellen som er related til gjeldende rad.

Anta for eksempel at du oppretter en beregnet kolonne, = [Freight] + [Tax], som legger sammen values fra to kolonner, Frakt and avgift, fra samme tabell. Denne formelen henter automatisk bare values 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 related tabeller som er knyttet til gjeldende rad.

Formelen nedenfor bruker for eksempel RELATED-funksjonen til å hente en avgift value fra en related tabell, basert på området som ordren ble sendt til. Avgifts value bestemmes ved hjelp av value for område i gjeldende tabell, ser opp området i related-tabellen, and deretter får avgiften rate for dette området fra tabellen related.

= [Freight] + RELATED('Region'[TaxRate])

Denne formelen henter avgifts- rate for gjeldende område fra Område-tabellen and legger den til i value i Frakt-kolonnen. I DAX formler trenger du not vite or 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 and ytre løkke.

Anta for eksempel at modellen contains en Produkter-tabell and en -tabell for salg. Brukere vil kanskje gå gjennom hele salgstabellen, som er full av transaksjoner som involverer flere produkter, andfind det største antallet som er bestilt for hver product i én transaksjon.

Med DAX kan du bygge en enkelt formel som returnerer riktig value, and blir resultatene automatisk oppdatert time 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.

Hvis du vil summarize, lagrer EARLIER-funksjonen radkonteksten fra operasjonen som gikk foran gjeldende operasjon. På all tidspunkt lagrer funksjonen i minnet to sett med kontekst: Ett sett med kontekst representerer gjeldende rad for den indre løkken i formelen, and et annet sett med kontekst representerer gjeldende rad for den ytre løkken i formelen. DAX mater automatisk values 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 measureor felt i en rapport, undersøker motoren rad- and kolonneoverskrifter, slicere, and rapport filters 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, and deretter fylle ut values 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 values i kolonnen Fortjeneste i tabellen Salg: = SUM('Sales'[Profit]). If 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 all områder, all produkter, all år, and så videre.

Brukere ønsker imidlertid vanligvis ikke å se det samme resultatet hundrevis av ganger, men i stedet ønsker å få fortjeneste for en bestemt year, et bestemt land, et bestemt product, or en kombinasjon av disse, and deretter få en totalsum.

I en rapport endres kontekst ved å filtrere, legge til or fjerne felt, and ved hjelp av slicere. For hver endring evalueres spørringskonteksten der measure evalueres. Derfor evalueres den samme formelen, som brukes i en measure, i en annen spørringskontekst for hver celle.

Filter kontekst

Filter kontekst er settet med values tillatt i hver kolonne, or i values hentet fra en related tabell. Filters kan brukes på kolonnen i utformeren, or i presentasjonslaget (rapporter and pivottabeller). Filters kan også defineres eksplisitt ved å filter uttrykk i formelen.

Filter kontekst legges til når du angir filter begrensninger på settet med values tillatt i en kolonne or tabell, ved å bruke argumenter til en formel. Filter konteksten gjelder oppå andre kontekster, for eksempel radkontekst or spørringskontekst.

I tabellmodeller er det mange måter å opprette filter kontekst på. I konteksten til klienter som kan bruke modellen, for eksempel Power BI-rapporter, kan brukere opprette filters på farten ved å legge til slicere or rapport filters på rad- and kolonneoverskrifter. Du kan også angi filter uttrykk direkte i formelen for å angi relatedvalues, for å filter tabeller som brukes som inndata, or til dynamisk å få kontekst for values som brukes i beregninger. Du kan også fjerne or selektivt fjerne filters på bestemte kolonner. Dette er veldig nyttig når du oppretter formler som calculate totalsummer.

Hvis du vil lære mer om hvordan du oppretter filters i formler, kan du se FILTER Function (DAX). Hvis du vil se et eksempel på hvordan filters kan fjernes for å opprette totalsummer, kan du se ALL Function (DAX).

Hvis du vil ha eksempler på hvordan du selektivt fjerner and bruker filters i formler, kan du se ALLEXCEPT.

Fastslå kontekst i formler

Når du oppretter en DAX formel, blir formelen first testet for gyldig syntaks, and deretter testet for å sikre at navnene på kolonnene and tabeller som er inkludert i formelen, finnes i gjeldende kontekst. If en kolonne or tabell angitt av formelen ikke finnes, returneres en error.

Kontekst under validering (and omberegningsoperasjoner) bestemmes som beskrevet i de foregående inndelingene, ved hjelp av de tilgjengelige tabellene i modellen, eventuelle relasjoner mellom tabellene, and eventuelle filters som er brukt.

For eksempel, if du nettopp har importert noen data til en ny tabell and det er notrelated til andre tabeller (and du har not brukt noen filters), er gjeldende kontekst hele settet med kolonner i tabellen. If tabellen er koblet av relasjoner til andre tabeller, inneholder den gjeldende konteksten de related tabellene. If du legger til en kolonne fra tabellen i en rapport som har slicere and kanskje noen rapport filters, 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 and 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 valuesand returnere en logisk TRUE'FALSE' value.
  • Aritmetiske operatorer for å utføre aritmetiske beregninger som returnerer numeriske values.
  • Tekstsammenkoblingsoperatorer for å koble sammen to or flere tekststrenger.
  • Logiske operatorer som kombinerer to or 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 and kolonner

Tabeller i tabelldatamodeller ser ut som Excel-tabeller, men er forskjellige i måten de arbeider med data and med formler på:

  • Formler fungerer bare med tabeller and kolonner, not med individuelle celler, range referanser, or matriser.
  • Formler kan bruke relasjoner for å få values fra related tabeller. De values som hentes, related alltid til gjeldende rad value.
  • Du kan ikke ha uregelmessige or "fillete" data som du kan i et Excel-regneark. Hver rad i en tabell må inneholde samme antall kolonner. Du kan imidlertid ha tomme values i noen kolonner. Excel-datatabeller and tabellmodelldatatabeller er not utskiftbare.
  • Fordi en datatype er angitt for hver kolonne, må hver value i denne kolonnen være av samme type.

Referere til tabeller and kolonner i formler

Du kan referere til en tabell and 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 first etter generell syntaks, and kontrollerer deretter navnene på kolonner and tabeller som du angir mot mulige kolonner and tabeller i gjeldende kontekst. If navnet er tvetydig orif kolonnen or tabell ikke blir funnet, får du en error på formelen (en #ERROR streng i stedet for en data value i celler der error forekommer). Hvis du vil lære mer om navnekrav for tabeller, kolonner and andre objekter, kan du se Navnekrav i DAX syntaks.

Tabellrelasjoner

Ved å opprette relasjoner mellom tabeller får du muligheten til relatedvalues i andre tabeller som skal brukes i beregninger. Du kan for eksempel bruke en beregnet kolonne til å bestemme all forsendelsespostene related til gjeldende forhandler, and deretter sum fraktkostnadene for hver. I mange tilfeller kan imidlertid en relasjon not være nødvendig. Du kan bruke LOOKUPVALUE-funksjonen i en formel til å returnere value i result_columnName for raden som oppfyller vilkårene som er angitt i argumentene search_columnandsearch_value.

Mange DAX funksjoner krever at det finnes en relasjon mellom tabellene, or mellom flere tabeller, for å finne kolonnene du har referert til, and 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 or feil resultater, angis bare én relasjon i en time 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 ett or 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 av en relasjon, må du sørge for at de to kolonnene som brukes som nøkler, har values som samsvarer. Referanseintegritet håndheves not, derfor er det mulig å ha ikke-samsvarende values i en nøkkelkolonne and fortsatt opprette en relasjon. If dette skjer, bør du være oppmerksom på at blankvaluesor ikke samsvarende values kan påvirke resultatene av formler.

  • Når du kobler tabeller i modellen ved hjelp av relasjoner, forstørrer du omfanget, orkontekst, der formlene evalueres. Endringer i kontekst som følge av tillegg av nye tabeller, nye relasjoner, or fra endringer i den aktive relasjonen, kan føre til at resultatene endres på måter som du kanskje not forutse. Hvis du vil ha mer informasjon, kan du se kontekst i denne artikkelen.

Behandle and oppdatering

Prosessandomberegning er to separate, men related operasjoner. Du bør forstå disse konseptene grundig når du utformer en modell som contains komplekse formler, store mengder data, or 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 and for å gjenspeile endringer i de underliggende dataene. Omberegning kan påvirke ytelsen på følgende måter:

  • values i en beregnet kolonne beregnes and lagret i modellen. Hvis du vil oppdatere values i den beregnede kolonnen, må du behandle modellen ved hjelp av én av tre behandlingskommandoer – Behandle fullstendig, Prosessdata, or Prosessberegn på nytt. Resultatet av formelen må alltid beregnes på nytt for hele kolonnen når du endrer formelen.

  • De values som beregnes av mål, evalueres dynamisk når en bruker legger til measure i en pivottabell or åpne en rapport. når brukeren endrer konteksten, values returnert av measure endringen. Resultatene av measure gjenspeiler alltid det siste i minnehurtigbufferen.

Behandling av and ny beregning har ingen effect på sikkerhetsformler på radnivå, med mindre resultatet av en ny beregning returnerer en annen value, slik at raden kan spørres ornot etter rollemedlemmer.

Oppdateringer

DAX blir stadig bedre. Nye and oppdaterte funksjoner utgis med den next tilgjengelige oppdateringen, som vanligvis er månedlig. Tjenester oppdateres first, etterfulgt av installerte programmer som Power BI Desktop, Excel, SQL Server Management Studio (SSMS), and Analysis Services-prosjektutvidelse for Visual Studio (SSDT). SQL Server Analysis Services oppdateres med den kumulative oppdateringen next. Nye funksjoner er first annonsert and beskrevet i DAX funksjonsreferansen som sammenfaller med Power BI Desktop-oppdateringer.

Not all funksjoner støttes i earlier versjoner av SQL Server Analysis Services and Excel.

Feilsøking

If du får en error når du definerer en formel, kan formelen inneholde enten en syntaktisk error, semantisk error, orberegning error.

Syntaktiske feil er det enkleste å løse. De involverer vanligvis en manglende parentes or komma.

Den andre typen error oppstår når syntaksen er riktig, men valueor en kolonne det refereres til, gir not mening i konteksten til formelen. Slike semantiske and beregningsfeil kan skyldes følgende problemer:

  • Formelen refererer til en ikke-eksisterende kolonne, tabell, or funksjon.
  • Formelen ser ut til å være riktig, men når datamotoren henter dataene, finner den en typekonflikt and hever en error.
  • Formelen sender feil tall or type argumenter til en funksjon.
  • Formelen refererer til en annen kolonne som har en error, and derfor er values ugyldige.
  • Formelen refererer til en kolonne som har not blitt behandlet, noe som betyr at den har metadata, men ingen faktiske data å bruke for beregninger.

I de first fire tilfellene flagger DAX hele kolonnen som contains den ugyldige formelen. I det last tilfellet DAX nedtone kolonnen for å angi at kolonnen er i en ubehandlet tilstand.

Apper and verktøy

Power BI Desktop

Power BI Desktop

Power BI Desktop- er et gratis and rapporteringsprogram for datamodellering. Modellutformingen inneholder et DAX redigeringsprogram for å opprette DAX beregningsformler.

Power Pivot i Excel

Power Pivot i Excel

Utformeren Power Pivot i Excel modeller inneholder et DAX redigeringsprogram for å opprette DAX beregningsformler.

Visual Studio

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

SQL Server Management Studio (SSMS) er et viktig verktøy for å arbeide med Analysis Services. SSMS inneholder et DAX redigeringsprogram for spørring for å spørre både tabellbaserte and flerdimensjonale modeller.

DAX Studio

DAX Studio-ikon

DAX Studio er et klientverktøy med åpen kildekode for å opprette and som kjører DAX spørringer mot Analysis Services, Power BI Desktop, andPower Pivot i Excel-modeller.

Tabellredigering

ikonet tabellredigeringsprogram

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 and 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, andPower Pivot i Excel all har artikler and opplæringer som inneholder leksjoner om oppretting av mål, beregnede kolonner, and rad-filters ved hjelp av DAX. Her er noen ekstra ressurser:

Videos

Bruk DAX i Power BI Desktop lære path.

Den definitive guiden til DAX av Alberto Ferrari and Marco Russo (Microsoft Press). Now i sin second utgave gir denne omfattende veiledningen det grunnleggende om innovative teknikker med høy ytelse for å starte datamodellerere and BI-fagfolk.

Den definitive veiledningen for å DAX bokbilde

Fellesskap

DAX har et levende samfunn som alltid er villig til å dele sin ekspertise. Microsoft Power BI Community har et spesielt diskusjonsforum bare for DAX, DAX kommandoer and tips.