Dela via


DAX översikt

Dataanalysuttryck (DAX) är ett formeluttrycksspråk som används i Analysis Services, Power BI, andPower Pivot i Excel. DAX formler omfattar funktioner, operatorer andvalues för att utföra avancerade beräkningar and frågor på data i related tabeller and kolumner i tabulära datamodeller.

Den här artikeln innehåller bara en grundläggande introduktion till de viktigaste begreppen i DAX. Den beskriver DAX i relation till de produkter all som använder den. Vissa funktioner kan not gälla för vissa produkters or användningsområden. Se dokumentationen för din product, där beskrivs dess specifika implementering av DAX.

Beräkningar

DAX formler används i mått, beräknade kolumner, beräknade tabeller and säkerhet på radnivå.

Åtgärder

Mått är dynamiska beräkningsformler där resultatet ändras beroende på kontext. Mått används i rapportering för att stödja kombinationen av and filtrering av modelldata genom att använda flera attribut, såsom en Power BI-rapport, or Excel-pivottabell och or pivotdiagram. Mått skapas med hjälp av DAX formelfältet i modelldesignern.

En formel i en measure kan använda standardaggregeringsfunktioner som skapas automatiskt med funktionen Autosumma, till exempel COUNTorSUM, or du kan define din egen formel med hjälp av formelfältet DAX. Namngivna mått kan skickas som ett argument till andra mått.

När du define en formel för en measure i formelfältet visar en knappbeskrivningsfunktion en förhandsgranskning av vad resultatet skulle bli för summan i den aktuella kontexten, men annars not resultatet omedelbart utdata var som helst. Anledningen till att du inte kan se (filtrerade) resultatet av beräkningen omedelbart är att resultatet av en measure inte kan fastställas utan kontext. För att evaluate en measure krävs ett rapportklientprogram som kan ge den kontext som krävs för att hämta data som är relevanta för varje cell and och sedan evaluate uttrycket för varje cell. Klienten kan vara en Excel-pivottabell or pivotdiagram, en Power BI-rapport, or ett tabelluttryck i en DAX fråga i SQL Server Management Studio (SSMS).

Oavsett klient körs en separat fråga för varje cell i resultatet. Det vill säga att varje kombination av rad and kolumnrubriker i en pivottabell, or varje val av utsnitt andfilters i en Power BI-rapport, genererar en annan delmängd av data som measure beräknas över. Du kan till exempel använda den här mycket enkla measure formeln:

Total Sales = SUM([Sales Amount])

När en användare placerar TotalSales-measure i en rapport, and sedan placerar kolumnen Product Category från en Product-tabell i Filtersberäknas sum för Försäljningsbelopp and visas för varje product kategori.

Till skillnad från beräknade kolumner innehåller syntaxen för en measure namnet på measuresom föregår formeln. I exemplet visas namnet Total Sales före formeln. När du har skapat en measurevisas namnet and dess definition i fältlistan för rapportklientapplikationen, and beroende på perspektiven and rollerna är tillgängliga för all modellens användare.

Mer information finns i:
mått i Power BI Desktop
Åtgärder i Analysis Services
mått i Power pivottabell

Beräknade kolumner

En beräknad kolumn är en kolumn som du lägger till i en befintlig tabell (i modelldesignern) and sedan skapa en DAX formel som definierar kolumnens values. När en beräknad kolumn contains en giltig DAX formel beräknas values för varje rad så snart formeln har angetts. Values lagras sedan i den minnesinterna datamodellen. I en Date tabell, till exempel när formeln anges i formelfältet:

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

En value för varje rad i tabellen beräknas genom att ta values från kolumnen CalendarYear (i samma Date tabell), lägga till ett blanksteg and versal bokstaven Q, and sedan lägga till values från kolumnen CalendarQuarter (i samma Date tabell). Resultatet för varje rad i den beräknade kolumnen beräknas så snart and visas, exempelvis som 2017 Q1. Kolumn values beräknas bara om if tabellen or alla related tabeller bearbetas (uppdateras) or modellen tas bort från minnet and sedan läses in igen, till exempel när and öppnar en Power BI Desktop-fil igen.

Mer information finns i:
Beräknade kolumner i Power BI Desktop
Beräknade kolumner i Analysis Services
beräknade kolumner i Power pivottabell.

Beräknade tabeller

En beräknad tabell är ett beräknat objekt baserat på ett formeluttryck som härleds från allor del av andra tabeller i samma modell. I stället för att fråga and att läsa in values i den nya tabellens kolumner från en datakälla, definierar en DAX formel tabellens values.

Beräknade tabeller kan vara användbara i en rollspelsdimension. Ett exempel är tabellen Date, där OrderDate, ShipDate och or DueDate används beroende på relationen för den utländska nyckeln. Genom att skapa en beräknad tabell för ShipDate explicit får du en fristående tabell som är tillgänglig för frågor, lika fullständigt fungerande som alla andra tabeller. Beräknade tabeller är också användbara när du konfigurerar en filtrerad raduppsättning, or en delmängd or en supermängd av kolumner från andra befintliga tabeller. På så sätt kan du behålla den ursprungliga tabellen intakt samtidigt som du skapar varianter av tabellen för att stödja specifika scenarier.

