Stay Ahead, Stay ONMINE

How to Develop Complex DAX Expressions

At some point or another, any Power BI developer must write complex Dax expressions to analyze data. But nobody tells you how to do it. What’s the process for doing it? What is the best way to do it, and how supportive can a development process be? These are the questions I will answer here. Introduction  Sometimes my clients ask me how I came up with the solution for a specific measure in DAX. My answer is always that I follow a specific process to find a solution.  Sometimes, the process is not straightforward, and I must deviate or start from scratch when I  see that I have taken the wrong direction.  But the development process is always the same:  1. Understand the requirements.  2. Define the math to calculate the result.  3. Understand if the measure must work in any or one specific scenario. 4. Start with intermediary results and work my way step-by-step until I fully understand how it should work and can deliver the requested result.  5. Calculate the final result.  The third step is the most difficult.  Sometimes my client asks me to calculate a specific result in a particular scenario. But after I ask again, the answer is: Yes, I will also use it in other scenarios.  For example, some time ago, a client asked me to create some measures for a specific scenario in a report. I had to do it live during a workshop with the client’s team.  Days after I delivered the requested results, he asked me to create another report based on the same semantic model and logic we elaborated on during the workshop, but for a more flexible scenario.  The first set of measures was designed to work tightly with the first scenario, so I didn’t want to change them. Therefore, I created a new set of more generic measures.  Yes, this is a worst-case scenario, but it is something that can happen.  This was just an example of how important it is to take some time to thoroughly understand the needs and the possible future use cases for the requested measures.  Step 1: The requirements  For this piece, I take one measure from my previous article to calculate the linear extrapolation of my customer count.  The requirements are: Use the Customer Count Measure as the Basis Measure.  The user can select the year to analyze.  The user can select any other dimension in any Slicer.  The User will analyze the result over time per month.  The past Customer Count should be taken as the input values.  The YTD growth rate must be used as the basis for the result.  Based on the YTD growth rate, the Customer Count should be extrapolated to the end of  the year.  The YTD Customer Count and the Extrapolation must be shown on the same Line-Chart. The result should look like this for the year 2022:  Figure 1 – Requested result for the linear extrapolation of the Customer Count (Figure by the Author)  OK, let’s look at how I developed this measure. But before doing so, we must understand what the filter context is.  If you are already familiar with it, you can skip this section. Or you can read it anyway to ensure we are at the same level.  Interlude: The filter context  The filter context is the central concept of DAX.  When writing measures in a semantic model, whether in Power Bi, a fabric semantic model, or an analysis services semantic model, you must always understand the current filter context.  The filter context is:  The sum of all Filters which affect the result of a DAX expression.  Look at the following picture: Figure 2 – Ask yourself: What is the Filter Context of the marked cells? (Figure by the Author) Can you explain the Filter Context of the marked cells?  Now, look at the following picture:  Figure 3 – All the Filters that affect the Filter Context of the marked cells (Figure by the Author)  There are six filters, that affect the filter context of the marked cells for the two measures “Sum Retail Sales” and “Avg Retail Sales”:  The Store “Contoso Paris Store”  The City “Paris”  The ClassName “Economy”  The Month of April 2024  The Country “France”  The Manufacturer “Proseware Inc.”  The first three filters come from the visual. We can call them “Internal Filters”. They control how the Matrix-Visual can expand and how many details we can see.  The other filters are “External Filters”, which come from the Slicers or the Filter Pane in Power BI  and are controlled by the user.  The Power of DAX Measures lies in the possibility of extracting the value of the Filter Context and the capability of manipulating the Filter context.  We do this when writing DAX expressions: We manipulate the filter context. Step 2: Intermediary results  OK, now we are good to go.  First, I do not start with the Line-Visual, but with a Table or a Matrix Visual.  This is because it’s easier to see the result as a number than a line.  Even though a linear progression is visible only as a line.  However, the intermediary results are better readable in a Matrix.  If you are not familiar with working with Variables in DAX, I recommend reading this piece, where  I explain the concepts for Variables:  The next step is to define the Base Measure. This is the Measure we want to use to calculate the intended Result.  As we want to calculate the YTD result, we can use a YTD Measure for the Customer Count:  Online Customer Count YTD = VAR YTDDates = DATESYTD(‘Date'[Date]) RETURN CALCULATE( DISTINCTCOUNT(‘Online Sales'[CustomerKey]) ,YTDDates ) Now we must consider what to do with these intermediary results.  This means that we must define the arithmetic of the Measure.  For each month, I must calculate the last known Customer Count YTD.  This means, I always want to calculate 2,091 for each month. This is the last YTD Customer  Count for the year 2022.  Then, I want to divide this result by the last month with Sales, in this case 6, for June. Then multiply it by the current month number.  Therefore, the first intermediary result is to know when the last Sale was made. We must get the latest date in the Online Sales table for this.  According to the requirements, the User can select any year to analyze, and the result must be calculated monthly.  Therefore, the correct definition is: I must first know the month when the last sale was made for the selected year.  The Fact table contains a date and a Relationship to the Date table, which includes the month number (Column: [Month]). So, the first variable will be something like this:  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) RETURN LastMonthWithData This is the result:  Figure 4 – Get the last month with Sales (Figure by the Author)  Hold on: We must always get the last month with sales. As it is now, we always get the same month as the Month of the current row.  This is because each row has the Filter Context set to each month.  Therefore, we must remove the Filter for the Month, while retaining the Year. We can do this with ALLEXCEPT():  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = CALCULATE(MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ) RETURN LastMonthWithData Now, the result looks much better: Figure 5 – Last month with Sales calculated for all months (Figure by the Author)  As we calculate the result for each month, we must know the month number of the current row (Month). We will reuse this as the factor for which we multiply the Average to get the linear extrapolation.  The next intermediary result is to get the Month number:  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = CALCULATE(MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ) // Get the last month // Is needed if we are looking at the data at the year, semester, or quarter level VAR MaxMonth = MAX(‘Date'[Month]) RETURN MaxMonth I can leave the first Variable in place and only use the MaxMonth variable after the return. The result shows the month number per month: Figure 6 – Get the current month number per row (Figure by the Author)  According to the definition formulated before, we must get the last Customer Count YTD for the latest month with Sales.  I can do this with the following Expression:  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = CALCULATE(MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ) // Get the last month // Is needed if we are looking at the data at the year, semester, or quarter level VAR MaxMonth = MAX(‘Date'[Month]) // Get the Customer Count YTD VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD] ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ,’Date'[Month] = LastMonthWithData ) RETURN LastCustomerCountYTD As expected, the result shows 2,091 for each month: Figure 7 – Calculating the latest Customer Count YTD for each month (Figure by the Author)  You can see why I start with a table or a Matrix when developing complex Measures.  Now, imagine that one intermediary result is a date or a text.  Showing such a result in a line visual will not be practical.  We are ready to calculate the final result according to the mathematical definition above.  Step 3: The final result  We have two ways to calculate the result:  1. Write the expression after the RETURN statement.  2. Create a new Variable “Result” and use this Variable after the RETURN statement. The final Expression is this:  (LastCustomerCountYTD / LastMonthWithData) * MaxMonth The first Variant looks like this:  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = CALCULATE(MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ) // Get the last month // Is needed if we are looking at the data at the year, semester, or quarter level VAR MaxMonth = MAX(‘Date'[Month]) // Get the Customer Count YTD VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD] ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ,’Date'[Month] = LastMonthWithData ) RETURN // Calculating the extrapolation (LastCustomerCountYTD / LastMonthWithData) * MaxMonth This is the second Variant:  Linear extrapolation Customer Count YTD trend = // Get the number of months since the start of the year VAR LastMonthWithData = CALCULATE(MAXX(‘Online Sales’ ,RELATED(‘Date'[Month]) ) ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ) // Get the last month // Is needed if we are looking at the data at the year, semester, or quarter level VAR MaxMonth = MAX(‘Date'[Month]) // Get the Customer Count YTD VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD] ,ALLEXCEPT(‘Date’, ‘Date'[Year]) ,’Date'[Month] = LastMonthWithData ) // Calculating the extrapolation VAR Result = (LastCustomerCountYTD / LastMonthWithData) * MaxMonth RETURN Result The result is the same.  The second variant allows us to quickly switch back to the Intermediary results if the final result  is incorrect without needing to set the expression after the RETURN statement as a comment.  It simply makes life easier.  But it’s up to you which variant you like more.  The result is this: Figure 8 – Final result in a table (Figure by the Author)  When converting this table to a Line Visual, we get the same result as in the first figure. The last step will be to set the line as a Dashed line, to get the needed visualization. Figure 9 – Set the line for the extrapolation as a dashed line (Figure by the Author)  Complex calculated columns  The process is the same when writing complex DAX expressions for calculated columns. The difference is that we can see the result in the Table View of Power BI Desktop.  Be aware that when calculated columns are calculated, the results are physically stored in the table when you press Enter.  The results of Measures are not stored in the Model. They are calculated on the fly in the Visualizations.  Another difference is that we can leverage Context Transition to get our result when we need it to depend on other rows in the table.  Read this piece to learn more about this fascinating topic:  Conclusion  The development process for complex expressions always follows the same steps:  1. Understand the requirements – Ask if something is unclear.  2. Define the math for the results.  3. Start with intermediary results and understand the results.  4. Build on the intermediary results one by one – Do not try to write all in one step. 5. Decide where to write the expression for the final result.  Following such a process can save you the day, as you don’t need to write everything in one step.  Moreover, getting these intermediary results allows you to understand what’s happening and explore the Filter Context.  This will help you learn DAX more efficiently and build even more complex stuff.  But, be aware: Even though a certain level of complexity is needed, a good developer will keep it as simple as possible, while maintaining the least amount of complexity.  References  Here is the article mentioned at the beginning of this piece, to calculate the linear interpolation. Like in my previous articles, I use the Contoso sample dataset. You can download the  ContosoRetailDW Dataset for free from Microsoft here. The Contoso Data can be freely used under the MIT License, as described here. I changed the dataset to shift the data to contemporary dates.

