Översikt över DAXDAX overview

Data Analysis Expressions (DAX) är ett språk för formeluttryck som används i Analysis Services, Power BI och Power Pivot i Excel.Data Analysis Expressions (DAX) is a formula expression language used in Analysis Services, Power BI, and Power Pivot in Excel. DAX-formler innehåller funktioner, operatorer och värden för att utföra avancerade beräkningar och frågor om data i relaterade tabeller och kolumner i tabelldatamodeller.DAX formulas include functions, operators, and values to perform advanced calculations and queries on data in related tables and columns in tabular data models.

Den här artikeln innehåller bara en grundläggande introduktion till de viktigaste begreppen i DAX.This article provides only a basic introduction to the most important concepts in DAX. Den beskriver DAX för alla produkter som använder den.It describes DAX as it applies to all the products that use it. Vissa funktioner kanske inte gäller för vissa produkter eller användningsfall.Some functionality may not apply to certain products or use cases. Läs dokumentationen för din produkt som beskriver hur du implementerar DAX.Refer to your product's documentation describing its particular implementation of DAX.

BeräkningarCalculations

DAX-formler används för mått, beräknade kolumner, beräknade tabeller och säkerhet på radnivå.DAX formulas are used in measures, calculated columns, calculated tables, and row-level security.

MåttMeasures

Mått är dynamiska beräkningsformler där resultatet förändras beroende på kontexten.Measures are dynamic calculation formulas where the results change depending on context. Mått används i rapporter som stöder kombination av och filtrering av modelldata genom att använda flera attribut, till exempel en Power BI-rapport eller Excel-pivottabell eller ett pivotdiagram.Measures are used in reporting that support combining and filtering model data by using multiple attributes such as a Power BI report or Excel PivotTable or PivotChart. Mått skapas med hjälp av DAX-formelfältet i modelldesignern.Measures are created by using the DAX formula bar in the model designer.

En formel i ett mått kan använda standardaggregeringsfunktioner som skapas automatiskt med hjälp av funktionen Autosumma, till exempel COUNT eller SUM, eller så kan du definiera en egen formel med hjälp av DAX-formelfältet.A formula in a measure can use standard aggregation functions automatically created by using the Autosum feature, such as COUNT or SUM, or you can define your own formula by using the DAX formula bar. Namngivna mått kan skickas som ett argument till andra mått.Named measures can be passed as an argument to other measures.

När du definierar en formel för ett mått i formelfältet visar en knappbeskrivningsfunktion en förhandsgranskning av vad resultaten skulle vara för summan i den aktuella kontexten, men i övrigt matas resultatet inte direkt var som helst.When you define a formula for a measure in the formula bar, a Tooltip feature shows a preview of what the results would be for the total in the current context, but otherwise the results are not immediately output anywhere. Anledningen till att det inte går att visa (det filtrerade) resultatet av beräkningen direkt är att resultatet av ett mått inte kan fastställas utan kontext.The reason you cannot see the (filtered) results of the calculation immediately is because the result of a measure cannot be determined without context. För att utvärdera ett mått krävs ett rapporteringsklientprogram som kan tillhandahålla den kontext som krävs för att hämta de data som är relevanta för varje cell och sedan utvärdera uttrycket för varje cell.To evaluate a measure requires a reporting client application that can provide the context needed to retrieve the data relevant to each cell and then evaluate the expression for each cell. Klienten kan vara en Excel-pivottabell eller ett pivotdiagram, en Power BI-rapport eller ett tabelluttryck i en DAX-fråga i SQL Server Management Studio (SSMS).That client might be an Excel PivotTable or PivotChart, a Power BI report, or a table expression in a DAX query in SQL Server Management Studio (SSMS).

Oavsett klient körs en separat fråga för varje cell i resultaten.Regardless of the client, a separate query is run for each cell in the results. Det vill säga att varje kombination av rad- och kolumnrubriker i en pivottabell, eller varje val av utsnitt och filter i en Power BI-rapport, genererar en annan delmängd av data som måttet beräknas för.That is to say, each combination of row and column headers in a PivotTable, or each selection of slicers and filters in a Power BI report, generates a different subset of data over which the measure is calculated. Använd exempelvis den här enkla måttformeln:For example, using this very simple measure formula:

Total Sales = SUM([Sales Amount])

När en användare placerar måttet TotalSales i en rapport och sedan placerar kolumnen Product Category från tabellen Product i Filter beräknas och visas summan av försäljningsbeloppet för varje produktkategori.When a user places the TotalSales measure in a report, and then places the Product Category column from a Product table into Filters, the sum of Sales Amount is calculated and displayed for each product category.

Till skillnad från syntaxen för beräknade kolumner så används måttets namn som prefix före formeln.Unlike calculated columns, the syntax for a measure includes the measure's name preceding the formula. I det här exemplet visas namnet Total försäljning före formeln.In the example just provided, the name Total Sales appears preceding the formula. När du har skapat ett mått visas namnet och dess definition i rapportklientens fältlista, och beroende på perspektiv och roller är det tillgängligt för alla som använder modellen.After you've created a measure, the name and its definition appear in the reporting client application Fields list, and depending on perspectives and roles is available to all users of the model.

Du kan läsa mer här:To learn more, see:
Mått i Power BI DesktopMeasures in Power BI Desktop
Mått i Analysis ServicesMeasures in Analysis Services
Mått i Power PivotMeasures in Power Pivot

Beräknade kolumnerCalculated columns

En beräknad kolumn är en kolumn som du lägger till i en befintlig tabell (i modelldesignern) och sedan skapar du en DAX-formel som definierar kolumnens värden.A calculated column is a column that you add to an existing table (in the model designer) and then create a DAX formula that defines the column's values. När en beräknad kolumn innehåller en giltig DAX-formel beräknas värdena för varje rad så fort formeln anges.When a calculated column contains a valid DAX formula, values are calculated for each row as soon as the formula is entered. Värdena lagras sedan i datamodellen i minnet.Values are then stored in the in-memory data model. I en datumtabell, till exempel, när formeln anges i formelfältet:For example, in a Date table, when the formula is entered into the formula bar:

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

Du beräknar ett värde för varje rad i tabellen genom att ta värden från kolumnen Kalenderår (i samma datumtabell), lägga till ett blanksteg och versalen Q och sedan lägga till värdena från kolumnen Kalenderkvartal (i samma datumtabell).A value for each row in the table is calculated by taking values from the Calendar Year column (in the same Date table), adding a space and the capital letter Q, and then adding the values from the Calendar Quarter column (in the same Date table). Resultatet för varje rad i den beräknade kolumnen beräknas omedelbart och visas till exempel som 2017 Q1.The result for each row in the calculated column is calculated immediately and appears, for example, as 2017 Q1. Kolumnvärden beräknas bara på nytt om tabellen eller någon relaterad tabell bearbetas (uppdateras) eller om modellen tas bort från minnet och sedan läses in på nytt, som när du stänger en Power BI Desktop-fil och sedan öppnar den igen.Column values are only recalculated if the table or any related table is processed (refresh) or the model is unloaded from memory and then reloaded, like when closing and reopening a Power BI Desktop file.

Mer information finns i:To learn more, see:
Beräknade kolumner i Power BI DesktopCalculated columns in Power BI Desktop
Beräknade kolumner i Analysis ServicesCalculated columns in Analysis Services
Beräknade kolumner i Power Pivot.Calculated Columns in Power Pivot.

Beräknade tabellerCalculated tables

En beräknad tabell är ett beräknat objekt som baseras på ett formeluttryck som härletts från alla eller delar av andra tabeller i samma modell.A calculated table is a computed object, based on a formula expression, derived from all or part of other tables in the same model. I stället för att fråga och läsa in värden i den nya tabellens kolumner från en datakälla definierar en DAX-formel tabellens värden.Instead of querying and loading values into your new table's columns from a data source, a DAX formula defines the table's values.