Beräknade tabeller stöder relationer med andra tabeller. Kolumnerna i den beräknade tabellen har datatyper, formatering, och and kan tillhöra en datakategori. Beräknade tabeller kan namnges, and visas eller or döljas likt andra tabeller. Beräknade tabeller beräknas på nytt if någon av tabellerna som dessa tar data från uppdateras or.

Mer information finns i:
Beräknade tabeller i Power BI Desktop
Beräknade tabeller i Analysis Services.

Säkerhet på radnivå

Med säkerhet på radnivå måste en DAX formel evaluate till ett booleskt TRUE/FALSE villkor som definierar vilka rader som kan returneras av resultatet av en fråga från medlemmar i en viss roll. För medlemmar i försäljningsrollen, till exempel, tabellen Kunder med följande formel DAX:

= Customers[Country] = "USA"

Medlemmar i försäljningsrollen kan bara visa data för kunder i USA, and aggregeringar, till exempel SUM returneras endast för kunder i USA. Säkerhet på radnivå är not tillgängligt i Power Pivot i Excel.

När du definierar secuirty på radnivå med hjälp av DAX formel skapar du en tillåten raduppsättning. Detta nekar not åtkomst till andra rader. I stället returneras de helt enkelt not som en del av den tillåtna raduppsättningen. Andra roller kan ge åtkomst till de rader som undantas av formeln DAX. If en användare är medlem i en annan roll, and och den rollens säkerhet på radnivå ger åtkomst till den specifika raduppsättningen, kan användaren se data för den raden.

Säkerhetsformler på radnivå gäller för de angivna raderna samt related rader. När en tabell har flera relationer filters tillämpa säkerhet för den relation som är aktiv. Säkerhetsformler på radnivå kommer att korsas med andra formler som definierats för related tabeller.

Mer information finns i:
säkerhet på radnivå (RLS) med Power BI
Roller i Analysis Services

Frågor

DAX frågor kan skapas and köras i SQL Server Management Studio (SSMS) and verktyg med öppen källkod som DAX Studio (daxstudio.org). Till skillnad från DAX beräkningsformler, som bara kan skapas i tabelldatamodeller, kan DAX frågor också köras mot Flerdimensionella Analysis Services-modeller. DAX-frågor är ofta enklare att skriva och and mer effektiva än MDX-frågor (Multidimensional Data Expressions).

En DAX fråga är en instruktion som liknar en SELECT-instruktion i T-SQL. Den mest grundläggande typen av DAX fråga är en evaluate-instruktion. Till exempel

EVALUATE
 ( FILTER ( 'DimProduct', [SafetyStockLevel] < 200 ) )
ORDER BY [EnglishProductName] ASC

Returnerar i Resultat en tabell som endast visar de produkter med en SafetyStockLevel mindre än 200, i stigande ordning efter EnglishProductName.

Du kan skapa mått som en del av frågan. Mått finns endast för förfrågans duration. För mer information, se DAX frågeställningar.

Formler

DAX formler är nödvändiga för att skapa beräkningar i beräknade kolumner and mått, and skydda dina data med hjälp av säkerhet på radnivå. Om du vill skapa formler för beräknade kolumner and mått använder du formelfältet längst upp i modelldesignern windoworDAX Editor. Om du vill skapa formler för säkerhet på radnivå använder du dialogrutan Rollhanterare or Hantera roller. Information i det här avsnittet är avsedd att komma igång med att förstå grunderna i DAX formler.

Grunderna av formler

DAX formler kan vara mycket enkla or ganska komplexa. I följande tabell visas några exempel på enkla formler som kan användas i en beräknad kolumn.

Formel Definition
= TODAY() Infogar todaydate i varje rad i en beräknad kolumn.
= 3 Infogar value 3 i varje rad i en beräknad kolumn.
= [Column1] + [Column2] Lägger till values på samma rad i [Column1] and [Column2] and placerar resultatet i den beräknade kolumnen på samma rad.

Om formeln du skapar är enkel or komplex kan du använda följande steg när du skapar en formel:

  1. Varje formel måste börja med lika med sign (=).

  2. Du kan antingen skriva or välja ett funktionsnamn or ange ett uttryck.

  3. Börja skriva first några bokstäver i funktionen or namn du vill använda, and Komplettera automatiskt visar en lista över tillgängliga funktioner, tabeller and kolumner. Tryck på TABB för att lägga till ett objekt från listan Komplettera automatiskt i formeln.

    Du kan också klicka på knappen Fx för att visa en lista över tillgängliga funktioner. Om du vill välja en funktion i listrutan använder du piltangenterna för att markera objektet, and klickar på OK för att lägga till funktionen i formeln.

  4. Ange argumenten till funktionen genom att välja dem från en listruta med möjliga tabeller and kolumner, or genom att skriva in values.

  5. Sök efter syntaxfel: Kontrollera att all parenteser är stängda och att and kolumner och tabeller andvalues refereras korrekt.

  6. Tryck på RETUR för att acceptera formeln.