At some point or another, any Power BI developer must write complex Dax expressions to analyze data. But nobody tells you how to do it. What’s the process for doing it? What is the best way to do it, and how supportive can a development process be? These are the questions I will answer here.

Introduction 

Sometimes my clients ask me how I came up with the solution for a specific measure in DAX. My answer is always that I follow a specific process to find a solution. 

Sometimes, the process is not straightforward, and I must deviate or start from scratch when I  see that I have taken the wrong direction. 

But the development process is always the same: 

1. Understand the requirements. 

2. Define the math to calculate the result. 

3. Understand if the measure must work in any or one specific scenario.

4. Start with intermediary results and work my way step-by-step until I fully understand how it should work and can deliver the requested result. 

5. Calculate the final result. 

The third step is the most difficult. 

Sometimes my client asks me to calculate a specific result in a particular scenario. But after I ask again, the answer is: Yes, I will also use it in other scenarios. 

For example, some time ago, a client asked me to create some measures for a specific scenario in a report. I had to do it live during a workshop with the client’s team. 

Days after I delivered the requested results, he asked me to create another report based on the same semantic model and logic we elaborated on during the workshop, but for a more flexible scenario. 

The first set of measures was designed to work tightly with the first scenario, so I didn’t want to change them. Therefore, I created a new set of more generic measures. 

Yes, this is a worst-case scenario, but it is something that can happen. 

This was just an example of how important it is to take some time to thoroughly understand the needs and the possible future use cases for the requested measures. 

Step 1: The requirements 

For this piece, I take one measure from my previous article to calculate the linear extrapolation of my customer count. 

