Forecasting
Developing the Peak Day Dataset Using MetrixLT
I think of MetrixLT as a fancy load shape manipulator and calculator. While the software was originally designed to calibrate load shapes to monthly energy forecasts, newer features of MetrixLT allow users to calculate normal weather (including Rank and Average methods), add and subtract load shapes, and perform top-down calibrations of hourly loads. Within the myriad of features, I’ve found a hidden gem that helps me forecast peak loads. MetrixLT builds my monthly peak database.
The foundation for the monthly peak model is historic monthly peaks and the weather associated with those peaks. Monthly peaks are obtained from historic hourly temperatures. Once the peaks are identified, the dates of the peaks must be used to obtain the associated weather. Instead of culling through complex Excel formulas, MetrixLT creates this database from daily peak data in a single transformation.
An example of the results is shown below. In this figure, the January 2005 peak is 900 MW. The temperature that produced the 900 MW peak is 16.42 degrees. Likewise, the temperature on the day before peak is 33.13 degrees.
While this figure shows the temperature and prior day temperatures associated with the monthly peak, MetrixLT can provide any daily condition associated with the peak, such as dew point, wind speed or demand response estimates.
To create a monthly peak database, use the Frequency Transformation in MetrixLT. This transformation converts data of a different periodicity into monthly data. Begin by creating the Frequency Transformation and setting the frequency to “Monthly” as shown below.
Within this Transformation, insert variables you want shown in the peak database. In this example, three variables are included.
1. Monthly Peak. The monthly peak value is obtained by creating the variable and placing the daily peak series in the “Source” box. Assign the method “Maximum” and Transform will return the monthly peak value.
2. Temperature on the day of the Peak. The temperature on the peak day is obtained by creating another variable and placing the daily temperature series in the “Source” box. Assign the “Coincident Max” method and insert the daily peak series in the Coincident Max box as shown below. This transformation will return the daily temperature coincident with the monthly peak value.
3. Temperature on the day before the Peak. The temperature on the day before the peak is obtained with another variable. In this variable, assign the daily temperature series as the “Source”, select the “Coincident Max” method, and assign the daily peak series in the “Coincident Max” box. For this variable, assign “Coin Lag” the value of “1”. This transformation returns the daily temperature coincident with the monthly peak value, lagged one day.
While the three variables in this example result in the database shown at the top, the example is easily extended to obtain temperatures two days before the peak or daily wind speed on the peak day by defining more variables. Once all the desired variables are included in the monthly peak database, simply export the data, import the values into MetrixND, and build the monthly peak model.
The foundation for the monthly peak model is historic monthly peaks and the weather associated with those peaks. Monthly peaks are obtained from historic hourly temperatures. Once the peaks are identified, the dates of the peaks must be used to obtain the associated weather. Instead of culling through complex Excel formulas, MetrixLT creates this database from daily peak data in a single transformation.
An example of the results is shown below. In this figure, the January 2005 peak is 900 MW. The temperature that produced the 900 MW peak is 16.42 degrees. Likewise, the temperature on the day before peak is 33.13 degrees.
While this figure shows the temperature and prior day temperatures associated with the monthly peak, MetrixLT can provide any daily condition associated with the peak, such as dew point, wind speed or demand response estimates.
To create a monthly peak database, use the Frequency Transformation in MetrixLT. This transformation converts data of a different periodicity into monthly data. Begin by creating the Frequency Transformation and setting the frequency to “Monthly” as shown below.
Within this Transformation, insert variables you want shown in the peak database. In this example, three variables are included.
1. Monthly Peak. The monthly peak value is obtained by creating the variable and placing the daily peak series in the “Source” box. Assign the method “Maximum” and Transform will return the monthly peak value.
2. Temperature on the day of the Peak. The temperature on the peak day is obtained by creating another variable and placing the daily temperature series in the “Source” box. Assign the “Coincident Max” method and insert the daily peak series in the Coincident Max box as shown below. This transformation will return the daily temperature coincident with the monthly peak value.
3. Temperature on the day before the Peak. The temperature on the day before the peak is obtained with another variable. In this variable, assign the daily temperature series as the “Source”, select the “Coincident Max” method, and assign the daily peak series in the “Coincident Max” box. For this variable, assign “Coin Lag” the value of “1”. This transformation returns the daily temperature coincident with the monthly peak value, lagged one day.
While the three variables in this example result in the database shown at the top, the example is easily extended to obtain temperatures two days before the peak or daily wind speed on the peak day by defining more variables. Once all the desired variables are included in the monthly peak database, simply export the data, import the values into MetrixND, and build the monthly peak model.
Kesalahan terjadi ketika Memproses Template.
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>