Industry Insights
Are Utility Sales Trending Up?
Just the other day, I saw a news article that raised the question of whether utilities' sales are trending up. Considering the reports from EIA and other agencies indicating flat sales, the headline caught my attention. As a forecaster who helps utilities peer into the future, I am very interested in other opinions – especially ones that challenge my assumptions.
The article cites two large utilities with 2013 weather normalized sales growth rates of 1.6% and 1.7%. While the article was fair in raising the question and not asserting a new trend in electric sales, anyone reading the article would and should pause to consider the author’s assumptions. My theories are based on our annual surveys and discussions within the industry. Itron’s two recent surveys show weighted average normalized energy sales growth of 0.22% and 0.33% in 2012 and 2013 respectively.
So, do the 1.6% and 1.7% numbers indicate a change in trend? How do I reconcile those numbers with my assumptions? I decided to investigate quickly.
While the 2014 Itron survey results show an average growth rate for 2013 of 0.33%, is it uncommon for a utility to show a 1.7% growth rate? Instead of looking at the average, I built a distribution of the reported growth rates as shown below.
The distribution shows that 30% of the 71 respondents have 2013 growth rates between 0% and 1%. However, 21% claim growth between 1% and 2%. In fact, 1.7% is within a standard deviation of the 0.3% mean. With the article's stated sample size of two utilities, their growth rates are well within the range of possible results.
I certainly do not fault the article for citing only two utility numbers. These growth rates are difficult to obtain and we spend a significant amount of time working on the benchmarking survey. Hopefully, the annual surveys are valuable to you (our customers) and you continue to actively participate in them.
But, the lessons are clear to all of us forecasters:
(1) one number does not make a trend,
(2) every utility is different, and
(3) sales growth rates are a hot topic within our industry.
And, it’s always good to challenge our assumptions.
By the way, don’t forget to register for our brown bag session on the 2014 survey results.
The article cites two large utilities with 2013 weather normalized sales growth rates of 1.6% and 1.7%. While the article was fair in raising the question and not asserting a new trend in electric sales, anyone reading the article would and should pause to consider the author’s assumptions. My theories are based on our annual surveys and discussions within the industry. Itron’s two recent surveys show weighted average normalized energy sales growth of 0.22% and 0.33% in 2012 and 2013 respectively.
So, do the 1.6% and 1.7% numbers indicate a change in trend? How do I reconcile those numbers with my assumptions? I decided to investigate quickly.
While the 2014 Itron survey results show an average growth rate for 2013 of 0.33%, is it uncommon for a utility to show a 1.7% growth rate? Instead of looking at the average, I built a distribution of the reported growth rates as shown below.
The distribution shows that 30% of the 71 respondents have 2013 growth rates between 0% and 1%. However, 21% claim growth between 1% and 2%. In fact, 1.7% is within a standard deviation of the 0.3% mean. With the article's stated sample size of two utilities, their growth rates are well within the range of possible results.
I certainly do not fault the article for citing only two utility numbers. These growth rates are difficult to obtain and we spend a significant amount of time working on the benchmarking survey. Hopefully, the annual surveys are valuable to you (our customers) and you continue to actively participate in them.
But, the lessons are clear to all of us forecasters:
(1) one number does not make a trend,
(2) every utility is different, and
(3) sales growth rates are a hot topic within our industry.
And, it’s always good to challenge our assumptions.
By the way, don’t forget to register for our brown bag session on the 2014 survey results.
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>
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>