The requirements are:

  • Use the Customer Count Measure as the Basis Measure. 
  • The user can select the year to analyze. 
  • The user can select any other dimension in any Slicer. 
  • The User will analyze the result over time per month. 
  • The past Customer Count should be taken as the input values. 
  • The YTD growth rate must be used as the basis for the result. 
  • Based on the YTD growth rate, the Customer Count should be extrapolated to the end of  the year. 
  • The YTD Customer Count and the Extrapolation must be shown on the same Line-Chart.

The result should look like this for the year 2022: 

Figure 1 – Requested result for the linear extrapolation of the Customer Count (Figure by the Author) 

OK, let’s look at how I developed this measure.

But before doing so, we must understand what the filter context is. 

If you are already familiar with it, you can skip this section. Or you can read it anyway to ensure we are at the same level. 

Interlude: The filter context 

The filter context is the central concept of DAX. 

When writing measures in a semantic model, whether in Power Bi, a fabric semantic model, or an analysis services semantic model, you must always understand the current filter context. 

The filter context is: 

The sum of all Filters which affect the result of a DAX expression. 

Look at the following picture:

Figure 2 – Ask yourself: What is the Filter Context of the marked cells? (Figure by the Author) Can you explain the Filter Context of the marked cells? 

Now, look at the following picture: 

Figure 3 – All the Filters that affect the Filter Context of the marked cells (Figure by the Author) 

There are six filters, that affect the filter context of the marked cells for the two measures “Sum Retail Sales” and “Avg Retail Sales”: 

  • The Store “Contoso Paris Store” 
  • The City “Paris” 
  • The ClassName “Economy” 
  • The Month of April 2024 
  • The Country “France” 
  • The Manufacturer “Proseware Inc.” 

The first three filters come from the visual. We can call them “Internal Filters”. They control how the Matrix-Visual can expand and how many details we can see. 

The other filters are “External Filters”, which come from the Slicers or the Filter Pane in Power BI  and are controlled by the user. 

The Power of DAX Measures lies in the possibility of extracting the value of the Filter Context and the capability of manipulating the Filter context. 

We do this when writing DAX expressions: We manipulate the filter context.

Step 2: Intermediary results 

OK, now we are good to go. 

First, I do not start with the Line-Visual, but with a Table or a Matrix Visual. 

This is because it’s easier to see the result as a number than a line. 

Even though a linear progression is visible only as a line. 

However, the intermediary results are better readable in a Matrix. 

If you are not familiar with working with Variables in DAX, I recommend reading this piece, where  I explain the concepts for Variables: 

The next step is to define the Base Measure. This is the Measure we want to use to calculate the intended Result. 

As we want to calculate the YTD result, we can use a YTD Measure for the Customer Count: 

Online Customer Count YTD =
VAR YTDDates = DATESYTD('Date'[Date])
RETURN
CALCULATE(
DISTINCTCOUNT('Online Sales'[CustomerKey])
,YTDDates
)

Now we must consider what to do with these intermediary results. 

This means that we must define the arithmetic of the Measure. 

For each month, I must calculate the last known Customer Count YTD. 

This means, I always want to calculate 2,091 for each month. This is the last YTD Customer  Count for the year 2022. 

Then, I want to divide this result by the last month with Sales, in this case 6, for June. Then multiply it by the current month number. 

Therefore, the first intermediary result is to know when the last Sale was made. We must get the latest date in the Online Sales table for this. 

According to the requirements, the User can select any year to analyze, and the result must be calculated monthly. 

Therefore, the correct definition is: I must first know the month when the last sale was made for the selected year. 

The Fact table contains a date and a Relationship to the Date table, which includes the month number (Column: [Month]).

So, the first variable will be something like this: 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = MAXX('Online Sales'

,RELATED('Date'[Month])
)

RETURN
LastMonthWithData

This is the result: 

Figure 4 – Get the last month with Sales (Figure by the Author) 

Hold on: We must always get the last month with sales. As it is now, we always get the same month as the Month of the current row. 

This is because each row has the Filter Context set to each month. 

Therefore, we must remove the Filter for the Month, while retaining the Year. We can do this with ALLEXCEPT(): 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = CALCULATE(MAXX('Online Sales'
,RELATED('Date'[Month])
)
,ALLEXCEPT('Date', 'Date'[Year])
)

RETURN
LastMonthWithData

Now, the result looks much better:

Figure 5 – Last month with Sales calculated for all months (Figure by the Author) 

As we calculate the result for each month, we must know the month number of the current row (Month). We will reuse this as the factor for which we multiply the Average to get the linear extrapolation. 

The next intermediary result is to get the Month number: 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = CALCULATE(MAXX('Online Sales'
,RELATED('Date'[Month])
)
,ALLEXCEPT('Date', 'Date'[Year])
)
// Get the last month
// Is needed if we are looking at the data at the year, semester, or
quarter level
VAR MaxMonth = MAX('Date'[Month])
RETURN
MaxMonth

I can leave the first Variable in place and only use the MaxMonth variable after the return. The result shows the month number per month:

Figure 6 – Get the current month number per row (Figure by the Author) 

According to the definition formulated before, we must get the last Customer Count YTD for the latest month with Sales. 

I can do this with the following Expression: 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = CALCULATE(MAXX('Online Sales'
,RELATED('Date'[Month])
)
,ALLEXCEPT('Date', 'Date'[Year])
)
// Get the last month
// Is needed if we are looking at the data at the year, semester, or
quarter level
VAR MaxMonth = MAX('Date'[Month])
// Get the Customer Count YTD
VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD]
,ALLEXCEPT('Date', 'Date'[Year])
,'Date'[Month] = LastMonthWithData
)

RETURN
LastCustomerCountYTD

As expected, the result shows 2,091 for each month:

Figure 7 – Calculating the latest Customer Count YTD for each month (Figure by the Author) 

You can see why I start with a table or a Matrix when developing complex Measures. 

Now, imagine that one intermediary result is a date or a text. 

Showing such a result in a line visual will not be practical. 