Not

När du anger formeln and i en beräknad kolumn, verifieras formeln och kolumnen fylls i med values. När du trycker på RETUR i en measuresparas measure definitionen tillsammans med tabellen. If en formel är ogiltig visas en error.

I det här exemplet ska vi titta på en formel i en measure med namnet Days in Current Quarter:

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

Den här measure används för att skapa ett jämförelseförhållande mellan en ofullständig period and den previous perioden. Formeln måste ta hänsyn till den andel av perioden som har förflutit, and jämföra den med samma andel i previous perioden. I det här fallet visar [Days Current Quarter to Date]/[Days in Current Quarter] den andel som förflutit under den aktuella tidsperioden.

Den här formeln contains har de följande elementen:

Formelelement Beskrivning
Days in Current Quarter Namnet på measure.
= Likamedtecken sign (=) ska börja formeln.
COUNTROWS COUNTROWS räknar antalet rader i tabellen Date
() Öppna and avslutande parentes anger argument.
DATESBETWEEN Funktionen DATESBETWEEN returnerar datumen mellan lastdate för varje value i kolumnen Date i tabellen Date.
'Date' Specificerar tabell Date. Tabeller finns inom enkla citattecken.
[Date] Specificerar kolumnen Date i tabellen Date. Kolumnerna är inom hakparenteser.
,
STARTOFQUARTER Funktionen STARTOFQUARTER returnerar date i början av quarter.
LASTDATE Funktionen LASTDATE returnerar lastdate för quarter.
'Date' Anger specifikt tabellen Date.
[Date] Anger kolumnen Date i tabellen Date.
,
ENDOFQUARTER Funktionen ENDOFQUARTER
'Date' Specificerar tabellen Date.
[Date] Anger kolumnen Date i tabellen Date.

Använda formeln Komplettera automatiskt

Komplettera automatiskt hjälper dig att ange en giltig formelsyntax genom att ge dig alternativ för varje element i formeln.

  • Du kan använda formeln Komplettera automatiskt mitt i en befintlig formel med kapslade funktioner. Texten omedelbart före insättningspunkten används för att visa values i listrutan, andall av texten efter insättningspunkten förblir oförändrad.

  • Komplettera automatiskt lägger not till den avslutande parentesen för funktioner och or matchar automatiskt parenteser. Du måste se till att varje funktion är syntaktiskt korrekt or du kan inte spara or använda formeln.

Använda flera funktioner i en formel

Du kan kapsla funktioner, vilket innebär att du använder resultatet från en funktion som argument för en annan funktion. Du kan kapsla upp till 64 funktioner i beräknade kolumner. Kapsling kan dock göra det svårt att skapa formler för felsökning av or. Många funktioner är utformade för att endast användas som kapslade funktioner. Dessa funktioner returnerar en tabell som därför inte kan sparas direkt. den måste anges som indata till en tabellfunktion. Funktionerna SUMX, AVERAGEX, andMINXall till exempel kräva en tabell som argumentet first.

Funktioner

En funktion är en namngiven formel i ett uttryck. De flesta funktioner har nödvändiga and valfria argument, även kallade parametrar, som indata. När funktionen körs returneras en value. DAX innehåller funktioner som du kan använda för att utföra beräkningar med hjälp av datum and gånger, skapa villkorsstyrda values, arbeta med strängar, utföra sökningar baserat på relationer, and möjligheten att iterera över en tabell för att utföra rekursiva beräkningar. If du är bekant med Excel-formler kommer många av dessa funktioner att se mycket lika ut. men DAX formler skiljer sig på följande viktiga sätt:

  • En DAX-funktion refererar alltid till en fullständig kolumn or en tabell. If du bara vill använda vissa values från en tabell or kolumn, kan du lägga till filters i formeln.

  • If du behöver anpassa beräkningar rad för rad tillhandahåller DAX funktioner som gör att du kan använda den aktuella raden valueor en relatedvalue som en typ av parameter för att utföra beräkningar som varierar beroende på kontext. Information om hur dessa funktioner fungerar finns i Context i den här artikeln.

  • DAX innehåller många funktioner som returnerar en tabell i stället för en value. Tabellen visas not i en rapporteringsklient, men används för att mata in data i andra funktioner. Du kan till exempel hämta en tabell and och sedan count de distinkta values i den, orcalculate dynamiska summor mellan filtrerade tabeller or kolumner.

  • DAX funktioner innehåller en mängd olika funktioner för time intelligens. Med de här funktionerna kan du defineor välja date intervall, and utföra dynamiska beräkningar baserat på dessa datum orrange. Du kan till exempel jämföra summor mellan parallella perioder.

