Forecasting

What are Weather Groups?

October 10, 2018

If you’re a user of Itron’s Automated Demand Forecasting System, MetrixIDR, then chances are you’ve probably seen the words “Weather Groups” at some point while navigating the software. Maybe you’ve asked yourself, “What the heck are Weather Groups?” Well, simply put, Weather Groups are a method of configuring load forecast models to use more than one source of weather data. This can be especially useful not only for letting a model determine the weighting on different sources of weather data (saving you the hassle of doing the analysis yourself), but also for providing a quick avenue for bringing all the data into a single custom MetrixND model in case you feel compelled to do the analysis yourself.

So how does one go about configuring such an awesome feature? Well, it’s pretty easy, but you need to know what you’re doing. First, you must have weather data for at least two Weather Stations in the system. Once you have that, you are ready to configure the Weather Regions. Weather Regions determine how the weather data will get populated in the Custom MetrixND Model. They can be individual Weather Stations or Weather Zones and can be given any name you’d like (e.g., coastal and inland). To create a Weather Region, go to Tools -> Weather Configuration, and on the Weather Regions tab, simply press the green plus sign in the top-left corner and a record will be inserted.



Once the Weather Regions have been defined, you’re ready to configure the Weather Groups. Go to the Weather Groups tab and press the green plus sign to add a Weather Group. Once a Weather Group has been defined, the next step is to assign the appropriate Weather Regions to the Weather Group (note: you will also need to select a Weather Station or Zone as the source of sunrise and sunset times via the drop-down menu under the Sun Parameters Weather field).



Once the Weather Regions have been assigned to the Weather Group, you then need to select the relevant Weather Stations and/or Weather Zones with which to populate each respective Weather Region. That is, you’re telling MetrixIDR which data source you want to flow to the configured Weather Regions. To do so, select the stations/zones from the list via the drop-down menu in the Weather ID field.



When that’s all completed, and you’ve saved your edits, you can then assign the Weather Group as the source of weather data to a model that uses a custom MetrixND model template. Go to the Models Module, open the Model Properties for an applicable model, and from the General Tab, assign the Weather Group as the weather data source.



There’s just one caveat—the custom MetrixND model template must be configured in a certain style to receive the Weather Group data. That is, data tables in the template that get populated with the corresponding weather concept data must be prefixed with the name of the Weather Regions (e.g., CoastalDryBulb, CoastalDewPoint, CoastalWindSpeed, InlandDryBulb, etc.).



This can easily be done by taking an existing template, copy-pasting the weather data tables, and renaming them. You can then import the template into MetrixIDR, assign it to the model and export it to a MetrixND file with estimation data to do your analysis and/or construct a new model specification.

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>