We are ready to calculate the final result according to the mathematical definition above. 

Step 3: The final result 

We have two ways to calculate the result: 

1. Write the expression after the RETURN statement. 

2. Create a new Variable “Result” and use this Variable after the RETURN statement. The final Expression is this: 

(LastCustomerCountYTD / LastMonthWithData) * MaxMonth

The first Variant looks like this: 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = CALCULATE(MAXX('Online Sales'
,RELATED('Date'[Month])

)

,ALLEXCEPT('Date', 'Date'[Year])

)
// Get the last month
// Is needed if we are looking at the data at the year, semester, or
quarter level
VAR MaxMonth = MAX('Date'[Month])
// Get the Customer Count YTD
VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD]
,ALLEXCEPT('Date', 'Date'[Year])
,'Date'[Month] = LastMonthWithData
)

RETURN
// Calculating the extrapolation
(LastCustomerCountYTD / LastMonthWithData) * MaxMonth

This is the second Variant: 

Linear extrapolation Customer Count YTD trend =
// Get the number of months since the start of the year
VAR LastMonthWithData = CALCULATE(MAXX('Online Sales'
,RELATED('Date'[Month])
)
,ALLEXCEPT('Date', 'Date'[Year])
)
// Get the last month
// Is needed if we are looking at the data at the year, semester, or
quarter level
VAR MaxMonth = MAX('Date'[Month])
// Get the Customer Count YTD
VAR LastCustomerCountYTD = CALCULATE([Online Customer Count YTD]
,ALLEXCEPT('Date', 'Date'[Year])
,'Date'[Month] = LastMonthWithData
)
// Calculating the extrapolation
VAR Result =
(LastCustomerCountYTD / LastMonthWithData) * MaxMonth
RETURN
Result

The result is the same. 

The second variant allows us to quickly switch back to the Intermediary results if the final result  is incorrect without needing to set the expression after the RETURN statement as a comment. 

It simply makes life easier. 

But it’s up to you which variant you like more. 

The result is this:

Figure 8 – Final result in a table (Figure by the Author) 

When converting this table to a Line Visual, we get the same result as in the first figure. The last step will be to set the line as a Dashed line, to get the needed visualization.

Figure 9 – Set the line for the extrapolation as a dashed line (Figure by the Author) 

Complex calculated columns 

The process is the same when writing complex DAX expressions for calculated columns. The difference is that we can see the result in the Table View of Power BI Desktop. 

Be aware that when calculated columns are calculated, the results are physically stored in the table when you press Enter. 

The results of Measures are not stored in the Model. They are calculated on the fly in the Visualizations. 

Another difference is that we can leverage Context Transition to get our result when we need it to depend on other rows in the table. 

Read this piece to learn more about this fascinating topic: 

Conclusion 

The development process for complex expressions always follows the same steps: 

1. Understand the requirements – Ask if something is unclear. 

2. Define the math for the results. 

3. Start with intermediary results and understand the results. 

4. Build on the intermediary results one by one – Do not try to write all in one step.

5. Decide where to write the expression for the final result. 

Following such a process can save you the day, as you don’t need to write everything in one step. 

Moreover, getting these intermediary results allows you to understand what’s happening and explore the Filter Context. 

This will help you learn DAX more efficiently and build even more complex stuff. 

But, be aware: Even though a certain level of complexity is needed, a good developer will keep it as simple as possible, while maintaining the least amount of complexity. 

References 

Here is the article mentioned at the beginning of this piece, to calculate the linear interpolation.

Like in my previous articles, I use the Contoso sample dataset. You can download the  ContosoRetailDW Dataset for free from Microsoft here.

The Contoso Data can be freely used under the MIT License, as described here. I changed the dataset to shift the data to contemporary dates.

Shape
Shape
Stay Ahead

Explore More Insights

Stay ahead with more perspectives on cutting-edge power, infrastructure, energy,  bitcoin and AI solutions. Explore these articles to uncover strategies and insights shaping the future of industries.

Shape

On-prem VeloCloud Orchestrator under attack, only some versions patched

Mayuresh Dani, security research manager, at Qualys Threat Research Unit, warned that unpatched versions remain “exposed to active exploitation and have only compensating controls as a protection.” Arista said that organizations suspecting compromise should preserve VCO web access logs, backend application logs, system logs, database logs, and relevant file-system timestamps

Read More »

TotalEnergies takes FID for Absheron full field development offshore Azerbaijan

TotalEnergies has taken final investment decision (FID) for the full field development of Absheron gas and condensate field in the Caspian Sea offshore Azerbaijan. Absheron field, which lies 100 km southeast of Baku, is estimated to hold about 140 bcm of recoverable gas reserves, TotalEnergies said in a release Sept. 26. The first development phase, with a production capacity of 1.5 bcmy of gas and 12,000 b/d of condensate, came on stream in 2023. Absheron Full Field development is expected to increase overall field production to 6 bcmy and 47,000 b/d of condensate. Startup is expected in 2029. Gas will be supplied to the domestic market and exported to Türkiye through the existing gas infrastructure connecting Azerbaijan to the European gas market. Gas will be produced by 4 subsea wells, transported to shore through a subsea pipeline equipped with advanced automation solutions and processed in a new onshore plant, fully electrified and designed to minimize energy consumption and greenhouse gas emissions, TotalEnergies said. The scope 1 & 2 greenhouse gas emissions intensity of the project is below 4 kg CO2e/boe. TotalEnergies is operator of the project with 35% interest. Partners are State Oil Co. of the Republic of Azerbaijan (SOCAR, 35%) and XRG, a unit of ADNOC (30%).  

Read More »

Trump Administration Mitigates Blackout Risks by Keeping Colorado Coal Plant Online