Beräknade tabeller kan vara till hjälp i en dimension med olika roller.Calculated tables can be helpful in a role-playing dimension. Ett exempel är datumtabellen, som OrderDate, ShipDate eller DueDate, beroende på sekundärnyckelrelationen.An example is the Date table, as OrderDate, ShipDate, or DueDate, depending on the foreign key relationship. 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 så att den fungerar som alla andra tabeller.By creating a calculated table for ShipDate explicitly, you get a standalone table that is available for queries, as fully operable as any other table. Beräknade tabeller är också användbara när du konfigurerar en filtrerad raduppsättning eller en delmängd eller supermängd av kolumner från andra befintliga tabeller.Calculated tables are also useful when configuring a filtered rowset, or a subset or superset of columns from other existing tables. På så sätt kan du behålla den ursprungliga tabellen medan du skapar variationer i tabellen för att stödja vissa scenarier.This allows you to keep the original table intact while creating variations of that table to support specific scenarios.

Beräknade tabeller stöder relationer med andra tabeller.Calculated tables support relationships with other tables. Kolumnerna i den beräknade tabellen har datatyper, formatering, och kan tillhöra en datakategori.The columns in your calculated table have data types, formatting, and can belong to a data category. Beräknade tabeller kan namnges och visas eller döljas precis som andra tabeller.Calculated tables can be named, and surfaced or hidden just like any other table. Beräknade tabeller beräknas om någon av de tabeller som den hämtar data från uppdateras.Calculated tables are re-calculated if any of the tables it pulls data from are refreshed or updated.

Mer information finns i:To learn more, see:
Beräknade tabeller i Power BI DesktopCalculated tables in Power BI Desktop
Beräknade tabeller i Analysis Services.Calculated tables in Analysis Services.

Säkerhet på radnivåRow-level security

Med säkerhet på radnivå måste en DAX-formel utvärderas till ett booleskt TRUE/FALSE-villkor och definiera vilka rader som kan returneras av resultatet för en fråga sett till vilka som har en viss roll.With row-level security, a DAX formula must evaluate to a Boolean TRUE/FALSE condition, defining which rows can be returned by the results of a query by members of a particular role. För till exempel medlemmar i försäljningsrollen har tabellen Kunder följande DAX-formel:For example, for members of the Sales role, the Customers table with the following DAX formula:

= Customers[Country] = "USA"

Medlemmar i försäljningsrollen kan bara se data för kunder i USA, och aggregeringar, till exempel SUM, returneras endast för kunder i USA.Members of the Sales role will only be able to view data for customers in the USA, and aggregates, such as SUM are returned only for customers in the USA. Säkerhet på radnivå är inte tillgängligt i Power Pivot i Excel.Row-level security is not available in Power Pivot in Excel.

När du definierar säkerhet på radnivå med hjälp av DAX-formeln skapar du en tillåten raduppsättning.When defining row-level secuirty by using DAX formula, you are creating an allowed row set. Detta nekar inte åtkomst till andra rader. De returneras i stället inte som en del av den tillåtna raduppsättningen.This does not deny access to other rows; rather, they are simply not returned as part of the allowed row set. Andra roller kan tillåta åtkomst till rader som exkluderas av DAX-formeln.Other roles can allow access to the rows excluded by the DAX formula. Om en användare är medlem i en annan roll och den rollens säkerhet på radnivå tillåter åtkomst till den specifika raduppsättningen så kan användaren visa data för den raden.If a user is a member of another role, and that role's row-level security allows access to that particular row set, the user can view data for that row.

Formler för säkerhet på radnivå tillämpas både på de angivna raderna och relaterade rader.Row-level security formulas apply to the specified rows as well as related rows. När en tabell har flera relationer använder filtret säkerhet för den aktiva relationen.When a table has multiple relationships, filters apply security for the relationship that is active. Formler för säkerhet på radnivå korsas med andra formler som definieras för relaterade tabeller.Row-level security formulas will be intersected with other formulas defined for related tables.

Mer information finns i:To learn more, see:
Säkerhet på radnivå (RLS) med Power BIRow-level security (RLS) with Power BI
Roller i Analysis ServicesRoles in Analysis Services

FrågorQueries

DAX-frågor kan skapas och köras i SQL Server Management Studio (SSMS) och verktyg med öppen källkod såsom DAX Studio (daxstudio.org).DAX queries can be created and run in SQL Server Management Studio (SSMS) and open-source tools like DAX Studio (daxstudio.org). Till skillnad från DAX-beräkningsformler, som endast kan skapas i tabelldatamodeller, kan DAX-frågor också köras mot flerdimensionella Analysis Services-modeller.Unlike DAX calculation formulas, which can only be created in tabular data models, DAX queries can also be run against Analysis Services Multidimensional models. DAX-frågor är ofta enklare att skriva och effektivare än MDX-frågor (multidimensionella datauttryck).DAX queries are often easier to write and more efficient than Multidimensional Data Expressions (MDX) queries.

En DAX-fråga är en instruktion som liknar en SELECT-instruktion i T-SQL.A DAX query is a statement, similar to a SELECT statement in T-SQL. Den mest grundläggande typen av DAX-frågor är ett evaluate-uttryck.The most basic type of DAX query is an evaluate statement. Exempel:For example,

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

I Resultat returneras en tabell som endast innehåller de produkter som har en SafetyStockLevel på mindre än 200, i stigande ordning efter EnglishProductName.Returns in Results a table listing only those products with a SafetyStockLevel less than 200, in ascending order by EnglishProductName.

Du kan skapa mått som en del av frågan.You can create measures as part of the query. Mått finns bara för frågans varaktighet.Measures exist only for the duration of the query. Mer information finns i DAX-frågor.To learn more, see DAX queries.

FormlerFormulas

DAX-formler är nödvändiga för att skapa beräkningar i beräknade kolumner och mått, samt för att skydda dina data med hjälp av säkerhet på radnivå.DAX formulas are essential for creating calculations in calculated columns and measures, and securing your data by using row-level security. Om du vill skapa formler för beräknade kolumner och mått använder du formelfältet längst upp i modelldesignerns fönster eller DAX-redigeraren.To create formulas for calculated columns and measures, use the formula bar along the top of the model designer window or the DAX Editor. Om du vill skapa formler för säkerhet på radnivå använder du dialogrutan Rollhanterare eller Hantera roller.To create formulas for row-level security, use the Role Manager or Manage roles dialog box. Informationen i det här avsnittet är avsedd att få dig att komma igång med att förstå grunderna i DAX-formler.Information in this section is meant to get you started with understanding the basics of DAX formulas.

Grundläggande om formlerFormula basics

DAX-formler kan vara enkla eller ganska komplexa.DAX formulas can be very simple or quite complex. I följande tabell visas några exempel på enkla formler som kan användas i en beräknad kolumn.The following table shows some examples of simple formulas that could be used in a calculated column.

FormelFormula DefinitionDefinition
= TODAY() Infogar dagens datum på varje rad i en beräknad kolumn.Inserts today's date in every row of a calculated column.
= 3 Infogar värdet 3 på varje rad i en beräknad kolumn.Inserts the value 3 in every row of a calculated column.
= [Column1] + [Column2] Lägger till värdena i samma rad i [Column1] och [Column2] och placerar resultatet i den beräknade kolumnen i samma rad.Adds the values in the same row of [Column1] and [Column2] and puts the results in the calculated column of the same row.