Sammansättningsfunktioner

Sammansättningsfunktioner calculate en (skalär) value, till exempel count, sum, average, minimum, or maximum för all rader i en kolumn or tabell enligt uttryckets definition. Mer information finns i aggregeringsfunktioner.

Date and time funktioner

De dateandtime funktionerna i DAX liknar dateandtime funktioner i Microsoft Excel. Men DAX funktioner baseras på en datetime datatyp från och med 1 mars 1900. För att lära dig mer, se funktionerna Dateandtime.

Filter funktioner

Funktionerna filter i DAX returnerar specifika datatyper, leta upp values i related tabeller, andfilter av relatedvalues. Uppslagsfunktionerna fungerar med hjälp av tabeller and relationer, till exempel en databas. Med filtreringsfunktionerna kan du ändra datakontexten för att skapa dynamiska beräkningar. För att lära dig mer, se Filter funktioner.

Finansiella funktioner

De finansiella funktionerna i DAX används i formler som utför finansiella beräkningar, till exempel nuvarande netto valueandrate avkastning. Dessa funktioner liknar finansiella funktioner som används i Microsoft Excel. Mer information finns i Finansiella funktioner.

Informationsfunktioner

En informationsfunktion tittar på raden i cell or som anges som ett argument och and anger om value matchar den förväntade typen. Funktionen ISERROR returnerar till exempel TRUEifvalue som du refererar till contains en error. Mer information finns i Informationsfunktioner.

Logiska funktioner

Logiska funktioner fungerar på ett uttryck för att returnera information om values i uttrycket. Funktionen TRUE låter dig till exempel veta om ett uttryck som du utvärderar returnerar en TRUEvalue. Mer information finns i Logiska funktioner.

Matematiska and trigonometriska funktioner

De matematiska funktionerna i DAX liknar de matematiska excel-and trigonometriska funktionerna. Det finns vissa mindre skillnader i de numeriska datatyper som används av DAX funktioner. Mer information finns i matematik and trigonometriska funktioner.

Andra funktioner

Dessa funktioner utför unika åtgärder som inte kan definieras av någon av de kategorier som de flesta andra funktioner tillhör. Mer information finns i Andra funktioner.

Relationsfunktioner

Med relationsfunktioner i DAX kan du returnera values från en annan related tabell, ange en viss relation som ska användas i ett uttryck and ange korsfiltreringsriktning. Mer information finns i Relationsfunktioner.

Statistiska funktioner

Statistiska funktioner calculatevaluesrelated till statistiska fördelningar and sannolikhet, till exempel standardavvikelse and antal permutationer. Mer information finns i Statistiska funktioner.

Textfunktioner

Textfunktioner i DAX liknar deras motsvarigheter i Excel. Du kan returnera en del av en sträng, search för text i en sträng, orconcatenate sträng values. DAX innehåller också funktioner för att styra formaten för datum, tider och and tal. Mer information finns i Textfunktioner.

Time intelligensfunktioner

Med time intelligensfunktioner som tillhandahålls i DAX kan du skapa beräkningar som använder inbyggd kunskap om kalendrar and datum. Genom att använda timeanddate intervall i kombination med aggregeringar or beräkningar kan du skapa meningsfulla jämförelser mellan jämförbara time perioder för försäljning, inventering and så vidare. För att lära dig mer, se Time intelligensfunktioner (DAX).

Funktioner för tabellmanipulering

Dessa funktioner returnerar en tabell or ändra befintliga tabeller. Genom att till exempel använda ADDCOLUMNS kan du lägga till beräknade kolumner i en angiven tabell or du kan returnera en sammanfattningstabell över en uppsättning grupper med funktionen SUMMARIZECOLUMNS. Mer information finns i Tabellmanipuleringsfunktioner.

Variabler

Du kan skapa variabler i ett uttryck med hjälp av VAR. VAR tekniskt sett är not en funktion är det ett nyckelord för att lagra resultatet av ett uttryck som en namngiven variabel. Variabeln kan sedan skickas som ett argument till andra measure uttryck. Till exempel:

VAR
    TotalQty = SUM ( Sales[Quantity] )

Return

    IF (
        TotalQty > 1000,
        TotalQty * 0.95,
        TotalQty * 1.25
        )

I det här exemplet kan TotalQty skickas som en namngiven variabel till andra uttryck. Variabler kan vara av valfri skalbar datatyp, inklusive tabeller. Att använda variabler i dina DAX formler kan vara otroligt kraftfullt.

Datatyper

Du kan importera data till en modell från många olika datakällor som kan ha stöd för olika datatyper. När du importerar data till en modell konverteras data till någon av datatyperna för tabellmodellen. När modelldata används i en beräkning konverteras data sedan till en DAX datatyp för beräkningens durationand utdata. När du skapar en DAX formel avgör termerna som används i formeln automatiskt den value datatyp som returneras.