WASHINGTON—U.S. Secretary of Energy Chris Wright today issued an emergency order to keep a Colorado coal plant operational to ensure Americans maintain access to affordable, reliable, and secure electricity. The order directs Tri-State Generation and Transmission Association (Tri-State), Southwest Power Pool (SPP), Platte River Power Authority, Salt River Project, PacifiCorp, and Public Service Company of Colorado to take all measures necessary to ensure that Unit 1 at the Craig Station in Craig, Colorado is available to operate. For the duration of this Order, SPP is directed to take every step to employ economic dispatch of Craig Unit 1 to mitigate the risk of blackouts and minimize costs to taxpayers. Unit 1 of the coal plant was originally scheduled to shut down at the end of 2025, but in December 2025 and twice in 2026, Secretary Wright issued emergency orders directing Tri-State and the co-owners to ensure that Craig Unit 1 remains available to operate. “For over the past decade, state and federal leaders have harmed Coloradans’ wallets and energy security with efforts to force reliable generation off the grid,” said Secretary Wright. “The Trump Administration will continue taking action to ensure we don’t lose critical generation sources. Americans deserve access to affordable, reliable, and secure energy to power their homes all the time, regardless of whether the wind is blowing or the sun is shining.” Thanks to President Trump’s leadership, coal generating plants across the country are being saved from premature retirement. For example, since 2025 more than 17 gigawatts of coal power electricity generation were saved from going offline. The availability of Craig Unit 1 to operate will continue to be an asset to maintain reliability in the Western Electricity Coordinating Council (WECC) Rocky Mountain region and is necessary to address elevated reliability risks in the region during atypical weather and reduce

Read More »

MOL wraps repairs on major unit at Hungarian refinery

Hungary’s MOL Group has completed repairs to a main crude processing unit that suffered major damage resulting from a late-2025 fire at its 8.1-million tonnes/year (163,000-b/cd) refinery along the Danube River in Százhalombatta, near Budapest. Repair-related construction works amounting to 18 billion forints (Hun.; US$57.1 million) were completed as of Sept. 22 on the refinery’s atmospheric-vacuum distillation (AV-3) unit, paving the way for the unit’s gradual restart once construction equipment is removed, MOL said in a release. Completed according to schedule, the year-long comprehensive repair project entailed the demolition and rebuilding of the unit’s reinforced concrete structure, as well as restoration works on all unit equipment impacted by the fire, including related control and electrical systems, the operator said. Alongside mechanical repairs, the project also included: Installation of 27 new, high-capacity pumps. Replacement of 8 km of piping. Installation of 100 km of electrical cables. With construction activities now wrapped, MOL said the refinery is preparing for the unit’s gradual restart following a series of next steps that will include: Flushing of unidentified unit systems. Executing pressure tests. Performing functional tests of the process control and safety equipment. Connecting of all associated auxiliary power supplies. Coordinating operation of the repaired AV-3 unit with associated plants of the refinery. Once all preliminary restart activities and complementary operational safety inspections and tests have been completed, crude throughputs will be reintroduced into the unit for phased restart of production activities beginning in October, MOL said. Requisite repairs to AV-3 follow a fire that broke out in the unit on Oct. 20, 2025, which led to a temporary shutdown of the refinery and a 50% drop in crude distillation capacity at the site following the incident, according to the operator’s 2025 annual report to investors. While plants not affected by the fire were quickly

Read More »

A volatile week for crude ends with lower prices

Oil, fundamental analysis Several factors whipsawed crude prices this week with WTI seeing a $12/bbl  Hi/Lo spread. Varying accounts of flowing oil, ongoing infrastructure attacks, and sparse diplomatic efforts provided a great deal of market uncertainty. WTI’s High was Monday’s $101.10/bbl for October while the Low was Wednesday’s $88.70. October Brent crude hit its High on Thursday at $108.25/bbl with the low on Tuesday at $97.35. WTI is down on the week while Brent is essentially flat. The WTI/Brent spread has blown out to $11.70. Analysts attribute this anomaly to a possible US diesel export ban making the domestic crude less desirable. Saudi Arabia reported that flows in their East-West pipeline have resumed. However, Houthi rebels continue their strikes against Saudi Arabia which now includes attacks near Riyadh. The Yemeni-based rebel group has also targeted Saudi Aramco facilities at the port of Yanbu, the terminus for the East-West oil pipeline where it is loaded for export. The Kingdom’s military has been able to intercept several missiles launched by the Houthis. France has promised to send varied aid to help protect this key port and refinery there. Both the Saudis and Oman have appealed to Washington to keep the economic and military pressure on Iran even if the Iranians wish to start diplomatic talks again. Qatar is proposing that negotiations begin again as soon as next week in Oman. Some sources are indicating that Iran would consider opening the Strait of Hormuz if the US would rollback the naval blockade. This despite the strong words of defiance spoken by the leaders of both Iran and Israel at the UN this week. Even with the continuing attacks, an estimated 5.5 million b/d of oil has been moving out of Yanbu and from UAE’s Fujairah port in the Gulf of Oman. However, that

Read More »

DOE Releases Up to $41M Lab Call to Accelerate Commercialization of American Energy Technologies

WASHINGTON, D.C. — The U.S. Department of Energy (DOE) Office of Technology Commercialization (OTC) today announced the opening of the Fiscal Year 2026 and Fiscal Year 2027 Technology Commercialization Fund (TCF) Core Laboratory Infrastructure for Market Readiness (CLIMR) Technology-Specific Topics lab call, making up to $41 million available to advance the commercialization of promising technologies in five priority areas. The final funding amount is based on the Fiscal Year (FY) 2026 budget and is subject to FY 2027 Congressional appropriations.   The lab call creates new opportunities for industry, entrepreneurs, investors, universities, nonprofits, and other organizations to engage with DOE National Laboratories, plants, and sites and help move DOE technologies from research and development toward the marketplace. National Laboratories can submit proposals to DOE, and organizations interested in participating as potential project partners can add their information to the Teaming Partner List.  The CLIMR lab calls serve the TCF mission by strengthening the lab-to-market pipeline, fostering collaboration, and ensuring that federally funded research delivers tangible benefits to the nation’s economy and energy security.    This lab call advances President Trump’s energy dominance agenda by leveraging American science and innovation to strengthen U.S. economic competitiveness and national security. Connecting DOE technologies with private-sector expertise, capital, manufacturing capabilities, and market insight helps accelerate commercialization, strengthen domestic industry, and ensure that more American innovations are developed and deployed in the United States.  “President Trump’s agenda is about ensuring America leads not only in producing energy, but also in developing and commercializing the technologies that will strengthen our economy and national security,” said DOE Chief Commercialization Officer and Director of the Office of Technology Commercialization Anthony Pugliese. “This lab call is an opportunity for American companies, entrepreneurs, investors, and innovators to work alongside our National Labs to move promising technologies into the marketplace. By bringing

