# Power Pivot Principles: The A to Z of DAX Functions – EARLIER

4 July 2023

*In our long-established Power Pivot Principles articles, we
continue our series on the A to Z of Data Analysis eXpression (DAX) functions. This week, we look at EARLIER. *

* *

*The ***EARLIER*** function*

The **EARLIER **function is one of the filter functions in
DAX where it returns the current value of the specific column in an outer
evaluation pass of the mentioned column (a nice and clear definition for you!). The **EARLIER** function is quite useful
for nested calculations where you want to use a certain value as an input and
produce calculation using data from the entire table. The **EARLIER** function is mostly used in the context
of calculated columns. It employs a very
simple syntax:

**EARLIER(column, [number])**

where:

**column**: this is required and, represents a column or expression that results in a column**number**: this is optional and, represents a positive number to be outer evaluation pass. The next evaluation level out is represented by one [1], two levels out is represented by two [2] and so on. When**number**is omitted, it will return the default value of one [1].

It should be noted:

- if there is a row context before the table scan starts, the
**EARLIER**function is successful; otherwise, an error is returned - the performance of the
**EARLIER**function may be slow since, in theory, it may need to execute close to the whole number of rows (in the column) times the same number of operations (depending upon the syntax of the expression). For instance, if the column has 10 rows, then 100 operations may be necessary; if the column contains 100 rows, then close to 10,000 operations may be necessary - this function is not supported for use in DirectQuery mode when used in calculated columns or row-level security (RLS) rules.

To illustrate the use of the **EARLIER **function, consider the
following example:

Here, we have the following **Sales** table. First, we will create an aggregation measure
for **SalesAmount** then we will use this aggregation along with the **EARLIER**function to create a cumulative amount for each date:

Next, we move to the Power Pivot data model to create a calculated column with the following DAX code:

**EARLIER_Example:=CALCULATE([SalesAmount],FILTER(Sales,Sales[OrderDate]<=EARLIER(Sales[OrderDate])))**

This DAX code will return
a cumulative **SalesAmount** by date:

The following steps describe the method of calculation in more detail.

- the
**EARLIER**function gets the value of**Sales[OrderDate]**for the current row in the table - in this case, because the process is starting, it is the first row in the table
**EARLIER(Sales[OrderDate])**evaluates to 1 January 2013, the current row in the outer loop- the
**FILTER**function now returns a table where all rows have an order date less than 1 January 2013 (which is the current value for**EARLIER**) - the
**CALCULATE**function then sums the**SalesAmount** - the calculated column formula moves to the next row and repeats the above steps
- these steps are repeated until the end of the table is reached.

The **EARLIER **function will always get the value of the column prior to the current table
operation. If you need to get a value
from the loop before that, set the second argument to two [2].

Assuming you have wrapped your head around this, let’s move on. If we use the same code in the calculated column to create a new measure, we will now get an error message:

There is a
workaround if you want to create a measure instead of calculated column for an **EARLIER **function:

**=CALCULATE(**

** SUM(Sales[SalesAmount]),**

** FILTER(ALL(Sales),**

** SUMX(FILTER(Sales,EARLIER(Sales[OrderDate])<=Sales[OrderDate]),Sales[SalesAmount])**

** )**

** )**

This DAX code help us replicate the same result we have in the previous example using calculated column for our measure. You can create a Pivot Table to view the result of the measure:

As we can see the result here is identical to the result using the calculated column in Power Pivot.

* *

*Come back next week for our next post on Power
Pivot in the **Blog** section. In the meantime, please remember we have
training in Power Pivot which you can find out more about **here**. If you wish to catch up on past articles in
the meantime, you can find all of our Past Power Pivot blogs **here**.*