DAX stöder följande datatyper:

Datatyp i modell Datatyp i DAX Beskrivning
Whole Number Ett heltal på 64 bitar (åtta byte) value1, 2 Tal som inte har några decimaler. Heltal kan vara positiva or negativa tal, men måste vara heltal mellan -9 223 372 036 854 775 808 (-2^63) and 9 223 372 036 854 775 807 (2^63-1).
Decimal Number Ett realnummer på 64 bitar (åtta byte) 1, 2 Verkliga tal är tal som kan ha decimaler. Reella tal överspänner ett brett range av values:

Negativ values från -1,79E +308 till -2,23E -308

Noll

Positiv values från 2,23E -308 till 1,79E + 308

Antalet signifikanta siffror är dock begränsat till 17 decimaler.
Boolean Boolesk Antingen en TrueorFalsevalue.
Text Sträng En Unicode teckendatasträng. Kan vara strängar, siffror or datum som representeras i en text format.
Date Date/time Datum and gånger i en godkänd date–time representation.

Giltiga datum är all, datum efter den 1 mars 1900.
Currency Currency Currency datatypen tillåter values mellan -922 337 203 685 477,5808 till 922 337 203 685 477 5807 med fyra decimalsiffror med fixed precision.
N/A Blank En blank är en datatyp i DAX som representerar and ersätter SQL-nullvärden. Du kan skapa en blank med hjälp av funktionen BLANK, and test för tomma värden med hjälp av den logiska funktionen ISBLANK.

Tabelldatamodeller innehåller även datatypen Table som indata or utdata till många DAX funktioner. Funktionen FILTER tar till exempel en tabell som indata and matar ut en annan tabell som bara contains de rader som uppfyller de filter villkoren. Genom att kombinera tabellfunktioner med sammansättningsfunktioner kan du utföra komplexa beräkningar över dynamiskt definierade datauppsättningar.

Även om datatyper vanligtvis anges automatiskt är det viktigt att förstå datatyper and hur de i synnerhet tillämpas på DAX formler. Fel i formler or oväntade resultat orsakas till exempel ofta av en viss operator som inte kan användas med en datatyp som anges i ett argument. Formeln = 1 & 2returnerar till exempel ett strängresultat på 12. Formeln, = "1" + "2", returnerar dock ett heltalsresultat på 3.

Sammanhang

Context är ett viktigt begrepp att förstå när du skapar DAX formler. Kontext möjliggör att du kan utföra dynamisk analys, eftersom resultatet av en formel ändras för att spegla den aktuella raden och cellmarkeringen orand samt all related data. Att förstå kontext and att använda kontext effektivt är avgörande för att skapa högpresterande, dynamiska analyser, and för felsökning av problem i formler.

Formler i tabellmodeller kan utvärderas i en annan kontext, beroende på andra designelement:

  • Filters tillämpas i en Rapport or för pivottabell
  • Filters definierad i en formel
  • Relationer som anges med hjälp av specialfunktioner i en formel

Det finns olika typer av kontext: radkontext, frågekontext, andfilter kontext.

Radkontext

Radkontext kan betraktas som "den aktuella raden". If du skapar en formel i en beräknad kolumn innehåller radkontexten för formeln values från all kolumner i den aktuella raden. If tabellen är related till en annan tabell, och innehållet inkluderar även allvalues från den andra tabellen som är related till den aktuella raden.

Anta till exempel att du skapar en beräknad kolumn, = [Freight] + [Tax], som lägger ihop values från två kolumner, Freight and Tax, från samma tabell. Den här formeln hämtar automatiskt bara values från den aktuella raden i de angivna kolumnerna.

Radkontexten följer även alla relationer som har definierats mellan tabeller, inklusive relationer som definierats i en beräknad kolumn med hjälp av DAX formler, för att avgöra vilka rader i related tabeller som är associerade med den aktuella raden.

Följande formel använder till exempel funktionen RELATED för att hämta en skatte-value från en related tabell, baserat på den region som ordern levererades till. Den skattemässiga value bestäms med hjälp av value för regionen i den aktuella tabellen, letar upp regionen i tabellen related, and och sedan hämtar rate för den regionen från tabellen related.

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

Den här formeln hämtar skatten rate för den aktuella regionen från tabellen Region and och lägger till den i value i kolumnen Frakt. I DAX formler behöver du not veta or ange den specifika relation som ansluter tabellerna.

Kontext för flera rader

DAX innehåller funktioner som itererar beräkningar över en tabell. Dessa funktioner kan ha flera aktuella rader, var och en med sin egen radkontext. I grund och botten kan du med dessa funktioner skapa formler som utför åtgärder rekursivt över en inre and yttre loop.

Anta till exempel att din modell contains en tabell Produkterand en tabell Försäljning. Användarna kanske vill gå igenom hela försäljningstabellen, som är full av transaktioner som omfattar flera produkter, andfind den största kvantiteten som beställts för varje product i en transaktion.