Oavsett om formeln du skapar är enkel eller komplex kan du använda följande steg när du skapar en formel:Whether the formula you create is simple or complex, you can use the following steps when building a formula:

  1. Varje formel måste börja med ett likhetstecken (=).Each formula must begin with an equal sign (=).

  2. Du kan antingen skriva eller välja ett funktionsnamn eller skriva ett uttryck.You can either type or select a function name, or type an expression.

  3. Börja skriva in de första bokstäverna i funktionen eller namnet du vill använda, så visas en lista över tillgängliga funktioner, tabeller och kolumner i Komplettera automatiskt.Begin to type the first few letters of the function or name you want, and AutoComplete displays a list of available functions, tables, and columns. Tryck på TABB för att lägga till ett objekt från listan Komplettera automatiskt till formeln.Press TAB to add an item from the AutoComplete list to the formula.

    Du kan också klicka på knappen Fx om du vill visa en lista över tillgängliga funktioner.You can also click the Fx button to display a list of available functions. Om du vill välja en funktion från listrutan använder du piltangenterna för att markera objektet och klickar på OK för att lägga till funktionen i formeln.To select a function from the dropdown list, use the arrow keys to highlight the item, and click OK to add the function to the formula.

  4. Ange argumenten till funktionen genom att välja dem från en listruta över möjliga tabeller och kolumner, eller genom att skriva in värden.Supply the arguments to the function by selecting them from a dropdown list of possible tables and columns, or by typing in values.

  5. Sök efter syntaxfel: se till att alla parenteser är stängda och att kolumner, tabeller och värden är korrekt refererade.Check for syntax errors: ensure that all parentheses are closed and columns, tables and values are referenced correctly.

  6. Tryck på RETUR för att godkänna formeln.Press ENTER to accept the formula.

Anteckning

I en beräknad kolumn fylls kolumnen med värden så snart du anger formeln och formeln är verifierad.In a calculated column, as soon as you enter the formula and the formula is validated, the column is populated with values. I ett mått trycker du på RETUR för att spara måttdefinitionen i tabellen.In a measure, pressing ENTER saves the measure definition with the table. Om en formel är ogiltig visas ett fel.If a formula is invalid, an error is displayed.

I det här exemplet ska vi titta på en formel i ett mått med namnet dagar i det aktuella kvartalet:In this example, let's look at a formula in a measure named Days in Current Quarter:

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

Det här måttet används för att skapa ett jämförelseförhållande mellan en ofullständig period och föregående period.This measure is used to create a comparison ratio between an incomplete period and the previous period. Formeln måste ta hänsyn till den andel av perioden som har förflutit och jämföra den med samma proportion i föregående period.The formula must take into account the proportion of the period that has elapsed, and compare it to the same proportion in the previous period. I det här fallet ger [Days Current Quarter to Date]/[Days in Current Quarter] den andel som har förflutit i den aktuella perioden.In this case, [Days Current Quarter to Date]/[Days in Current Quarter] gives the proportion elapsed in the current period.

Den här formeln innehåller följande element:This formula contains the following elements:

FormelelementFormula element BeskrivningDescription
Days in Current Quarter Måttets namn.The name of the measure.
= Likhetstecknet (=) börjar formeln.The equals sign (=) begins the formula.
COUNTROWS COUNTROWS räknar antalet rader i datumtabellenCOUNTROWS counts the number of rows in the Date table
() Den öppna och avslutande parentesen anger argument.Open and closing parenthesis specifies arguments.
DATESBETWEEN Funktionen DATESBETWEEN returnerar datumen mellan det senaste datumet för varje värde i datumkolumnen i datumtabellen.The DATESBETWEEN function returns the dates between the last date for each value in the Date column in the Date table.
'Date' Anger datumtabellen.Specifies the Date table. Tabellerna är inom enkla citattecken.Tables are in single quotes.
[Date] Anger datumkolumnen i datumtabellen.Specifies the Date column in the Date table. Kolumnerna är inom hakparenteser.Columns are in brackets.
,
STARTOFQUARTER Funktionen STARTOFQUARTER returnerar datumet för början av kvartalet.The STARTOFQUARTER function returns the date of the start of the quarter.
LASTDATE Funktionen LASTDATE returnerar det sista datumet i kvartalet.The LASTDATE function returns the last date of the quarter.
'Date' Anger datumtabellen.Specifies the Date table.
[Date] Anger datumkolumnen i datumtabellen.Specifies the Date column in the Date table.
,
ENDOFQUARTER Funktionen ENDOFQUARTERThe ENDOFQUARTER function
'Date' Anger datumtabellen.Specifies the Date table.
[Date] Anger datumkolumnen i datumtabellen.Specifies the Date column in the Date table.

Använda formler för automatisk kompletteringUsing formula AutoComplete

Med automatisk komplettering kan du ange en giltig formelsyntax genom att tillhandahålla alternativ för varje element i formeln.AutoComplete helps you enter a valid formula syntax by providing you with options for each element in the formula.

  • Du kan använda Komplettera automatiskt för formler mitt i en befintlig formel med kapslade funktioner.You can use formula AutoComplete in the middle of an existing formula with nested functions. Texten omedelbart före insättningspunkten används för att visa värden i listrutan, och all text efter insättningspunkten förblir oförändrad.The text immediately before the insertion point is used to display values in the drop-down list, and all of the text after the insertion point remains unchanged.

  • Komplettera automatiskt lägger inte till den avslutande parentesen och matchar inte parenteser automatiskt för funktioner.AutoComplete does not add the closing parenthesis of functions or automatically match parentheses. Du måste se till att varje funktion är syntaktiskt korrekt, annars kan du inte spara eller använda formeln.You must make sure that each function is syntactically correct or you cannot save or use the formula.

Använda flera funktioner i en formelUsing multiple functions in a formula

Du kan kapsla funktioner, vilket innebär att du använder resultatet från en funktion som argument till en annan funktion.You can nest functions, meaning that you use the results from one function as an argument of another function. Du kan kapsla upp till 64 funktionsnivåer i beräknade kolumner.You can nest up to 64 levels of functions in calculated columns. Kapsling kan dock göra det svårt att skapa eller felsöka formler.However, nesting can make it difficult to create or troubleshoot formulas. Många funktioner är utformade för att endast användas som kapslade funktioner.Many functions are designed to be used solely as nested functions. Dessa funktioner returnerar en tabell som inte kan sparas direkt som ett resultat. Det måste anges som indata för en tabellfunktion.These functions return a table, which cannot be directly saved as a result; it must be provided as input to a table function. Till exempel kräver funktionerna SUMX, AVERAGEX och MINX alla tabeller som första argument.For example, the functions SUMX, AVERAGEX, and MINX all require a table as the first argument.

FunktionerFunctions

En funktion är en namngiven formel i ett uttryck.A function is a named formula within an expression. De flesta funktioner har obligatoriska och valfria argument, även kallade parametrar, som indata.Most functions have required and optional arguments, also known as parameters, as input. När funktionen körs returneras ett värde.When the function is executed, a value is returned. DAX innehåller funktioner som du kan använda för att utföra beräkningar med hjälp av datum och tider, skapa villkorliga värden, arbeta med strängar, utföra uppslag baserat på relationer och möjlighet att iterera över en tabell för att utföra rekursiva beräkningar.DAX includes functions you can use to perform calculations using dates and times, create conditional values, work with strings, perform lookups based on relationships, and the ability to iterate over a table to perform recursive calculations. Om du är bekant med Excel-formler är många av dessa funktioner mycket lika dem. DAX-formler skiljer sig dock på följande viktiga sätt:If you are familiar with Excel formulas, many of these functions will appear very similar; however, DAX formulas are different in the following important ways:

  • En DAX-funktion refererar alltid till en fullständig kolumn eller tabell.A DAX function always references a complete column or a table. Om du endast vill använda specifika värden från en tabell eller kolumn kan du lägga till filter i formeln.If you want to use only particular values from a table or column, you can add filters to the formula.

  • Om du behöver anpassa radbaserade beräkningar finns det DAX-funktioner där du kan använda det aktuella radvärdet eller ett relaterat värde som en typ av parameter, för att utföra beräkningar som varierar beroende på kontext.If you need to customize calculations on a row-by-row basis, DAX provides functions that let you use the current row value or a related value as a kind of parameter, to perform calculations that vary by context. Information om hur dessa funktioner fungerar finns i Kontext i den här artikeln.To understand how these functions work, see Context in this article.

  • DAX innehåller många funktioner som returnerar en tabell i stället för ett värde.DAX includes many functions that return a table, rather than a value. Tabellen visas inte i en rapporteringsklient, men den används som indata för andra funktioner.The table is not displayed in a reporting client, but is used to provide input to other functions. Exempelvis kan du hämta en tabell och sedan räkna distinkta värden i den, eller beräkna dynamiska summor i filtrerade tabeller och kolumner.For example, you can retrieve a table and then count the distinct values in it, or calculate dynamic sums across filtered tables or columns.

  • Bland DAX-funktionerna finns olika tidsinformationsfunktioner.DAX functions include a variety of time intelligence functions. Med dessa funktioner kan du definiera eller välja datumintervall, samt utföra dynamiska beräkningar som baseras på dessa datum eller intervall.These functions let you define or select date ranges, and perform dynamic calculations based on these dates or range. Exempelvis kan du jämföra summor över parallella perioder.For example, you can compare sums across parallel periods.

