Using Variables with VAR and RETURN in Power BI DAX
Course: Microsoft Power BI Training
Topic: Using Variables with VAR and RETURN
Course Link: Microsoft Power BI Training at JustAcademy
Demo Link: Register for a Course Demo
JustAcademy Website: Visit JustAcademy
1. Introduction to Variables in DAX
Data Analysis Expressions (DAX) is the formula language used in Power BI to create measures, calculated columns, and calculated tables. As DAX calculations become more complex, formulas can become difficult to read, debug, and maintain. Variables help solve this problem by allowing you to assign names to intermediate values and reuse them in a calculation.
In DAX, variables are declared using the VAR keyword, and the final expression is specified using RETURN. Together, they make formulas easier to understand by separating intermediate calculations from the final result.
For example, instead of writing a total sales calculation multiple times in a formula, you can calculate it once in a variable named TotalSales and refer to that variable later.
1.1 What Is a DAX Variable?
A DAX variable is a named value or expression result that can be referenced later within the same DAX expression. Variables can store numbers, text, dates, Boolean values, scalar results, and table expressions.
Variables are especially useful for:
- Storing intermediate calculations.
- Avoiding repeated expressions in the same formula.
- Making business logic easier to read.
- Debugging complicated measures.
- Comparing current values with previous or target values.
- Building conditional calculations using
IF and SWITCH.
- Working with filter context and time-intelligence calculations.
1.2 What Are VAR and RETURN?
| Keyword |
Purpose |
Explanation |
VAR |
Declares a variable. |
Assigns a name to a value or expression. |
RETURN |
Defines the final expression. |
Specifies the result returned by the complete DAX expression. |
A simple DAX expression follows this structure:
Measure Name =
VAR VariableName = Expression
RETURN
FinalExpression
You can declare multiple variables before the RETURN keyword. The final expression can use any of those variables that are in scope.
2. Basic Syntax of VAR and RETURN
2.1 General Syntax
Measure Name =
VAR FirstVariable = Expression1
VAR SecondVariable = Expression2
VAR ThirdVariable = Expression3
RETURN
FinalExpression
Each variable is declared using VAR, followed by a variable name, an equals sign, and an expression. The RETURN keyword introduces the final expression that produces the result.
2.2 Example: Store a Number in a Variable
Example Measure =
VAR SalesAmount = 1000
RETURN
SalesAmount
This measure stores the number 1,000 in the variable SalesAmount and returns it. It is a simple demonstration of syntax rather than a typical business measure.
2.3 Example: Use Multiple Variables
Example Calculation =
VAR SalesAmount = 1000
VAR CostAmount = 600
VAR ProfitAmount = SalesAmount - CostAmount
RETURN
ProfitAmount
The variables store sales, cost, and profit. The final expression returns 400 because sales of 1,000 minus cost of 600 equals 400.
2.4 Understanding the Formula Structure
- Declare variables: Use
VAR to name each intermediate value.
- Assign expressions: Define what each variable calculates.
- Use variables: Reference the names in later variable expressions or in the final result.
- Return the result: Use
RETURN followed by the final expression.
3. Why Use Variables in Power BI?
Variables are not mandatory for every DAX formula, but they provide several benefits when a calculation involves repeated expressions or multiple steps.
3.1 Improved Readability
Compare a formula that repeats the same calculation with a formula that assigns it a meaningful name.
Without variables:
Profit Margin =
DIVIDE(
SUM(Sales[Revenue]) - SUM(Sales[Cost]),
SUM(Sales[Revenue])
)
With variables:
Profit Margin =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
VAR TotalProfit = TotalRevenue - TotalCost
RETURN
DIVIDE(TotalProfit, TotalRevenue)
The second version makes the calculation easier to follow because each business concept has a meaningful name.
3.2 Avoid Repeating Expressions
If the same expression is needed multiple times within one measure, a variable lets you reference it by name rather than rewriting the expression each time.
Sales Comparison =
VAR CurrentSales = [Total Sales]
RETURN
CurrentSales - CurrentSales * 0.10
This example calculates a value 10% below current sales. The variable makes the formula easier to understand and maintain.
3.3 Simplify Complex Calculations
Variables let you break a complicated formula into logical stages. This is particularly helpful for financial measures, year-over-year comparisons, profitability analysis, budget comparisons, and conditional reporting.
3.4 Improve Debugging
During development, you can temporarily return an intermediate variable to inspect its value in a visual. This helps isolate which stage of a formula is producing an unexpected result.
For example, if a profit-margin measure returns an unexpected result, temporarily return TotalRevenue, TotalCost, or TotalProfit to check the intermediate calculation.
4. Creating Variables in a Power BI Measure
4.1 Step-by-Step Procedure
- Open Power BI Desktop.
- Load a dataset containing the columns needed for the calculation.
- In the Fields or Data pane, select the table where you want to create the measure.
- Choose New measure from the ribbon or the table's context menu.
- Enter a measure formula beginning with the measure name and an equals sign.
- Declare one or more variables using
VAR.
- Write the final expression after
RETURN.
- Press Enter to save the measure.
- Add the measure to a card, table, matrix, or chart to test its result.
4.2 Example: Total Sales and Total Cost
Assume the Sales table includes numeric columns named Revenue and Cost.
Total Profit =
VAR TotalRevenue = SUM(Sales[Revenue])
VAR TotalCost = SUM(Sales[Cost])
RETURN
TotalRevenue - TotalCost
The measure calculates total revenue and total cost, then subtracts cost from revenue. Because these expressions are evaluated in the current filter context, the result can change when the report is filtered by date, product, region, or another related field.
5. Using Variables with Existing Measures
Variables can store the results of existing measures as well as direct column aggregations. Referencing existing measures often keeps formulas modular and easier to maintain.
5.1 Example: Profit from Existing Measures
Assume you have already created these measures:
Total Sales = SUM(Sales[Revenue])
Total Cost = SUM(Sales[Cost])
You can use them in another measure:
Total Profit =
VAR RevenueValue = [Total Sales]
VAR CostValue = [Total Cost]
RETURN
RevenueValue - CostValue
Here, [Total Sales] and [Total Cost] are measures. Square brackets are used to reference measures in DAX. By contrast, a column reference includes the table name, such as Sales[Revenue].
5.2 Example: Calculate Profit Margin
Profit Margin % =
VAR RevenueValue = [Total Sales]
VAR ProfitValue = [Total Profit]
RETURN
DIVIDE(ProfitValue, RevenueValue, 0)
The DIVIDE function safely handles a denominator of zero or blank. In this example, it returns zero when the denominator is zero or blank. Format the measure as a percentage in Power BI's measure formatting options.
6. Understanding Variable Evaluation and Scope
Variables have a specific scope and evaluation behavior. Understanding these rules helps prevent incorrect results.
6.1 A Variable Is Evaluated in Its Definition Context
A variable's expression is evaluated in the filter context that exists where the variable is defined. Once evaluated, its result is used when the variable is referenced later. Referring to a variable inside a later CALCULATE does not cause the variable's expression to be recalculated under the modified filter context.
Consider this example:
Incorrect Previous-Year Pattern =
VAR CurrentSales = [Total Sales]
RETURN
CALCULATE(
CurrentSales,
SAMEPERIODLASTYEAR('Date'[Date])
)
This pattern does not recalculate CurrentSales for the previous-year dates. The variable holds the value evaluated before the final expression is evaluated, so the result can remain the current-context value rather than the intended previous-year sales.
Correct pattern:
Previous Year Sales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
Alternatively, if you need to use variables for both values, define the variables in the appropriate expressions:
Sales Year Comparison =
VAR CurrentSales = [Total Sales]
VAR PreviousYearSales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
RETURN
CurrentSales - PreviousYearSales
This measure evaluates current sales and previous-year sales under their respective contexts and then calculates the difference.
6.2 Variable Scope
A variable can be used within the DAX expression in which it is declared, including later variable definitions and the final expression, subject to its scope. A variable declared inside a nested expression is not automatically available outside that expression.
6.3 Variables Are Not Reusable Model Objects
A DAX variable is local to a single formula. If several measures need the same business calculation, consider creating a separate measure and referencing it. This makes the calculation easier to maintain across the model.
7. Using Multiple Variables in One Formula
You can declare multiple variables to separate a business calculation into smaller steps. Variables can depend on earlier variables, which helps make the sequence clear.
7.1 Example: Sales, Cost, Profit, and Margin
Sales Performance =
VAR RevenueValue = [Total Sales]
VAR CostValue = [Total Cost]
VAR ProfitValue = RevenueValue - CostValue
VAR MarginValue = DIVIDE(ProfitValue, RevenueValue)
RETURN
MarginValue
This measure returns the profit margin. The intermediate variables show how revenue, cost, profit, and margin relate to one another. Format the result as a percentage.
7.2 Example: Net Sales After a Discount
Assume a business applies a 10% discount to the total revenue measure for a scenario calculation.
Discounted Sales =
VAR GrossSales = [Total Sales]
VAR DiscountRate = 0.10
VAR DiscountAmount = GrossSales * DiscountRate
VAR NetSales = GrossSales - DiscountAmount
RETURN
NetSales
The formula calculates the discount amount and subtracts it from gross sales. The 10% rate is a fixed example; in a real report, it could come from a disconnected scenario table or another business rule.
7.3 Example: Sales Target Achievement
Assume the model contains a measure named [Sales Target].
Target Achievement % =
VAR ActualSales = [Total Sales]
VAR TargetSales = [Sales Target]
VAR Achievement =
DIVIDE(ActualSales, TargetSales)
RETURN
Achievement
The measure returns actual sales divided by the target. Format it as a percentage. A value of 1.00 means 100% achievement, assuming the actual and target measures use compatible units and filter contexts.
8. Using VAR and RETURN with IF
The IF function evaluates a condition and returns one result when the condition is true and another when it is false. Variables can store the values used in the condition, making the logic easier to read.
8.1 Example: Profit Status
Profit Status =
VAR ProfitValue = [Total Profit]
RETURN
IF(
ProfitValue > 0,
"Profitable",
"Not Profitable"
)
The measure returns "Profitable" when total profit is greater than zero. Otherwise, it returns "Not Profitable". If blank profit should be treated differently, handle that condition explicitly.
8.2 Example: Sales Performance Category
Sales Performance Category =
VAR ActualSales = [Total Sales]
VAR TargetSales = [Sales Target]
RETURN
IF(
ActualSales >= TargetSales,
"Target Achieved",
"Target Not Achieved"
)
This measure compares actual sales with the target. Test it with the appropriate product, region, and date filters to ensure the target measure is evaluated at the intended level.
9. Using VAR and RETURN with SWITCH
SWITCH is useful when a calculation has multiple possible outcomes. A variable can store the value being evaluated, reducing repeated references to the same expression.
9.1 Example: Classify Sales Performance
Sales Category =
VAR SalesValue = [Total Sales]
RETURN
SWITCH(
TRUE(),
SalesValue >= 100000, "High Sales",
SalesValue >= 50000, "Medium Sales",
SalesValue > 0, "Low Sales",
"No Sales"
)
The formula checks the conditions in order. A sales value of 120,000 returns "High Sales", while a value of 70,000 returns "Medium Sales". Conditions should be ordered from the most restrictive threshold to the least restrictive threshold to avoid an earlier condition capturing values intended for a later one.
9.2 Why Use a Variable with SWITCH?
- It gives the evaluated measure a meaningful name.
- It avoids repeating the same measure reference throughout the condition list.
- It makes threshold logic easier to review.
- It simplifies changes to business rules.
```html
10. Using VAR and RETURN with CALCULATE
The CALCULATE function evaluates an expression in a modified filter context. Variables are useful when you need to compare a calculation under different filter contexts, such as current sales versus previous-year sales or product sales versus total sales.
10.1 Example: Calculate Previous-Year Sales
Assume you have a measure called [Total Sales] and a properly configured Date table.
Previous Year Sales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
You can use variables to organize a year-over-year comparison:
Year-over-Year Sales Difference =
VAR CurrentSales = [Total Sales]
VAR PreviousYearSales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
VAR SalesDifference =
CurrentSales - PreviousYearSales
RETURN
SalesDifference
The formula calculates sales in the current context, calculates sales for the equivalent period in the previous year, and returns the difference.
10.2 Example: Year-over-Year Growth Percentage
Year-over-Year Growth % =
VAR CurrentSales = [Total Sales]
VAR PreviousYearSales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
VAR GrowthAmount =
CurrentSales - PreviousYearSales
RETURN
DIVIDE(
GrowthAmount,
PreviousYearSales
)
Format the measure as a percentage. If previous-year sales are zero or blank, DIVIDE returns blank by default. You can provide an alternate result as the third argument if your business requirements call for a different outcome.
Important concept: Variables are evaluated in the context in which they are defined. A variable storing current sales does not become previous-year sales simply because you reference it inside CALCULATE. The previous-year expression must be evaluated separately.
11. Using Variables to Calculate Percentages of Total
Percentage-of-total calculations are common in Power BI reports. Variables can store the value for the current category and the overall total, then divide one by the other.
11.1 Example: Percentage of Total Sales
Sales % of Total =
VAR CurrentSales = [Total Sales]
VAR AllSales =
CALCULATE(
[Total Sales],
REMOVEFILTERS(Products[ProductName])
)
RETURN
DIVIDE(
CurrentSales,
AllSales
)
This measure removes the filter on product name while retaining other applicable filters. For example, a date or region filter can still affect the denominator. The measure therefore calculates each product's share of sales within the remaining filter context.
11.2 Example: Percentage of Category Sales
If the report displays products within categories and you want each product's share of its category, remove the product-level filter while preserving the category filter.
Product % of Category =
VAR ProductSales = [Total Sales]
VAR CategorySales =
CALCULATE(
[Total Sales],
REMOVEFILTERS(Products[ProductName])
)
RETURN
DIVIDE(
ProductSales,
CategorySales
)
This pattern assumes that the visual includes the category context and that product names uniquely identify the product rows being displayed. If the model uses a product ID or multiple tables to define product identity, adapt the removed filter to match the model and the intended visual behavior.
12. Using Table Variables
Variables can store table expressions as well as single values. Table variables are useful when you want to define a filtered or grouped table once and then use it in the final expression.
12.1 Example: Store a Filtered Table
High Value Sales =
VAR HighValueRows =
FILTER(
Sales,
Sales[Revenue] > 1000
)
RETURN
SUMX(
HighValueRows,
Sales[Revenue]
)
The variable HighValueRows represents the table returned by FILTER. The SUMX function iterates over that table and adds the revenue values.
12.2 Example: Count Rows in a Filtered Table
High Value Sales Row Count =
VAR HighValueRows =
FILTER(
Sales,
Sales[Revenue] > 1000
)
RETURN
COUNTROWS(HighValueRows)
This measure counts sales rows whose revenue exceeds 1,000 in the current filter context.
12.3 Important Rule for Table Variables
A table variable is not a physical model table. You generally cannot refer to its columns using a reference such as HighValueRows[Revenue]. Instead, pass the table variable to functions that accept table expressions and use the appropriate column references in the expression evaluated over that table.
13. Using Variables with Dates and Time Intelligence
Time-intelligence calculations often compare sales across dates, months, quarters, or years. Variables can store the current period, comparison period, and difference or percentage change.
13.1 Month-over-Month Sales Difference
Month-over-Month Difference =
VAR CurrentMonthSales = [Total Sales]
VAR PreviousMonthSales =
CALCULATE(
[Total Sales],
DATEADD('Date'[Date], -1, MONTH)
)
RETURN
CurrentMonthSales - PreviousMonthSales
This measure compares current-context sales with sales shifted by one month. A continuous, correctly related Date table is recommended for reliable time-intelligence calculations.
13.2 Month-over-Month Growth Percentage
Month-over-Month Growth % =
VAR CurrentMonthSales = [Total Sales]
VAR PreviousMonthSales =
CALCULATE(
[Total Sales],
DATEADD('Date'[Date], -1, MONTH)
)
VAR Difference =
CurrentMonthSales - PreviousMonthSales
RETURN
DIVIDE(
Difference,
PreviousMonthSales
)
The result indicates the percentage change relative to the previous month. Format it as a percentage and test it at month, quarter, and year levels because the available date context can change the comparison period.
13.3 Year-to-Date Sales
Year-to-Date Sales =
VAR SalesYTD =
TOTALYTD(
[Total Sales],
'Date'[Date]
)
RETURN
SalesYTD
This example demonstrates storing a time-intelligence result in a variable before returning it. The variable is optional for such a simple measure, but it can be helpful when the result is used in several parts of a larger calculation.
14. Variables in Measures, Calculated Columns, and Calculated Tables
DAX variables can be used in different kinds of model expressions. The way an expression is evaluated depends on whether it is a measure, calculated column, or calculated table.
| Expression type |
Typical purpose |
Evaluation behavior |
| Measure |
Dynamic calculations for reports. |
Evaluated according to the current filter context when queried. |
| Calculated column |
Row-level values stored in a model table. |
Calculated for rows during model processing or refresh, subject to the model's calculation behavior. |
| Calculated table |
Create a table from a DAX expression. |
Evaluated during model processing or refresh rather than recalculated interactively for each report filter. |
14.1 Example: Variable in a Calculated Column
Suppose the Sales table contains quantity and unit price. You can create a calculated column to calculate a row-level amount.
Line Amount =
VAR QuantityValue = Sales[Quantity]
VAR PriceValue = Sales[UnitPrice]
RETURN
QuantityValue * PriceValue
This formula evaluates the values in the current row and stores the calculated amount in the column. If you only need the result as part of a dynamic measure, an iterator such as SUMX may be more appropriate.
14.2 Example: Variable in a Calculated Table
High Value Products =
VAR MinimumSales = 5000
RETURN
FILTER(
Products,
CALCULATE([Total Sales]) > MinimumSales
)
This illustrates the use of a scalar variable within a table expression. The result is a calculated table based on the model data at processing time, not a table that automatically changes with report slicers. Validate the expression against your model's relationships and requirements before using it.
15. Common Mistakes When Using VAR and RETURN
15.1 Forgetting the RETURN Keyword
Problem: The formula declares variables but does not specify a final expression.
Solution: Include one RETURN keyword after the variable declarations and provide the expression that should produce the result.
Correct Measure =
VAR FirstValue = 100
VAR SecondValue = 50
RETURN
FirstValue + SecondValue
15.2 Referencing a Variable Before Declaring It
Problem: A variable uses another variable that has not yet been declared in the same scope.
Solution: Declare variables in dependency order. A variable can refer to previously declared variables within the same variable block.
Correct Calculation =
VAR RevenueValue = 1000
VAR CostValue = 600
VAR ProfitValue = RevenueValue - CostValue
RETURN
ProfitValue
15.3 Expecting a Variable to Change Its Value
Problem: A variable is treated as if it were a measure that recalculates under every later filter context.
Solution: Treat a variable as a value established by its defining expression and context. If you need a calculation under a different filter context, define another expression using CALCULATE.
15.4 Using Spaces in Variable Names
Problem: A variable name contains spaces or unsupported characters.
Solution: Use clear names without spaces, such as TotalSales, PreviousYearSales, or ProfitMargin. Follow DAX naming rules and avoid reserved keywords and table names.
15.5 Creating Too Many Unnecessary Variables
Problem: A simple formula is made more complicated by declaring variables for every minor operation.
Solution: Use variables where they improve readability, avoid repeated expressions, or clarify important business logic. A direct expression is still appropriate when it is already clear and concise.
15.6 Confusing Variables with Measures
Problem: A variable is expected to be accessible from another measure.
Solution: Variables are local to the expression in which they are declared. Create a separate model measure when a calculation needs to be reused independently across multiple formulas.
16. Debugging DAX with Variables
Variables can make it easier to locate errors in complex measures. A practical debugging technique is to temporarily return an intermediate value rather than the final result.
16.1 Example: Debug a Profit Margin Measure
Profit Margin % =
VAR RevenueValue = [Total Sales]
VAR CostValue = [Total Cost]
VAR ProfitValue = RevenueValue - CostValue
VAR MarginValue =
DIVIDE(ProfitValue, RevenueValue)
RETURN
MarginValue
If the measure returns an unexpected result, test each stage separately.
- Temporarily change
RETURN MarginValue to RETURN RevenueValue.
- Check whether the revenue matches the expected total.
- Change the returned variable to
CostValue and check the cost calculation.
- Return
ProfitValue to verify the subtraction.
- Finally, return
MarginValue and format the measure as a percentage.
After debugging, restore the intended final expression. You can also create temporary diagnostic measures during development if you need to inspect several intermediate results simultaneously.
17. Best Practices for Using VAR and RETURN
- Use meaningful names: Prefer
CurrentSales over vague names such as A or X.
- Follow a logical order: Declare base values first, derived calculations next, and the final result last.
- Use variables for repeated expressions: Avoid writing the same complex calculation multiple times in one formula.
- Respect evaluation context: Define each variable where its expression should be evaluated.
- Use DIVIDE for ratios: It provides explicit handling for zero or blank denominators.
- Keep measures modular: Reuse named measures for business calculations that are needed in several places.
- Use consistent naming conventions: Choose a style such as
CurrentSales and PreviousYearSales and apply it consistently.
- Validate with visuals: Test measures at different levels of detail and with multiple slicer selections.
- Avoid unnecessary complexity: Do not introduce variables when they make an already simple expression harder to read.
- Measure performance: Variables can help avoid repeated evaluations of an expression, but performance depends on the formula and query plan. Test actual report performance instead of assuming every variable makes a measure faster.
18. Practical Business Scenario: Sales Performance Dashboard
Imagine a retail company that wants to monitor sales, costs, profits, targets, and year-over-year performance. Its Power BI model contains a Sales table, Products table, Customers table, and Date table.
18.1 Create Base Measures
Total Sales =
SUM(Sales[Revenue])
Total Cost =
SUM(Sales[Cost])
Sales Target =
SUM(Targets[TargetAmount])
These are illustrative base measures. Make sure the target table's relationships and granularity are designed so the target is not duplicated when combined with sales-level fields.
18.2 Create a Profit Measure
Total Profit =
VAR RevenueValue = [Total Sales]
VAR CostValue = [Total Cost]
RETURN
RevenueValue - CostValue
18.3 Create a Profit Margin Measure
Profit Margin % =
VAR ProfitValue = [Total Profit]
VAR RevenueValue = [Total Sales]
RETURN
DIVIDE(ProfitValue, RevenueValue)
18.4 Create a Target Achievement Measure
Target Achievement % =
VAR ActualSales = [Total Sales]
VAR TargetValue = [Sales Target]
RETURN
DIVIDE(ActualSales, TargetValue)
18.5 Create a Year-over-Year Growth Measure
Year-over-Year Growth % =
VAR CurrentSales = [Total Sales]
VAR PreviousYearSales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
RETURN
DIVIDE(
CurrentSales - PreviousYearSales,
PreviousYearSales
)
18.6 Build the Dashboard
- Add cards for total sales, total profit, profit margin, and target achievement.
- Add a line chart to compare sales over time.
- Add a bar chart showing sales by product category.
- Add a matrix containing region, sales, profit, and growth percentage.
- Add slicers for year, product category, and region.
- Validate all measures using sample calculations and different filter combinations.
19. Exercises for Practice
Exercise 1: Calculate Total Profit
Create a measure using variables for total sales and total cost, then return the difference.
Total Profit =
VAR SalesValue = [Total Sales]
VAR CostValue = [Total Cost]
RETURN
SalesValue - CostValue
Exercise 2: Calculate Profit Margin
Use variables to store total profit and total sales. Return profit divided by sales using DIVIDE.
Profit Margin % =
VAR ProfitValue = [Total Profit]
VAR SalesValue = [Total Sales]
RETURN
DIVIDE(ProfitValue, SalesValue)
Exercise 3: Calculate Sales Growth
Create variables for current sales and previous-year sales. Return the percentage difference.
Sales Growth % =
VAR CurrentSales = [Total Sales]
VAR PreviousSales =
CALCULATE(
[Total Sales],
SAMEPERIODLASTYEAR('Date'[Date])
)
RETURN
DIVIDE(
CurrentSales - PreviousSales,
PreviousSales
)
Exercise 4: Classify Sales Performance
Use a variable to store total sales, then classify the result using SWITCH(TRUE()).
Sales Performance =
VAR SalesValue = [Total Sales]
RETURN
SWITCH(
TRUE(),
SalesValue >= 100000, "High",
SalesValue >= 50000, "Medium",
SalesValue > 0, "Low",
"No Sales"
)
Exercise 5: Calculate Sales After Discount
Store the sales amount, discount rate, and discount value in variables. Return the final amount after the discount.
Net Sales =
VAR GrossSales = [Total Sales]
VAR DiscountRate = 0.10
VAR DiscountValue = GrossSales * DiscountRate
RETURN
GrossSales - DiscountValue
Exercise 6: Debug a Measure
Create a measure with at least three variables. Temporarily return each variable to validate its value, then restore the final result.
20. Interview Questions and Answers
Q1. What is VAR in DAX?
Answer: VAR declares a named variable that stores the result of a scalar or table expression for use later within the same DAX expression.
Q2. What is RETURN in DAX?
Answer: RETURN introduces the final expression that produces the result of the variable block.
Q3. Can a DAX formula contain multiple variables?
Answer: Yes. You can declare multiple variables before the RETURN keyword. Later variables can reference variables declared earlier in the same scope.
Q4. Can variables be reused across different measures?
Answer: No. Variables are local to the expression in which they are declared. If a calculation needs to be reused across measures, create a separate measure and reference it where needed.
Q5. Do variables change when CALCULATE changes the filter context?
Answer: No. A variable's result is established by its defining expression and evaluation context. Referencing that variable inside a later CALCULATE does not reevaluate its definition under the modified context.
Q6. Can variables store table expressions?
Answer: Yes. A variable can store a table expression, such as a filtered table returned by FILTER. That table variable can then be passed to functions that accept a table expression.
Q7. What are the advantages of using variables?
Answer: Variables improve readability, reduce repeated expressions, make formulas easier to debug, and may improve performance when they prevent unnecessary repeated calculations.
Q8. Are variables required in every DAX measure?
Answer: No. Variables are optional. They are most useful when they clarify the logic, store intermediate results, or help avoid repeated complex expressions.
Q9. What happens if RETURN is omitted?
Answer: A DAX expression containing variable declarations must have a corresponding RETURN expression. Omitting it results in an invalid formula.
Q10. Can variables be used in calculated columns?
Answer: Yes. Variables can be used in measures, calculated columns, and calculated tables, although each type of expression has different evaluation behavior.
Q11. How can variables help with debugging?
Answer: You can temporarily return an intermediate variable to inspect its value and identify which part of a complex formula is producing an unexpected result.
Q12. Do variables always improve performance?
Answer: No. Variables can avoid repeated evaluations and simplify expressions, but actual performance depends on the formula, data model, and query plan. Performance should be measured.
21. Quick Revision Checklist
VAR declares a variable.
RETURN specifies the final expression.
- Multiple variables can be declared before the return expression.
- Variables can store scalar or table expressions.
- A later variable can use a previously declared variable in the same scope.
- Variables are local to their DAX expression.
- Variables do not automatically recalculate when referenced inside a modified filter context.
- Use separate expressions when values must be evaluated under different contexts.
- Use variables to organize complex formulas and improve debugging.
- Use measures for reusable calculations across the data model.
- Test results with different slicers, visuals, and levels of detail.
- Measure performance instead of assuming variables always make formulas faster.
22. Conclusion
The VAR and RETURN keywords are important tools for writing clean and maintainable DAX formulas in Power BI. Variables allow you to name intermediate calculations, separate business logic into clear stages, and simplify formulas involving conditions, time intelligence, percentages, and comparisons.
The most important concept is understanding when a variable is evaluated and how its value relates to filter context. A variable stores the result of its defining expression; it does not behave like a measure that automatically recalculates under a later filter modification. Once you understand this behavior, you can use variables to build more reliable and easier-to-debug reports.
23. Official Learning Resources