Med DAX kan du skapa en enda formel som returnerar rätt value; resultaten uppdateras automatiskt and när en användare time lägger till data i tabellerna.

= MAXX(FILTER(Sales,[ProdKey] = EARLIER([ProdKey])),Sales[OrderQty])  

Ett detaljerat exempel på den här formeln finns i EARLIER.

I summarizelagrar funktionen EARLIER den radkontext från operationen som föregick den aktuella operationen. Vid all gånger lagrar funktionen i minnet två uppsättningar kontext: en uppsättning kontext representerar den aktuella raden för formelns inre loop, and en annan uppsättning kontext representerar den aktuella raden för formelns yttre loop. DAX matar automatiskt values mellan de två looparna så att du kan skapa komplexa aggregat.

Frågekontext

Frågekontext refererar till den delmängd av data som implicit hämtas för en formel. När en användare till exempel placerar ett measureor fält i en rapport undersöker motorn rad and kolumnrubriker, utsnitt, and rapport filters för att fastställa kontexten. De nödvändiga frågorna körs sedan mot modelldata för att hämta rätt delmängd av data, göra de beräkningar som definieras av formeln, and sedan fylla i values i rapporten.

Eftersom kontexten ändras beroende på var du placerar formeln kan även resultatet av formeln ändras. Anta till exempel att du skapar en formel som summerar values i kolumnen Profit i tabellen Sales: = SUM('Sales'[Profit]). If du använder den här formeln i en beräknad kolumn i tabellen Sales blir resultatet för formeln detsamma för hela tabellen, eftersom frågekontexten för formeln alltid är hela datauppsättningen i tabellen Sales. Resultaten kommer att ha vinstresultat för all regioner, all produkter, all år, and och så vidare.

Användare vill dock vanligtvis inte se samma resultat hundratals gånger, utan vill i stället få vinst för en viss year, ett visst land, ett visst product, or någon kombination av dessa, and sedan få en totalsumma.

I en rapport ändras kontexten genom filtrering, lägger till or tar bort fält, and med hjälp av utsnitt. För varje ändring utvärderas frågekontexten i vilken measure utvärderas. Därför utvärderas samma formel, som används i en measure, i en annan frågekontext för varje cell.

Filter kontext

Filter kontext är den uppsättning values som tillåts i varje kolumn, or i den values som hämtats från en related tabell. Filters kan tillämpas på kolumnen i designverktyget or i presentationsskiktet (rapporter och and Pivottabeller). Filters kan också definieras explicit av filter uttryck i formeln.

Filter-kontext läggs till när du specificerar filter-begränsningar för den uppsättning values som är tillåtna i en kolumn or-tabell genom att använda argument i en formel. Filter kontext gäller utöver andra kontexter, till exempel radkontext or frågekontext.

I tabellmodeller finns det många sätt att skapa filter kontext. I kontexten för klienter som kan använda modellen, till exempel Power BI-rapporter, kan användarna skapa filters i farten genom att lägga till utsnitt or rapport filters på raden and kolumnrubriker. Du kan också ange filter uttryck direkt i formeln för att ange relatedvalues, för att filter tabeller som används som indata, or för att dynamiskt hämta kontext för de values som används i beräkningar. Du kan också helt rensa or eller selektivt rensa filters på vissa kolumner. Detta är mycket användbart när du skapar formler som calculate totalsummor.

Mer information om hur du skapar filters i formler finns i FILTER Function (DAX).
Ett exempel på hur filters kan rensas för att skapa totalsummor finns i ALL Function (DAX).

Exempel på hur du selektivt rensar and och använder filters i formler finns i ALLEXCEPT.

Fastställa kontext i formler

När du skapar en DAX formel testas formeln first för giltig syntax, and sedan testas för att se till att namnen på kolumnerna and tabeller som ingår i formeln finns i den aktuella kontexten. Om If någon kolumn i or tabell som specificeras av formeln inte kan hittas, returneras en error.

Kontexten under valideringen (and omberäkningsåtgärder) bestäms enligt beskrivningen i föregående avsnitt, med hjälp av tillgängliga tabeller i modellen, eventuella relationer mellan tabellerna, and alla filters som har tillämpats.

if du till exempel precis har importerat vissa data till en ny tabell and det är notrelated till andra tabeller (and du har not tillämpat alla filters) är aktuella kontexten hela uppsättningen kolumner i tabellen. If tabellen är kopplad med relationer till andra tabeller, den aktuella kontexten inkluderar de related-tabellerna. If du lägger till en kolumn från tabellen i en rapport som har utsnitt and kanske någon rapport filtersär kontexten för formeln delmängden av data i varje cell i rapporten.

Kontext är ett kraftfullt begrepp som också kan göra det svårt att felsöka formler. Vi rekommenderar att du börjar med enkla formler and relationer för att se hur kontext fungerar. Följande avsnitt innehåller några exempel på hur formler använder olika typer av kontext för att dynamiskt returnera resultat.