Datum- och tidsfunktionerDate and time functions

Datum-och tidsfunktionerna i DAX liknar funktionerna datum och tid i Microsoft Excel.The date and time functions in DAX are similar to date and time functions in Microsoft Excel. DAX-funktioner baseras dock på en datetime-datatyp som startar den 1 mars 1900.However, DAX functions are based on a datetime data type starting March 1, 1900. Mer information finns i Datum- och tidsfunktioner.To learn more, see Date and time functions.

Filtrera funktionerFilter functions

Filterfunktionerna i DAX returnerar specifika datatyper, letar upp värden i relaterade tabeller och filtrerar efter relaterade värden.The filter functions in DAX return specific data types, look up values in related tales, and filter by related values. Sökfunktionerna använder sig av tabeller och relationer, exempelvis en databas.The lookup functions work by using tables and relationships, like a database. Med filtreringsfunktionerna kan du manipulera datakontexten och skapa dynamiska beräkningar.The filtering functions let you manipulate data context to create dynamic calculations. Mer information finns i Filterfunktioner.To learn more, see Filter functions.

Finansiella funktionerFinancial functions

De finansiella funktionerna i DAS används i formler som utför finansiella beräkningar, till exempel nuvärde och räntabilitet.The financial functions in DAX are used in formulas that perform financial calculations, such as net present value and rate of return. De här funktionerna liknar de finansiella funktioner som används i Microsoft Excel.These functions are similar to financial functions used in Microsoft Excel. Mer information finns i Finansiella funktioner.To learn more, see Financial functions.

InformationsfunktionerInformation functions

En informationsfunktion tittar på den cell eller rad som anges som ett argument och anger huruvida värdet matchar den förväntade typen.An information function looks at the cell or row that is provided as an argument and tells you whether the value matches the expected type. Till exempel kommer funktionen ISERROR att returnera TRUE om det värde som du refererar till innehåller ett fel.For example, the ISERROR function returns TRUE if the value that you reference contains an error. Mer information finns i Informationsfunktioner.To learn more, see Information functions.

Logiska funktionerLogical functions

Logiska funktioner fungerar på ett uttryck för att returnera information om värdena i uttrycket.Logical functions act upon an expression to return information about the values in the expression. Funktionen TRUE kan till exempel avgöra om ett uttryck som du utvärderar returnerar ett TRUE-värde.For example, the TRUE function lets you know whether an expression that you are evaluating returns a TRUE value. Mer information finns i Logiska funktioner.To learn more, see Logical functions.

Matematiska och trigonometriska funktionerMathematical and trigonometric functions

De matematiska funktionerna i DAX liknar de matematiska och trigonometriska funktionerna i Excel.The mathematical functions in DAX are very similar to the Excel mathematical and trigonometric functions. Vissa mindre skillnader förekommer i de numeriska datatyperna som används av DAX-funktioner.Some minor differences exist in the numeric data types used by DAX functions. Mer information finns i Matematik- och trigonometrifunktioner.To learn more, see Math and trig functions.

Andra funktionerOther functions

Dessa funktioner utför unika åtgärder som inte kan definieras av någon av kategorierna som de flesta andra funktioner hör till.These functions perform unique actions that cannot be defined by any of the categories most other functions belong to. Mer information finns i Andra funktioner.To learn more, see Other functions.

RelationsfunktionerRelationship functions

Med relationsfunktioner i DAX kan du returnera värden från en annan relaterad tabell, ange en viss relation som ska användas i ett uttryck och ange riktning för korsfiltrering.Relationship functions in DAX allow you to return values from another related table, specify a particular relationship to use in an expression, and specify cross filtering direction. Mer information finns i Relationsfunktioner.To lean more, see Relationship functions.

StatistikfunktionerStatistical functions

DAX tillhandahåller statistiska funktioner som utför aggregeringar.DAX provides statistical functions that perform aggregations. Utöver att skapa summor och medelvärden, eller hitta lägsta och högsta värden, kan du i DAX även filtrera en kolumn innan du aggregerar eller skapar aggregeringar baserat på relaterade tabeller.In addition to creating sums and averages, or finding the minimum and maximum values, in DAX you can also filter a column before aggregating or create aggregations based on related tables. Mer information finns i Statistikfunktioner.To learn more, see Statistical functions.

TextfunktionerText functions

Textfunktionerna i DAX liknar deras motsvarigheter i Excel.Text functions in DAX are very similar to their counterparts in Excel. Du kan returnera en del av en sträng, söka efter text i en sträng eller sammanfoga strängvärden.You can return part of a string, search for text within a string, or concatenate string values. DAX innehåller också funktioner för att kontrollera formatet för datum, tid och siffror.DAX also provides functions for controlling the formats for dates, times, and numbers. Mer information finns i Textfunktioner.To learn more, see Text functions.

TidsinformationsfunktionerTime intelligence functions

Med tidsinformationsfunktionerna i DAX kan du skapa beräkningar som använder inbyggd information om kalendrar och datum.The time intelligence functions provided in DAX let you create calculations that use built-in knowledge about calendars and dates. Med hjälp av tids- och datumintervall i kombination med aggregeringar eller beräkningar kan du skapa meningsfulla jämförelser mellan olika tidsperioder för försäljning, inventering och så vidare.By using time and date ranges in combination with aggregations or calculations, you can build meaningful comparisons across comparable time periods for sales, inventory, and so on. Mer information finns i Tidsinformationsfunktioner (DAX).To learn more, see Time intelligence functions (DAX).

Funktioner för tabellhanteringTable manipulation functions

De här funktionerna returnerar en tabell eller manipulerar befintliga tabeller.These functions return a table or manipulate existing tables. Med ADDCOLUMNS kan du till exempel lägga till beräknade kolumner i en angiven tabell, eller så kan du returnera en sammanfattningstabell över en uppsättning grupper med funktionen SUMMARIZECOLUMNS.For example, by using ADDCOLUMNS you can add calculated columns to a specified table, or you can return a summary table over a set of groups with the SUMMARIZECOLUMNS function. Mer information finns i Funktioner för tabellhantering.To learn more, see Table manipulation functions.

VariablerVariables

Du kan skapa variabler i ett uttryck med hjälp av VAR.You can create variables within an expression by using VAR. VAR är tekniskt sett inte en funktion, det är ett nyckelord som du använder till att lagra resultatet av ett uttryck som en namngiven variabel.VAR is technically not a function, it's a keyword to store the result of an expression as a named variable. Variabeln kan sedan skickas som ett argument till andra måttuttryck.That variable can then be passed as an argument to other measure expressions. Exempel:For example:

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.In this example, TotalQty can be passed as a named variable to other expressions. Variabler kan vara vilken skalär datatyp som helst, inklusive tabeller.Variables can be of any scalar data type, including tables. Det kan vara otroligt kraftfullt att använda variabler i DAX-formler.Using variables in your DAX formulas can be incredibly powerful.

DatatyperData types

Du kan importera data till en modell från många olika datakällor som kan ha stöd för olika datatyper.You can import data into a model from many different data sources that might support different data types. När du importerar data till en modell konverteras data till en av datatyperna tabellmodell.When you import data into a model, the data is converted to one of the tabular model data types. När modelldata används i en beräkning konverteras data till en DAX-datatyp för varaktigheten och resultatet av beräkningen.When the model data is used in a calculation, the data is then converted to a DAX data type for the duration and output of the calculation. När du skapar en DAX-formel avgör de termer som används i formeln automatiskt den värdedatatyp som returneras.When you create a DAX formula, the terms used in the formula will automatically determine the value data type returned.

