Forecasting

Itron's 2021 Forecasting Benchmarking Survey & COVID-19 Impact

October 11, 2021

COVID-19’s impact on energy consumption is not a secret. Since the pandemic began, we’ve watched electric sales drop and slowly recover (but not fully). Itron has documented the COVID-19 system level impacts in a series of memos, read the last blog here. 

But what about the class-level impacts?  Anecdotally, we’ve built stories about residential sales increasing from more office employees working from home. We suspect declining commercial and industrial sales from closed stores, empty buildings and reduced manufacturing output. While we may have seen the class-level impacts on our individual systems, are these impacts consistent across all systems? And how large are these impacts?

This year, Itron’s 2021 Forecasting Benchmarking Survey included measuring the COVID-19 impacts on 2020 class sales. For the first time since COVID-19 began, class-level impacts are reported for over 90 participating energy companies. The 2020 average class-level impacts on electric and natural gas sales are shown below.

  • Residential Sales
    • Residential electric sales increased between 2.91% and 3.53%.
    • Residential natural gas sales increased between 0.97% and 1.12%.
  • Commercial Sales
    • Commercial electric sales decreased between 5.15% and 5.31%.
    • Commercial natural gas sales decreased between 3.21% and 4.00%.
  • Industrial Sales
    • Industrial electric sales decreased between 1.24% and 3.67%.
    • Industrial natural gas sales decreased between 7.39% and 8.88%.

 

The results confirm our anecdotal understanding of the sales impact with many utilities showing similar results. Of course, the range of impacts varies based on the composition of each companies’ customer mix, but the overall patterns are consistent – residential sales are up, and commercial/industrial sales are down.

Looking into 2021 and 2022, the key question is when, or if, the sales will recover. The survey responses indicated that a full recovery to pre-pandemic sales levels is not likely in 2021 and estimates of the recovery’s timing is challenging at best.

With uncertainty surrounding the recovery, Itron is committed to continuing its research on the COVID-19 effects. We hope that all  survey participants are also committed to sharing data to better understand industry-wide growth patterns.

If you didn’t participant in this year’s survey and want to participate next year, send us an email at forecasting@itron.com and we will put your name on the list.

Si è verificato un errore nell'elaborarazione del modello.
The following has evaluated to null or missing:
==> authorContent.contentFields  [in template "44616#44647#114455" at line 9, column 17]

----
Tip: It's the step after the last dot that caused this error, not those before it.
----
Tip: If the failing expression is known to legally refer to something that's sometimes null or missing, either specify a default value like myOptionalVar!myDefault, or use <#if myOptionalVar??>when-present<#else>when-missing</#if>. (These only cover the last step of the expression; to cover the whole expression, use parenthesis: (myOptionalVar.foo)!myDefault, (myOptionalVar.foo)??
----

----
FTL stack trace ("~" means nesting-related):
	- Failed at: contentFields = authorContent.content...  [in template "44616#44647#114455" at line 9, column 1]
----
1<#assign 
2	webContentData = jsonFactoryUtil.createJSONObject(author.getData()) 
3	classPK = webContentData.classPK 
4/> 
5 
6<#assign 
7authorContent = restClient.get("/headless-delivery/v1.0/structured-contents/" + classPK + "?fields=contentFields%2CfriendlyUrlPath%2CtaxonomyCategoryBriefs") 
8contentFields = authorContent.contentFields 
9categories=authorContent.taxonomyCategoryBriefs 
10authorContentData = jsonFactoryUtil.createJSONObject(authorContent) 
11friendlyURL = authorContentData.friendlyUrlPath 
12authorCategoryId = "0" 
13/> 
14 
15<#list contentFields as contentField > 
16   <#assign  
17	 contentFieldData = jsonFactoryUtil.createJSONObject(contentField)  
18	 name = contentField.name 
19	 /> 
20	 <#if name == 'authorImage'> 
21	    <#if (contentField.contentFieldValue.image)??> 
22	        <#assign authorImageURL = contentField.contentFieldValue.image.contentUrl />	 
23			</#if> 
24	 </#if> 
25	 <#if name == 'authorName'> 
26	    <#assign authorName = contentField.contentFieldValue.data /> 
27			<#list categories as category > 
28         <#if authorName == category.taxonomyCategoryName> 
29				     <#assign authorCategoryId = category.taxonomyCategoryId /> 
30				 </#if> 
31      </#list> 
32	 </#if> 
33	 <#if name == 'authorDescription'> 
34	    <#assign authorDescription = contentField.contentFieldValue.data /> 
35			 
36	 </#if> 
37	  
38	 <#if name == 'authorJobTitle'> 
39	    <#assign authorJobTitle = contentField.contentFieldValue.data /> 
40			 
41	 </#if> 
42 
43</#list> 
44 
45<div class="blog-author-info"> 
46	<#if authorImageURL??> 
47		<img class="blog-author-img" id="author-image" src="${authorImageURL}" alt="" /> 
48	</#if> 
49	<#if authorName??> 
50		<#if authorName != ""> 
51			<p class="blog-author-name">By <a id="author-detail-page" href="/w/${friendlyURL}?filter_category_552298=${authorCategoryId}"><span id="author-full-name">${authorName}</span></a></p> 
52			<hr /> 
53		</#if> 
54	</#if> 
55	<#if authorJobTitle??> 
56		<#if authorJobTitle != ""> 
57			<p class="blog-author-title" id="author-job-title" >${authorJobTitle}</p> 
58			<hr /> 
59		</#if> 
60	</#if> 
61	<#if authorDescription??> 
62		<#if authorDescription != "" && authorDescription != "null" > 
63			<p class="blog-author-desc" id="author-job-desc">${authorDescription}</p> 
64			<hr /> 
65		</#if> 
66	</#if> 
67</div>