Operatörer

Det DAX språket använder fyra olika typer av beräkningsoperatorer i formler:

  • Jämförelseoperatorer för att jämföra valuesand returnerar en logisk TRUE`FALSE` value.
  • Matematiska operatorer för att utföra beräkningar som returnerar numeriska värden för values.
  • Operatorer för sammanfogning av text för att foga samman fler än or textsträngar.
  • Logiska operatorer som kombinerar två or fler uttryck för att returnera ett enda resultat.

Detaljerad information om operatorer som används i DAX formler finns i DAX operatorer.

Arbeta med tabellens and-kolumner

Tabeller i tabelldatamodeller ser ut som Excel-tabeller, men skiljer sig åt i hur de fungerar med data and med formler:

  • Formler fungerar bara med tabeller and kolumner, not med enskilda celler, range referenser or matriser.
  • Formler kan använda relationer för att hämta values från related tabeller. De values som hämtas är alltid related till den aktuella raden value.
  • Du kan inte ha oregelbundna or "ojämna" data som man kan i ett Excel-kalkylblad. Varje rad i en tabell måste innehålla samma antal kolumner. Du kan dock ha tomma values i vissa kolumner. Excel-datatabeller and och datatabeller i tabellmodell not är utbytbara.
  • Eftersom en datatyp har angetts för varje kolumn måste varje value i den kolumnen vara av samma typ.

Att hänvisa till kolumner i tabeller and i formler

Du kan referera till valfri tabell and kolumn med hjälp av dess namn. Till exempel illustrerar följande formel hur du refererar till kolumner från två tabeller med hjälp av ett fullständigt kvalificerat namn för och:


= SUM('New Sales'[Amount]) + SUM('Past Sales'[Amount])  