DAX stöder följande datatyper:DAX supports the following data types:

Datatyp i modellData type in model Datatyp i DAXData type in DAX DescriptionDescription
HeltalWhole Number Ett heltalsvärde på 64 bitar (åtta byte) 1, 2A 64 bit (eight-bytes) integer value 1, 2 Siffror som inte har några decimaler.Numbers that have no decimal places. Heltal kan vara positiva eller negativa tal, men måste vara heltal mellan -9,223,372,036,854,775,808 (-2^63) och 9,223,372,036,854,775,807 (2^63-1).Integers can be positive or negative numbers, but must be whole numbers between -9,223,372,036,854,775,808 (-2^63) and 9,223,372,036,854,775,807 (2^63-1).
DecimaltalDecimal Number Ett reelt tal på 64 bitar (åtta byte) 1, 2A 64 bit (eight-bytes) real number 1, 2 Reella tal är tal som kan ha decimaler.Real numbers are numbers that can have decimal places. Reella tal omfattar ett brett utbud av värden:Real numbers cover a wide range of values:

Negativa värden från -1.79 E + 308 till -2.23 E-308Negative values from -1.79E +308 through -2.23E -308

NollZero

Positiva värden från 2.23 E-308 till 1.79 E + 308Positive values from 2.23E -308 through 1.79E + 308

Antalet signifikanta siffror är dock begränsat till 17 decimaler.However, the number of significant digits is limited to 17 decimal digits.
BooleskBoolean BooleskBoolean Antingen ett sant eller falskt värde.Either a True or False value.
TextText SträngString En datasträng med Unicode-tecken.A Unicode character data string. Det kan vara strängar, tal eller datum som visas i ett textformat.Can be strings, numbers or dates represented in a text format.
DatumDate Datum/tidDate/time Datum och tid i en godkänd datum-och tidsrepresentation.Dates and times in an accepted date-time representation.

Giltiga datum är alla datum efter den 1 mars 1900.Valid dates are all dates after March 1, 1900.
ValutaCurrency ValutaCurrency Datatypen Currency tillåter värden mellan -922,337,203,685,477.5808 och 922,337,203,685,477.5807 med fyra decimalsiffror med fast precision.Currency data type allows values between -922,337,203,685,477.5808 to 922,337,203,685,477.5807 with four decimal digits of fixed precision.
SaknasN/A TomBlank Blank är en datatyp i DAX som visar och ersätter null-värden i SQL.A blank is a data type in DAX that represents and replaces SQL nulls. Du kan skapa ett tomt värde med funktionen BLANK och testa om det finns några tomma värden med hjälp av den logiska funktionen ISBLANK.You can create a blank by using the BLANK function, and test for blanks by using the logical function, ISBLANK.

Tabelldatamodeller innehåller även datatypen Table som indata eller utdata till många DAX-funktioner.Tabular data models also include the Table data type as the input or output to many DAX functions. Funktionen FILTER använder till exempel en tabell som indata och matar ut en annan tabell som bara innehåller de rader som uppfyller filtervillkoren.For example, the FILTER function takes a table as input and outputs another table that contains only the rows that meet the filter conditions. Genom att kombinera tabellfunktioner med aggregeringsfunktioner kan du utföra komplexa beräkningar över dynamiskt definierade datauppsättningar.By combining table functions with aggregation functions, you can perform complex calculations over dynamically defined data sets.

Även om datatyper vanligtvis ställs in automatiskt är det viktigt att förstå datatyper och hur de gäller, särskilt för DAX-formler.While data types are typically automatically set, it is important to understand data types and how they apply, in-particular, to DAX formulas. Fel i formler eller oväntade resultat orsakas exempelvis ofta av en viss operator som inte kan användas med en datatyp som anges i ett argument.Errors in formulas or unexpected results, for example, are often caused by using a particular operator that cannot be used with a data type specified in an argument. Formeln = 1 & 2 returnerar ett strängresultat på 12.For example, the formula, = 1 & 2, returns a string result of 12. Formeln = "1" + "2" däremot returnerar ett heltalsresultat på 3.The formula, = "1" + "2", however, returns an integer result of 3.

KontextContext

Det är viktigt att du förstår begreppet kontext när du skapar DAX-formler.Context is an important concept to understand when creating DAX formulas. Med hjälp av sammanhang kan du utföra dynamisk analys, eftersom resultatet av en formel ändras för att återspegla den aktuella rad- eller cellmarkeringen och även relaterade data.Context is what enables you to perform dynamic analysis, as the results of a formula change to reflect the current row or cell selection and also any related data. Att förstå sammanhang och använda sammanhang är effektivt för att skapa högpresterande, dynamiska analyser och för att felsöka problem i formler.Understanding context and using context effectively are critical for building high-performing, dynamic analyses, and for troubleshooting problems in formulas.

Formler i tabellmodeller kan utvärderas i en annan kontext, beroende på andra designelement:Formulas in tabular models can be evaluated in a different context, depending on other design elements:

  • Filter som används i en pivottabell eller rapportFilters applied in a PivotTable or report
  • Filter som definierats i en formelFilters defined within a formula
  • Relationer som anges med hjälp av särskilda funktioner i en formelRelationships specified by using special functions within a formula

Det finns olika typer av kontext: radkontext, frågekontext, och filterkontext.There are different types of context: row context, query context, and filter context.

RadkontextRow context

Du kan tänka på radkontexten som den aktuella raden.Row context can be thought of as "the current row". Om du skapar en formel i en beräknad kolumn inkluderar radkontexten för den formeln värdena från alla kolumner i den aktuella raden.If you create a formula in a calculated column, the row context for that formula includes the values from all columns in the current row. Om tabellen är relaterad till en annan tabell innehåller innehållet även alla värden från den andra tabellen som är relaterade till den aktuella raden.If the table is related to another table, the content also includes all the values from the other table that are related to the current row.

Anta till exempel att du skapar en beräknad kolumn, = [Freight] + [Tax], som lägger samman värden från två kolumner, Frakt och Skatt, från samma tabell.For example, suppose you create a calculated column, = [Freight] + [Tax], that adds together values from two columns, Freight and Tax, from the same table. Den här formeln hämtar automatiskt endast värdena från den aktuella raden i de angivna kolumnerna.This formula automatically gets only the values from the current row in the specified columns.

Radkontexten följer även eventuella relationer som har definierats mellan tabeller, däribland relationer som definierats inom en beräknad kolumn med hjälp av DAX-formler för att avgöra vilka rader i relaterade tabeller som är associerade med den aktuella raden.Row context also follows any relationships that have been defined between tables, including relationships defined within a calculated column by using DAX formulas, to determine which rows in related tables are associated with the current row.

Till exempel använder följande formel funktionen RELATED för att hämta ett momsvärde från en relaterad tabell, baserat på den region som ordern levererades till.For example, the following formula uses the RELATED function to fetch a tax value from a related table, based on the region that the order was shipped to. Skattevärdet bestäms genom att värdet för regionen i den aktuella tabellen bestäms, regionen i den relaterade tabellen letas upp och sedan hämtas skattesatsen för den regionen från den relaterade tabellen.The tax value is determined by using the value for region in the current table, looking up the region in the related table, and then getting the tax rate for that region from the related table.

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

Den här formeln hämtar skattesatsen för den aktuella regionen från tabellen Region och lägger till den i värdet för kolumnen Frakt.This formula gets the tax rate for the current region from the Region table and adds it to the value of the Freight column. I DAX-formler behöver du inte känna till eller ange den angivna relationen som ansluter tabellerna.In DAX formulas, you do not need to know or specify the specific relationship that connects the tables.

Kontext för flera raderMultiple row context

DAX innehåller funktioner som itererar beräkningar över en tabell.DAX includes functions that iterate calculations over a table. Dessa funktioner kan ha flera aktuella rader, var och en med sin egen radkontext.These functions can have multiple current rows, each with its own row context. Med dessa funktioner kan du i själva verket skapa formler som utför åtgärder rekursivt över en inre och yttre loop.In essence, these functions let you create formulas that perform operations recursively over an inner and outer loop.