Read More »

Aker BP increases projected size of North Sea discovery

Aker BP ASA increased the projected size of a recent North Sea discovery following results of an apprasial well. The operator and its license partners are now considering profitability and whether the discovery could be tied back to Aker BP-operated Symra field. Well 16/1-EA-4 H was drilled by the Deep Sea Nordkapp drilling rig in 116 m of water from the subsea template on Symra field as a horizontal appraisal wellbore about 200 km west of Stavanger. It was the 11th exploration well in production licence 167, which contains the Verdandi and Lillefix discoveries. The well was drilled to 1,864 m TVD subsea. It was terminated in the Heimdal formation from the Palaeocene. The objective was to prove reservoir rocks from the Palaeocene in the Heimdal formation, as well as to confirm the extent of the reservoir and presumed oil-water contact. The well encountered a 14-m gas column and a 44-m oil column in sandstone layers in the Heimdal formation. The gas-oil contact was encountered at 1,776 m subsea. A total of 1,515 reservoir m were drilled horizontally through the oil zone in the Heimdal formation with moderate reservoir quality. Data acquisition has been carried out, which included obtaining fluid samples and pressure points. The well has been permanently plugged. Results from the appraisal well increase the projected discovery size. Prior to drilling, the companies presumed that the discovery was 0.6–1.9 million std cu m oil equivalent (4-12 million bbl). Preliminary calculations after drilling amount to 1.3–2.4 million std cu m oil equivalent (8-15 million bbl). Aker BP is operator at PL 167 (50%) with partners Equinor Energy AS (30%) and DNO Norge AS (20%).  

Read More »

Google’s first prototype satellite is going up, kicking off its space-based data center project

Google announced its Project Suncatcher space-based data center plan last November. The goal is to take advantage of the unlimited sunlight of space and to minimize the impact of data centers here on Earth. Next week, the first satellite is going up on the SpaceX Transporter-18 mission, Google announced yesterday. The prototype satellite will test how Google’s AI chips—its Tensor Processing Units—perform in space, says Travis Beals, Google’s Senior Director, Paradigms of Intelligence, in the announcement. Google has already conducted some testing here on Earth. The TPU chips were able to handle the level of vibration and acceleration that they would see during the launch, and be able to survive a bigger radiation dose than they would receive during a five-year space mission. In addition, the team has tested a cooling system—a combination of heat pipes and radiators—in a thermal vacuum chamber that simulates space.

Read More »

Anthropic, OpenAI Keep Expanding the AI Data Center Map — and the Financing Gets Harder