När en formel utvärderas first modelldesignern söka efter allmän syntax, and kontrollerar sedan namnen på kolumner and tabeller som du anger mot möjliga kolumner and tabeller i den aktuella kontexten. If namnet är tvetydigt orif kolumnen or tabell inte kan hittas, kommer du att få en error på formeln (en #ERROR-sträng i stället för ett data value i celler där error uppstår). Mer information om namngivningskrav för tabeller, kolumner, and andra objekt finns i Namngivningskrav i DAX syntax.

Tabellrelationer

Genom att skapa relationer mellan tabeller får du möjlighet att använda relatedvalues i andra tabeller i beräkningar. Du kan till exempel använda en beräknad kolumn för att fastställa all leveransposterna related till den aktuella återförsäljaren, and sedan sum leveranskostnaderna för var och en. I många fall kan dock en relation not vara nödvändig. Du kan använda funktionen LOOKUPVALUE i en formel för att returnera value i result_columnName för raden som uppfyller kriterierna som anges i argumenten för search_columnandsearch_value.

Många DAX funktioner kräver att det finns en relation mellan tabellerna, or mellan flera tabeller, för att hitta de kolumner som du har refererat till and returnera resultat som är meningsfulla. Andra funktioner försöker identifiera relationen. För bästa resultat bör du dock alltid skapa en relation där det är möjligt. Tabelldatamodeller stöder flera relationer mellan tabeller. För att undvika förvirring or felaktiga resultat är det bara en relation i en time som har angetts som den aktiva relationen, men du kan ändra den aktiva relationen efter behov för att korsa olika anslutningar i data i beräkningar. USERELATIONSHIP funktion kan användas för att ange en or fler relationer som ska användas i en specifik beräkning.

Det är viktigt att observera dessa formeldesignregler när du använder relationer:

  • När tabeller är anslutna av en relation måste du se till att de två kolumner som används som nycklar har values som matchar. Referensintegritet tillämpas not, därför är det möjligt att ha icke-matchande values i en nyckelkolumn and, så kan det fortfarande skapa en relation. If detta händer bör du vara medveten om att blankvaluesor icke-matchande values kan påverka resultatet av formler.

  • När du länkar tabeller i din modell med hjälp av relationer förstorar du omfånget, orkontext, där dina formler utvärderas. Ändringar i kontexten till följd av tillägg av nya tabeller, nya relationer or från ändringar i den aktiva relationen kan leda till att dina resultat ändras på ett sätt som du kanske not förutser. Mer information finns i Context i den här artikeln.

Bearbeta and uppdatering

Processandomberäkning är två separata men related åtgärder. Du bör noggrant förstå dessa begrepp när du utformar en modell som contains komplexa formler, stora mängder data or data som hämtas från externa datakällor.

Process (uppdatera) uppdaterar data i en modell med nya data från en extern datakälla.

Omberäkning är processen att uppdatera resultatet av formler för att återspegla eventuella ändringar i själva formler and för att återspegla ändringar i underliggande data. Omberäkning kan påverka prestanda på följande sätt:

  • values i en beräknad kolumn beräknas och and lagras i modellen. Om du vill uppdatera values i den beräknade kolumnen måste du bearbeta modellen med något av tre bearbetningskommandon – Process Full, Process Data or Process Recalc. Resultatet av formeln måste alltid beräknas om för hela kolumnen när du ändrar formeln.

  • De values som beräknas av mått utvärderas dynamiskt när en användare lägger till measure i en pivottabell or öppna en rapport. när användaren ändrar kontexten values returneras av den measure ändringen. Resultatet av measure återspeglar alltid det senaste i cacheminnet.

Bearbetningen av and omberäkning har ingen effect på säkerhetsformler på radnivå såvida inte resultatet av en omberäkning returnerar en annan value, vilket gör raden sökbar ornot för rollmedlemmar.

Uppdateringar

DAX förbättras ständigt. Nya and uppdaterade funktioner släpps med den next tillgängliga uppdateringen, som vanligtvis är månadsvis. Tjänsterna uppdateras first, följt av installerade program som Power BI Desktop, Excel, SQL Server Management Studio (SSMS), and Analysis Services-projekttillägg för Visual Studio (SSDT). SQL Server Analysis Services uppdateras med den next kumulativa uppdateringen. Nya funktioner meddelas firstand beskrivs i DAX funktionsreferens som sammanfaller med Power BI Desktop-uppdateringar.

Not all funktioner stöds i earlier versioner av SQL Server Analysis Services and Excel.

Felsökning

If du får en error när du definierar en formel kan formeln innehålla antingen en syntaktisk error, semantisk error, orberäkning error.

Syntaktiska fel är de enklaste att lösa. De innebär vanligtvis en försvunnen parentes, or, kommatecken.

Den andra typen av error inträffar när syntaxen är korrekt, men den valueor en kolumn som refereras till är not meningsfull i formelns kontext. Sådana semantiska and beräkningsfel kan orsakas av något av följande problem:

  • Formeln refererar till en icke-befintlig kolumn, tabell, or funktion.
  • Formeln verkar vara korrekt, men när datamotorn hämtar data upptäcker den en typmismatch and som orsakar ett fel error.
  • Formeln skickar ett felaktigt tal or typ av argument till en funktion.
  • Formeln refererar till en annan kolumn som har en error, and därför är dess values ogiltiga.
  • Formeln refererar till en kolumn som har not bearbetats, vilket innebär att den har metadata men inga faktiska data att använda för beräkningar.

I de first fyra fallen flaggar DAX hela kolumnen som contains den ogiltiga formeln. I det last fallet gråser DAX ut kolumnen för att indikera att kolumnen är i ett obearbetat tillstånd.

Appar och verktyg and

Power BI Desktop

Power BI Desktop

Power BI Desktop är en kostnadsfri datamodellering and rapporteringsprogram. Modelldesignern innehåller en DAX redigerare för att skapa DAX beräkningsformler.

Power Pivottabell i Excel

Power Pivot i Excel

Designern för Power Pivot i Excel innehåller en redigerare DAX för att skapa beräkningsformler DAX.

Visual Studio

Visual Studio

Visual Studio med Analysis Services-projekt-tillägget (VSIX) används för att skapa Analysis Services-modellprojekt. Tabellmodelldesignern som installeras med projekttillägget innehåller en DAX redigerare.

SQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) är ett viktigt verktyg för att arbeta med Analysis Services. SSMS innehåller en DAX frågeredigerare för att fråga båda tabellmodellerna and flerdimensionella modeller.

DAX Studio

DAX Studio-ikonen

DAX Studio är ett klientverktyg med öppen källkod för att skapa and som kör DAX frågor mot Analysis Services, Power BI Desktop, andPower Pivot i Excel-modeller.

Tabellredigeraren

ikon för tabellredigeraren

Tabular Editor är ett verktyg med öppen källkod som ger en intuitiv, hierarkisk vy över varje objekt i tabellmodellmetadata. Tabellredigeraren innehåller en DAX-redigerare med syntaxmarkering, som ger ett enkelt sätt att redigera mått, beräknad kolumn and beräknade tabelluttryck.

Utbildningsresurser

När du lär dig DAXär det bäst att använda det program som du använder för att skapa dina datamodeller. Analysis Services, Power BI Desktop, andPower Pivot i Excel all innehåller artiklar and handledningar som innehåller lektioner om att skapa mått, beräknade kolumner, and rad-filters med hjälp av DAX. Här är några ytterligare resurser:

Videos

Använd DAX i Power BI Desktop inlärning path.

Definitive Guide to DAX av Alberto Ferrari and Marco Russo (Microsoft Press). Now i sin second utgåva ger denna omfattande guide grundläggande till innovativa högpresterande tekniker för nybörjardatamodellerare and BI-proffs.

Den definitiva guiden till DAX book image

Gemenskap

DAX har en livlig gemenskap som alltid är villig att dela med sig av sin expertis. Microsoft Power BI Community har ett särskilt diskussionsforum för DAX, DAX Kommandon and Tips.