Anta till exempel att din modell innehåller en Produkter-tabell och en Försäljning-tabell.For example, suppose your model contains a Products table and a Sales table. Användare kanske vill gå igenom hela försäljningstabellen, som innehåller en hel del transaktioner som omfattar flera produkter och hitta den största beställda kvantiteten för varje produkt i en transaktion.Users might want to go through the entire sales table, which is full of transactions involving multiple products, and find the largest quantity ordered for each product in any one transaction.

Med DAX kan du bygga en enda formel som returnerar rätt värde, och resultaten uppdateras automatiskt varje gång en användare lägger till data i tabellerna.With DAX you can build a single formula that returns the correct value, and the results are automatically updated any time a user adds data to the tables.

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

Ett detaljerat exempel på formeln finns i EARLIER.For a detailed example of this formula, see EARLIER.

Den tidigare funktionen lagrar radkontexten från den åtgärd som föregår den aktuella åtgärden.To summarize, the EARLIER function stores the row context from the operation that preceded the current operation. Vid alla tillfällen lagrar funktionen två kontextuppsättningar i minnet: en kontextuppsättning representerar den aktuella raden för den inre loopen i formeln och en annan uppsättning med kontext som representerar den aktuella raden för formelns yttre loop.At all times, the function stores in memory two sets of context: one set of context represents the current row for the inner loop of the formula, and another set of context represents the current row for the outer loop of the formula. DAX samlar automatiskt in värden mellan de två looparna så att du kan skapa komplexa mängder.DAX automatically feeds values between the two loops so that you can create complex aggregates.

FrågekontextQuery context

Frågekontext avser den delmängd av data som har hämtats implicit för en formel.Query context refers to the subset of data that is implicitly retrieved for a formula. När en användare till exempel placerar ett mått eller fält i en rapport undersöker motorn rad- och kolumnrubriker, utsnitt och rapportfilter för att fastställa kontexten.For example, when a user places a measure or field into a report, the engine examines row and column headers, slicers, and report filters to determine the context. Sedan körs de nödvändiga frågorna mot modelldata för att få fram rätt delmängd data, göra de beräkningar som definieras av formeln och fylla i varje värdena i rapporten.The necessary queries are then run against model data to get the correct subset of data, make the calculations defined by the formula, and then populate values in the report.

Eftersom kontextändringar beror på var du placerar formeln kan resultatet av formeln också ändras.Because context changes depending on where you place the formula, the results of the formula can also change. Anta till exempel att du skapar en formel som summerar värdena i kolumnen Vinst i tabellen Försäljning: = SUM('Sales'[Profit]).For example, suppose you create a formula that sums the values in the Profit column of the Sales table: = SUM('Sales'[Profit]). Om du använder den här formeln i en beräknad kolumn i tabellen Sales kommer resultatet för formeln att vara detsamma för hela tabellen, eftersom frågans kontext för formeln alltid är hela datauppsättningen för Sales-tabellen.If you use this formula in a calculated column within the Sales table, the results for the formula will be the same for the entire table, because the query context for the formula is always the entire data set of the Sales table. Resultaten får vinst för alla regioner, alla produkter, alla år och så vidare.Results will have profit for all regions, all products, all years, and so on.

Användare vill dock vanligtvis inte se samma resultat hundratals gånger, utan vill i stället få vinsten för ett visst år, ett visst land, en viss produkt eller någon kombination av dessa, och få en totalsumma.However, users typically don't want to see the same result hundreds of times, but instead want to get the profit for a particular year, a particular country, a particular product, or some combination of these, and then get a grand total.

I en rapport ändrar du kontexten genom filtrering, att lägga till eller ta bort fält, och med utsnitt.In a report, context is changed by filtering, adding or removing fields, and using slicers. Varje ändring påverkar frågekontexten där måttet utvärderas.For each change, the query context in which the measure is evaluated. Därför utvärderas samma formel som används i ett mått i en annan frågekontext för varje cell.Therefore, the same formula, used in a measure, is evaluated in a different query context for each cell.

FilterkontextFilter context

Filterkontext är den mängd värden som tillåts i varje kolumn eller i värdena som hämtas från en relaterad tabell.Filter context is the set of values allowed in each column, or in the values retrieved from a related table. Filter kan tillämpas på kolumnen i designern eller i presentationslagret (rapporter och PivotTables).Filters can be applied to the column in the designer, or in the presentation layer (reports and PivotTables). Filter kan även definieras explicit via filteruttryck i formeln.Filters can also be defined explicitly by filter expressions within the formula.

Filterkontext läggs till när du anger filterbegränsningar för uppsättningen värden som tillåts i en kolumn eller tabell genom att använda argument i en formel.Filter context is added when you specify filter constraints on the set of values allowed in a column or table, by using arguments to a formula. Filterkontext tillämpas över andra kontexter, som radkontext eller frågekontext.Filter context applies on top of other contexts, such as row context or query context.

I tabellmodeller finns det många sätt att skapa filterkontext.In tabular models, there are many ways to create filter context. I kontexten för klienter som kan konsumera modellen, som Power BI-rapporter, kan användare skapa filter på ett kick genom att lägga till utsnitt eller rapportfilter i rad- och kolumnrubrikerna.Within the context of clients that can consume the model, such as Power BI reports, users can create filters on the fly by adding slicers or report filters on the row and column headings. Du kan även ange filteruttryck direkt inom formeln för att ange relaterade värden till filtertabeller som används som indata eller för att dynamiskt hämta kontext för värdena som används i beräkningarna.You can also specify filter expressions directly within the formula, to specify related values, to filter tables that are used as inputs, or to dynamically get context for the values that are used in calculations. Du kan även helt eller selektivt rensa filtren för vissa kolumner.You can also completely clear or selectively clear the filters on particular columns. Det är väldigt praktiskt när du skapar formler som beräknar totalsummor.This is very useful when creating formulas that calculate grand totals.

Du kan läsa mer om att skapa filter i formler finns i Funktionen FILTER (DAX).To learn more about how to create filters within formulas, see the FILTER Function (DAX).
Ett exempel på hur filter kan rensas för att skapa totalsummor finns i ALL-funktion (DAX).For an example of how filters can be cleared to create grand totals, see the ALL Function (DAX).

Exempel på hur du selektivt rensar och använder filter i formler finns ALLEXCEPT.For examples of how to selectively clear and apply filters within formulas, see ALLEXCEPT.

Fastställer kontext i formlerDetermining context in formulas

När du skapar en DAX-formel testas formeln först för giltig syntax och testas sedan för att se till att namnen på de kolumner och tabeller som ingår i formeln finns i den aktuella kontexten.When you create a DAX formula, the formula is first tested for valid syntax, and then tested to make sure the names of the columns and tables included in the formula can be found in the current context. Om en kolumn eller tabell som anges av formeln inte hittas returneras ett fel.If any column or table specified by the formula cannot be found, an error is returned.

Kontext under verifieringen (och omberäkningsåtgärder) bestäms enligt beskrivningen i föregående avsnitt. De tillgängliga tabellerna i modellen, alla relationer mellan tabellerna och eventuella filter som har tillämpats används.Context during validation (and recalculation operations) is determined as described in the preceding sections, by using the available tables in the model, any relationships between the tables, and any filters that have been applied.

Om du till exempel precis har importerat data till en ny tabell och den inte är relaterad till andra tabeller (och du inte har använt några filter) är den aktuella kontexten hela uppsättningen kolumner i tabellen.For example, if you have just imported some data into a new table and it is not related to any other tables (and you have not applied any filters), the current context is the entire set of columns in the table. Om tabellen är länkad av relationer till andra tabeller innehåller den aktuella kontexten relaterade tabeller.If the table is linked by relationships to other tables, the current context includes the related tables. Om du lägger till en kolumn från tabellen i en rapport som har utsnitt och kanske vissa rapportfilter är kontexten för formeln delmängden av data i varje cell i rapporten.If you add a column from the table to a report that has Slicers and maybe some report filters, the context for the formula is the subset of data in each cell of the report.