September has offered one of the clearest pictures yet of what the frontier AI race looks like when translated from models and tokens into physical infrastructure. Anthropic has moved aggressively to lock down dedicated compute in the United States while establishing its first major data center foothold in Australia. OpenAI, meanwhile, has expanded into Malaysia through Nvidia-backed Firmus as the financing behind its much larger infrastructure ambitions continues to grow more complicated. All in all, the developments suggest that competition between the leading AI labs is entering another phase. Securing GPUs remains essential, but the harder problem is increasingly assembling the entire chain around them: land, power, cooling, networks, project finance and counterparties capable of delivering capacity measured in hundreds of megawatts — and increasingly gigawatts. That distinction is important for the data center industry. The AI infrastructure story is no longer simply about projected demand. It is increasingly about which commitments can actually become operating megawatts. Anthropic’s $45 Billion Bet Gets More Concrete The most revealing new detail came not from Anthropic itself, but from Nscale. The Nvidia-backed AI infrastructure provider filed for a U.S. initial public offering on Sept. 18, providing new financial and technical detail around a massive compute agreement first reported in August. Nscale’s SEC filing says it entered four GPU services agreements with Anthropic on Aug. 25 that could generate approximately $44.6 billion in aggregate payments. The agreements call for Nscale to provide Anthropic with dedicated infrastructure built around Nvidia Vera Rubin NVL72 systems at the company’s planned Monarch Compute Campus in Mason County, West Virginia. The deployments are structured in four tranches with multiyear service terms. Reuters previously reported the agreement at roughly $45 billion over six years, covering about 460 MW of compute capacity at Monarch. (The agreement follows Anthropic’s $19 billion, 401-MW

Read More »

Amazon-Generac Deal Puts Backup Power in the AI Infrastructure Spotlight

Amazon has struck a long-term supply agreement with Generac for backup generators supporting its data center buildout, tying one of the cloud industry’s largest infrastructure programs to a manufacturer that has been rapidly expanding into the hyperscale power market. Under the agreement disclosed in a Sept. 16 regulatory filing, Generac expects initial deliveries to Amazon totaling approximately $2.4 billion during 2027 and 2028. The commercial relationship could ultimately involve as much as $8 billion in qualifying generator purchases. The agreement also gives Amazon an equity interest in Generac’s success. Generac issued Amazon.com NV Investment Holdings a warrant to acquire as many as 1.69 million Generac shares at an exercise price of approximately $200.93 per share. About 308,000 shares vested when the agreement was signed, with additional tranches vesting as Amazon’s purchases increase. The warrant remains exercisable through September 2033. The distinction is important: the frequently cited $8 billion figure represents potential cumulative payments by Amazon for backup power generators, rather than an $8 billion equity investment. The maximum warrant covers roughly $340 million of Generac stock at the stated exercise price. CNBC first highlighted the equity component of the transaction, reporting that Generac shares surged more than 40% in extended trading following disclosure of the agreement. The shares ultimately gained about 18% during the following regular trading session. Generac Was Already Scaling for the Data Center Market For the data center industry, however, the more consequential part of the transaction may be the size and duration of Amazon’s equipment commitment. Generac has spent much of the past two years positioning itself as an alternative large-megawatt generator supplier as AI infrastructure development puts pressure on established power-equipment supply chains. DCF previously examined Generac’s push into hyperscale backup power, including its effort to shorten generator lead times and support campuses requiring hundreds

Read More »

Executive Roundtable: Speed Without Compromise

Matt Vincent is Editor in Chief of Data Center Frontier, where he leads editorial strategy and coverage focused on the infrastructure powering cloud computing, artificial intelligence, and the digital economy. A veteran B2B technology journalist with more than two decades of experience, Vincent specializes in the intersection of data centers, power, cooling, and emerging AI-era infrastructure. Since assuming the EIC role in 2023, he has helped guide Data Center Frontier’s coverage of the industry’s transition into the gigawatt-scale AI era, with a focus on hyperscale development, behind-the-meter power strategies, liquid cooling architectures, and the evolving energy demands of high-density compute, while working closely with the Digital Infrastructure Group at Endeavor Business Media to expand the brand’s analytical and multimedia footprint. Vincent also hosts The Data Center Frontier Show podcast, where he interviews industry leaders across hyperscale, colocation, utilities, and the data center supply chain to examine the technologies and business models reshaping digital infrastructure. Since its inception he serves as Head of Content for the Data Center Frontier Trends Summit. Before becoming Editor in Chief, he served in multiple senior editorial roles across Endeavor Business Media’s digital infrastructure portfolio, with coverage spanning data centers and hyperscale infrastructure, structured cabling and networking, telecom and datacom, IP physical security, and wireless and Pro AV markets. He began his career in 2005 within PennWell’s Advanced Technology Division and later held senior editorial positions supporting brands such as Cabling Installation & Maintenance, Lightwave Online, Broadband Technology Report, and Smart Buildings Technology. Vincent is a frequent moderator, interviewer, and keynote speaker at industry events including the HPC Forum, where he delivers forward-looking analysis on how AI and high-performance computing are reshaping digital infrastructure. He graduated with honors from Indiana University Bloomington with a B.A. in English Literature and Creative Writing and lives in southern New Hampshire with

Read More »

Floating Data Centers Move Toward Infrastructure Scale

Rather than constructing the building sequentially on a conventional site, Samsung can fabricate the floating structure and integrate much of the electrical, mechanical and cooling infrastructure in a shipyard. Site work at the eventual mooring location can proceed simultaneously. This has the potential to compress one of the longest parts of the data center development schedule. Modern shipyards already operate as enormous industrialized manufacturing environments capable of constructing highly complex LNG carriers, offshore production platforms and other structures containing power generation, electrical distribution, piping, controls and mechanical systems. Adding a floating data center effectively applies those capabilities to digital infrastructure. Samsung and Mousterian describe the facility as being fabricated off-site to shipyard standards. Instead of pouring foundations and constructing a data center building around the infrastructure, the facility becomes a manufactured asset that can be transported to its operating location. Samsung has also been building a broader development ecosystem around floating data centers. In June, the shipbuilder signed agreements with Greece-based Capital and Lloyd’s Register covering project development, investment sourcing and regulatory requirements, while LR Advisory is working with Samsung on North American market analysis, infrastructure assessments and commercial feasibility. Samsung also entered a joint development project with Supermicro to validate AI server infrastructure for offshore conditions, where vibration, vessel inclination, salt-laden air and rapid humidity changes can affect equipment reliability and lifespan. Samsung says it will develop positioning-control and salt- and humidity-protection technologies while Supermicro conducts operational verification of AI server infrastructure in river and marine environments. Unlocking Power That Data Centers Can’t Reach Mousterian’s model also addresses perhaps the biggest constraint facing today’s data center industry: power. The facilities are intended to be positioned near existing generation and maritime infrastructure, allowing them to reach electrical capacity that may be difficult to serve through a conventional land-based development. The

Read More »

Roundtable: Redefining Critical Infrastructure

Matt Vincent is Editor in Chief of Data Center Frontier, where he leads editorial strategy and coverage focused on the infrastructure powering cloud computing, artificial intelligence, and the digital economy. A veteran B2B technology journalist with more than two decades of experience, Vincent specializes in the intersection of data centers, power, cooling, and emerging AI-era infrastructure. Since assuming the EIC role in 2023, he has helped guide Data Center Frontier’s coverage of the industry’s transition into the gigawatt-scale AI era, with a focus on hyperscale development, behind-the-meter power strategies, liquid cooling architectures, and the evolving energy demands of high-density compute, while working closely with the Digital Infrastructure Group at Endeavor Business Media to expand the brand’s analytical and multimedia footprint. Vincent also hosts The Data Center Frontier Show podcast, where he interviews industry leaders across hyperscale, colocation, utilities, and the data center supply chain to examine the technologies and business models reshaping digital infrastructure. Since its inception he serves as Head of Content for the Data Center Frontier Trends Summit. Before becoming Editor in Chief, he served in multiple senior editorial roles across Endeavor Business Media’s digital infrastructure portfolio, with coverage spanning data centers and hyperscale infrastructure, structured cabling and networking, telecom and datacom, IP physical security, and wireless and Pro AV markets. He began his career in 2005 within PennWell’s Advanced Technology Division and later held senior editorial positions supporting brands such as Cabling Installation & Maintenance, Lightwave Online, Broadband Technology Report, and Smart Buildings Technology. Vincent is a frequent moderator, interviewer, and keynote speaker at industry events including the HPC Forum, where he delivers forward-looking analysis on how AI and high-performance computing are reshaping digital infrastructure. He graduated with honors from Indiana University Bloomington with a B.A. in English Literature and Creative Writing and lives in southern New Hampshire with

Read More »

Microsoft will invest $80B in AI data centers in fiscal 2025

And Microsoft isn’t the only one that is ramping up its investments into AI-enabled data centers. Rival cloud service providers are all investing in either upgrading or opening new data centers to capture a larger chunk of business from developers and users of large language models (LLMs).  In a report published in October 2024, Bloomberg Intelligence estimated that demand for generative AI would push Microsoft, AWS, Google, Oracle, Meta, and Apple would between them devote $200 billion to capex in 2025, up from $110 billion in 2023. Microsoft is one of the biggest spenders, followed closely by Google and AWS, Bloomberg Intelligence said. Its estimate of Microsoft’s capital spending on AI, at $62.4 billion for calendar 2025, is lower than Smith’s claim that the company will invest $80 billion in the fiscal year to June 30, 2025. Both figures, though, are way higher than Microsoft’s 2020 capital expenditure of “just” $17.6 billion. The majority of the increased spending is tied to cloud services and the expansion of AI infrastructure needed to provide compute capacity for OpenAI workloads. Separately, last October Amazon CEO Andy Jassy said his company planned total capex spend of $75 billion in 2024 and even more in 2025, with much of it going to AWS, its cloud computing division.

Read More »

John Deere unveils more autonomous farm machines to address skill labor shortage

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More Self-driving tractors might be the path to self-driving cars. John Deere has revealed a new line of autonomous machines and tech across agriculture, construction and commercial landscaping. The Moline, Illinois-based John Deere has been in business for 187 years, yet it’s been a regular as a non-tech company showing off technology at the big tech trade show in Las Vegas and is back at CES 2025 with more autonomous tractors and other vehicles. This is not something we usually cover, but John Deere has a lot of data that is interesting in the big picture of tech. The message from the company is that there aren’t enough skilled farm laborers to do the work that its customers need. It’s been a challenge for most of the last two decades, said Jahmy Hindman, CTO at John Deere, in a briefing. Much of the tech will come this fall and after that. He noted that the average farmer in the U.S. is over 58 and works 12 to 18 hours a day to grow food for us. And he said the American Farm Bureau Federation estimates there are roughly 2.4 million farm jobs that need to be filled annually; and the agricultural work force continues to shrink. (This is my hint to the anti-immigration crowd). John Deere’s autonomous 9RX Tractor. Farmers can oversee it using an app. While each of these industries experiences their own set of challenges, a commonality across all is skilled labor availability. In construction, about 80% percent of contractors struggle to find skilled labor. And in commercial landscaping, 86% of landscaping business owners can’t find labor to fill open positions, he said. “They have to figure out how to do

Read More »

2025 playbook for enterprise AI success, from agents to evals

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More 2025 is poised to be a pivotal year for enterprise AI. The past year has seen rapid innovation, and this year will see the same. This has made it more critical than ever to revisit your AI strategy to stay competitive and create value for your customers. From scaling AI agents to optimizing costs, here are the five critical areas enterprises should prioritize for their AI strategy this year. 1. Agents: the next generation of automation AI agents are no longer theoretical. In 2025, they’re indispensable tools for enterprises looking to streamline operations and enhance customer interactions. Unlike traditional software, agents powered by large language models (LLMs) can make nuanced decisions, navigate complex multi-step tasks, and integrate seamlessly with tools and APIs. At the start of 2024, agents were not ready for prime time, making frustrating mistakes like hallucinating URLs. They started getting better as frontier large language models themselves improved. “Let me put it this way,” said Sam Witteveen, cofounder of Red Dragon, a company that develops agents for companies, and that recently reviewed the 48 agents it built last year. “Interestingly, the ones that we built at the start of the year, a lot of those worked way better at the end of the year just because the models got better.” Witteveen shared this in the video podcast we filmed to discuss these five big trends in detail. Models are getting better and hallucinating less, and they’re also being trained to do agentic tasks. Another feature that the model providers are researching is a way to use the LLM as a judge, and as models get cheaper (something we’ll cover below), companies can use three or more models to

Read More »

OpenAI’s red teaming innovations define new essentials for security leaders in the AI era

Join our daily and weekly newsletters for the latest updates and exclusive content on industry-leading AI coverage. Learn More OpenAI has taken a more aggressive approach to red teaming than its AI competitors, demonstrating its security teams’ advanced capabilities in two areas: multi-step reinforcement and external red teaming. OpenAI recently released two papers that set a new competitive standard for improving the quality, reliability and safety of AI models in these two techniques and more. The first paper, “OpenAI’s Approach to External Red Teaming for AI Models and Systems,” reports that specialized teams outside the company have proven effective in uncovering vulnerabilities that might otherwise have made it into a released model because in-house testing techniques may have missed them. In the second paper, “Diverse and Effective Red Teaming with Auto-Generated Rewards and Multi-Step Reinforcement Learning,” OpenAI introduces an automated framework that relies on iterative reinforcement learning to generate a broad spectrum of novel, wide-ranging attacks. Going all-in on red teaming pays practical, competitive dividends It’s encouraging to see competitive intensity in red teaming growing among AI companies. When Anthropic released its AI red team guidelines in June of last year, it joined AI providers including Google, Microsoft, Nvidia, OpenAI, and even the U.S.’s National Institute of Standards and Technology (NIST), which all had released red teaming frameworks. Investing heavily in red teaming yields tangible benefits for security leaders in any organization. OpenAI’s paper on external red teaming provides a detailed analysis of how the company strives to create specialized external teams that include cybersecurity and subject matter experts. The goal is to see if knowledgeable external teams can defeat models’ security perimeters and find gaps in their security, biases and controls that prompt-based testing couldn’t find. What makes OpenAI’s recent papers noteworthy is how well they define using human-in-the-middle

Read More »