Kontext är ett kraftfullt koncept som också kan göra det svårt att felsöka formler.Context is a powerful concept that can also make it difficult to troubleshoot formulas. Vi rekommenderar att du börjar med enkla formler och relationer för att se hur kontexten fungerar.We recommend that you begin with simple formulas and relationships to see how context works. I följande avsnitt finns några exempel på hur formler använder olika typer av sammanhang för att dynamiskt returnera resultat.The following section provides some examples of how formulas use different types of context to dynamically return results.

OperatorerOperators

DAX-språket använder fyra olika typer av beräkningsoperatorer i formler:The DAX language uses four different types of calculation operators in formulas:

  • Jämförelseoperatorer för att jämföra värden och returnera ett logiskt TRUE\FALSE-värde.Comparison operators to compare values and return a logical TRUE\FALSE value.
  • Aritmetiska operatorer för att göra aritmetiska beräkningar som returnerar numeriska värden.Arithmetic operators to perform arithmetic calculations that return numeric values.
  • Operatorer för textsammanfogning för att koppla ihop två eller fler textsträngar.Text concatenation operators to join two or more text strings.
  • Logiska operatorer som kombinerar två eller fler uttryck för att returnera ett enda resultat.Logical operators that combine two or more expressions to return a single result.

Detaljerad information om operatorer som används i DAX-formler finns DAX-operatorer.For detailed information about operators used in DAX formulas, see DAX operators.

Arbeta med tabeller och kolumnerWorking with tables and columns

Tabeller i tabelldatamodeller ser ut som Excel-tabeller, men skiljer sig åt i hur de fungerar med data och formler:Tables in tabular data models look like Excel tables, but are different in the way they work with data and with formulas:

  • Formler fungerar bara med tabeller och kolumner, inte med enskilda celler, intervallreferenser eller matriser.Formulas work only with tables and columns, not with individual cells, range references, or arrays.
  • Formler kan använda relationer för att hämta värden från relaterade tabeller.Formulas can use relationships to get values from related tables. Värdena som hämtas är alltid relaterade till det aktuella radvärdet.The values that are retrieved are always related to the current row value.
  • Du kan inte ha oregelbundna eller ojämna data som i ett Excel-kalkylblad.You cannot have irregular or "ragged" data like you can in an Excel worksheet. Varje rad i en tabell måste innehålla samma antal kolumner.Each row in a table must contain the same number of columns. Du kan dock ha tomma värden i vissa kolumner.However, you can have empty values in some columns. Datatabeller i Excel-datatabeller och tabellmodeller är inte utbytbara.Excel data tables and tabular model data tables are not interchangeable.
  • Eftersom en datatyp anges för varje kolumn måste varje värde i kolumnen vara av samma typ.Because a data type is set for each column, each value in that column must be of the same type.

Referera till tabeller och kolumner i formlerReferring to tables and columns in formulas

Du kan referera till valfri tabell och kolumn med hjälp av dess namn.You can refer to any table and column by using its name. Följande formel visar t. ex. hur du refererar till kolumner från två tabeller med hjälp av det fullständigt kvalificerade namnet:For example, the following formula illustrates how to refer to columns from two tables by using the fully qualified name:


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

När en formel utvärderas letar modelldesignern först efter allmän syntax och kontrollerar sedan namnen på de kolumner och tabeller som du anger mot möjliga kolumner och tabeller i den aktuella kontexten.When a formula is evaluated, the model designer first checks for general syntax, and then checks the names of columns and tables that you provide against possible columns and tables in the current context. Om namnet är tvetydigt eller om det inte går att hitta kolumnen eller tabellen får du ett felmeddelande i formeln (en #ERROR-sträng i stället för ett datavärde i celler där felet uppstår).If the name is ambiguous or if the column or table cannot be found, you will get an error on your formula (an #ERROR string instead of a data value in cells where the error occurs). Du kan läsa mer om namngivningskrav för tabeller, kolumner och andra objekt finns i Namngivningskrav i DAX-syntax.To learn more about naming requirements for tables, columns, and other objects, see Naming Requirements in DAX syntax.

Relationer mellan tabellernaTable relationships

Genom att skapa relationer mellan tabeller kan du använda relaterade värden i andra tabeller i dina beräkningar.By creating relationships between tables, you gain the ability for related values in other tables to be used in calculations. Du kan till exempel använda en beräknad kolumn för att fastställa alla leveransposter som är relaterade till den aktuella återförsäljaren och sedan summera fraktkostnaderna för var och en.For example, you can use a calculated column to determine all the shipping records related to the current reseller, and then sum the shipping costs for each. I många fall är det dock inte nödvändigt med en relation.In many cases, however, a relationship might not be necessary. Du kan använda funktionen LOOKUPVALUE i en formel för att returnera värdet i result_columnName för raden som uppfyller villkoret som anges i argumenten search_column och search_value.You can use the LOOKUPVALUE function in a formula to return the value in result_columnName for the row that meets criteria specified in the search_column and search_value arguments.

Många DAX-funktioner kräver att det finns en relation mellan tabellerna eller mellan flera tabeller för att kunna hitta de kolumner som du har refererat till och returnera resultat som är begripliga.Many DAX functions require that a relationship exist between the tables, or among multiple tables, in order to locate the columns that you have referenced and return results that make sense. Andra funktioner kommer att försöka identifiera relationen. För bästa resultat bör du dock alltid skapa en relation där det är möjligt.Other functions will attempt to identify the relationship; however, for best results you should always create a relationship where possible. Tabelldatamodeller stöder flera relationer mellan tabeller.Tabular data models support multiple relationships among tables. För att undvika förvirring eller felaktiga resultat anges bara en relation i taget som den aktiva relationen, men du kan ändra den aktiva relationen om det behövs för att passera olika anslutningar i data i beräkningar.To avoid confusion or incorrect results, only one relationship at a time is designated as the active relationship, but you can change the active relationship as necessary to traverse different connections in the data in calculations. USERELATIONSHIP-funktionen kan användas för att ange en eller flera relationer som ska användas i en speciell beräkning.USERELATIONSHIP function can be used to specify one or more relationships to be used in a specific calculation.

Det är viktigt att observera följande formeldesignregler när du använder relationer:It's important to observe these formula design rules when using relationships:

  • När tabeller är anslutna med en relation måste du se till att de två kolumnerna som används som nycklar har värden som matchar.When tables are connected by a relationship, you must ensure the two columns used as keys have values that match. Referensintegritet är inte tvingande, därför är det möjligt att ha icke-matchande värden i en nyckelkolumn och ändå skapa en relation.Referential integrity is not enforced, therefore it is possible to have non-matching values in a key column and still create a relationship. Om detta händer bör du vara medveten om att tomma värden eller icke-matchande värden kan påverka formelns resultatet.If this happens, you should be aware that blank values or non-matching values might affect the results of formulas.

  • När du länkar tabeller i modellen med hjälp av relationer förstorar du omfånget eller kontexten där formlerna utvärderas.When you link tables in your model by using relationships, you enlarge the scope, or context, in which your formulas are evaluated. Ändringar i kontexten som orsakas av tillägg av nya tabeller, nya relationer eller ändringar i den aktiva relationen kan orsaka att resultaten ändras på sätt som du inte kan förutse.Changes in context resulting from the addition of new tables, new relationships, or from changes in the active relationship can cause your results to change in ways that you might not anticipate. Läs mer i Kontext i den här artikeln.To learn more, see Context in this article.

Bearbeta och uppdateraProcess and refresh

Bearbeta och omberäkning är två separata men relaterade åtgärder.Process and recalculation are two separate but related operations. Du bör förstå dessa begrepp ordentligt när du utformar en modell som innehåller komplexa formler, stora mängder data eller data som hämtas från externa datakällor.You should thoroughly understand these concepts when designing a model that contains complex formulas, large amounts of data, or data that is obtained from external data sources.

Bearbeta (uppdatera) uppdaterar data i en modell med nya data från en extern datakälla.Process (refresh) is updating the data in a model with new data from an external data source.

Omräkning är processen för att uppdatera resultatet för formler för att återspegla eventuella ändringar i själva formlerna och att återspegla ändringar i underliggande data.Recalculation is the process of updating the results of formulas to reflect any changes to the formulas themselves and to reflect changes in the underlying data. Omberäkningen kan påverka resultatet på följande sätt:Recalculation can affect performance in the following ways:

  • Värdena i en beräknad kolumn beräknas och lagras i modellen.The values in a calculated column are computed and stored in the model. Om du vill uppdatera värdena i den beräknade kolumnen måste du bearbeta modellen med ett av tre bearbetningskommandon – Bearbeta: Fullständig, Bearbeta: Data eller Bearbeta: Beräkna om.To update the values in the calculated column, you must process the model using one of three processing commands – Process Full, Process Data, or Process Recalc. Resultatet av formeln måste alltid räknas om för hela kolumnen när du ändrar formeln.The result of the formula must always be recalculated for the entire column, whenever you change the formula.

  • Värdena som beräknas av måtten utvärderas dynamiskt varje gång en användare lägger till måttet i en pivottabell eller öppnar en rapport. När användaren ändrar kontexten ändras värdena som returneras av måttändringen.The values calculated by measures are dynamically evaluated whenever a user adds the measure to a PivotTable or open a report; as the user modifies the context, values returned by the measure change. Resultatet av måttet återspeglar alltid det senaste i cacheminnet i minnet.The results of the measure always reflect the latest in the in-memory cache.

Bearbetning och omberäkning påverkar inte formler för säkerhet på radnivå såvida inte resultatet av en omberäkning returnerar ett annat värde, som gör att rollmedlemmar kan eller inte kan köra frågor mot den.Processing and recalculation have no effect on row-level security formulas unless the result of a recalculation returns a different value, thus making the row queryable or not queryable by role members.

UppdateringarUpdates

DAX förbättras hela tiden.DAX is constantly being improved. Nya och uppdaterade funktioner släpps med nästa tillgängliga uppdatering, vilket normalt är varje månad.New and updated functions are released with the next available update, which is usually monthly. Tjänsterna uppdateras först, följt av installerade program som Power BI Desktop, Excel, SQL Server Management Studio (SSMS) och Analysis Services-projekttillägget för Visual Studio (SSDT).Services are updated first, followed by installed applications like Power BI Desktop, Excel, SQL Server Management Studio (SSMS), and Analysis Services project extension for Visual Studio (SSDT). SQL Server Analysis Services uppdateras i nästa kumulativa uppdatering.SQL Server Analysis Services is updated with the next cumulative update. Nya funktioner annonseras först och beskrivs i DAX-funktionsreferensen samtidigt som Power BI Desktop-uppdateringar.New functions are first announced and described in the DAX function reference coinciding with Power BI Desktop updates.

Alla funktioner stöds inte i tidigare versioner av SQL Server Analysis Services och Excel.Not all functions are supported in earlier versions of SQL Server Analysis Services and Excel.

FelsökningTroubleshooting

Om du får ett fel när du definierar en formel kan formeln innehålla antingen ett syntaktiskt fel, ett semantiskt fel eller ett beräkningsfel.If you get an error when defining a formula, the formula might contain either a syntactic error, semantic error, or calculation error.

Syntaktiska fel är enklast att lösa.Syntactic errors are the easiest to resolve. De omfattar vanligtvis en parentes eller ett kommatecken.They typically involve a missing parenthesis or comma.

Den andra typen av fel inträffar när syntaxen är korrekt, men värdet eller en kolumn som refereras inte är begripliga i kontexten för formeln.The other type of error occurs when the syntax is correct, but the value or a column referenced does not make sense in the context of the formula. Sådana semantiska fel och beräkningsfel kan orsakas av något av följande problem:Such semantic and calculation errors might be caused by any of the following problems:

  • Formeln refererar till en kolumn, tabell eller funktion som inte finns.The formula refers to a non-existing column, table, or function.
  • Formeln verkar vara korrekt, men när datamotorn hämtar data hittar den ett typmatchningsfel och genererar ett fel.The formula appears to be correct, but when the data engine fetches the data, it finds a type mismatch and raises an error.
  • Formeln skickar ett felaktigt antal eller en felaktig typ av argument till en funktion.The formula passes an incorrect number or type of arguments to a function.
  • Formeln refererar till en annan kolumn som innehåller ett fel och därför är dess värden ogiltiga.The formula refers to a different column that has an error, and therefore its values are invalid.
  • Formeln refererar till en kolumn som inte har bearbetats, vilket innebär att den innehåller metadata men inga faktiska data att använda för beräkningar.The formula refers to a column that has not been processed, meaning it has metadata but no actual data to use for calculations.

I de första fyra fallen flaggar DAX hela kolumnen som innehåller den ogiltiga formeln.In the first four cases, DAX flags the entire column that contains the invalid formula. I det sista fallet tonar DAX ut kolumnen för att visa att kolumnen är i ett tillstånd med obearbetad status.In the last case, DAX grays out the column to indicate that the column is in an unprocessed state.

Appar och verktygApps and tools

Power BI DesktopPower BI Desktop

Power BI Desktop

Power BI Desktop är ett kostnadsfritt program för datamodellering och rapportering.Power BI Desktop is a free data modeling and reporting application. Modelldesignern innehåller en DAX-redigerare för att skapa DAX-beräkningsformler.The model designer includes a DAX editor for creating DAX calculation formulas.

Power Pivot i ExcelPower Pivot in Excel

Power Pivot i Excel

Modelldesignern Power Pivot i Excel innehåller en DAX-redigerare för att skapa DAX-beräkningsformler.The Power Pivot in Excel models designer includes a DAX editor for creating DAX calculation formulas.

Visual StudioVisual Studio

Visual Studio

Visual Studio med Analysis Services-projekttillägget (VSIX) används till att skapa Analysis Services-modellprojekt.Visual Studio with Analysis Services projects extension (VSIX) is used to create Analysis Services model projects. Designern för tabellmodeller som installeras med projekttillägget innehåller en DAX-redigerare.Tabular model designer, installed with the projects extension includes a DAX editor.

SQL Server Management StudioSQL Server Management Studio

SQL Server Management Studio

SQL Server Management Studio (SSMS) är ett viktigt verktyg för att arbeta med Analysis Services.SQL Server Management Studio (SSMS) is an essential tool for working with Analysis Services. SSMS innehåller en DAX-frågeredigerare för frågor om både tabell- och flerdimensionella modeller.SSMS includes a DAX query editor for querying both tabular and multidimensional models.

DAX StudioDAX Studio

DAX Studio

DAX Studio är ett klientverktyg med öppen källkod för att skapa och köra DAX-frågor mot Analysis Services, Power BI Desktop och Power Pivot i Excel-modeller.DAX Studio is an open-source client tool for creating and running DAX queries against Analysis Services, Power BI Desktop, and Power Pivot in Excel models.

UtbildningsresurserLearning resources

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.When learning DAX, it's best to use the application you'll be using to create your data models. Analysis Services, Power BI Desktop och Power Pivot i Excel innehåller artiklar och självstudier som innehåller lektioner om hur du skapar åtgärder, beräknade kolumner och radfilter med hjälp av DAX.Analysis Services, Power BI Desktop, and Power Pivot in Excel all have articles and tutorials that include lessons on creating measures, calculated columns, and row-filters by using DAX. Här följer några ytterligare resurser:Here are some additional resources:

VideorVideos

Använda DAX i Power BI Desktop path in Microsoft Learn.Use DAX in Power BI Desktop path in Microsoft Learn.

The Definitive Guide to DAX av Alberto Ferrari och Marco Russo (Microsoft Press).The Definitive Guide to DAX by Alberto Ferrari and Marco Russo (Microsoft Press). Den här omfattande guiden innehåller grundläggande information om nyskapande teknik med höga prestanda för datamodellerare på nybörjarnivå och BI-proffs.This extensive guide provides basics to innovative high-performance techniques for beginning data modelers and BI professionals.

DAX Studio