The Weather Normalization mechanism
Weather Normalization measures the impact of weather on energy consumption. Learn more details by reading this article!
Weather Normalization measures the impact of weather on energy consumption. Because weather patterns vary widely day-to-day and year-to-year, weather for a given season may be colder or warmer. The used energy is directly dependent on how cold it is. Comparing the weather or energy consumption from one year to the next would provide only the change between those years. However, when energy consumption is “Weather Normalized” you are comparing your energy consumption over a normal weather period. Weather normalization adjusts energy usage so it can be compared to the energy used in other years over a longer period.
The Weather Normalization panel can be accessed from the toolbar of the Site detailed view mode, by clicking the Weather Normalization button.
As the Weather Normalisation has been implemented based on the VDI 3807 norm, the calculation formula is:
where:
z = number of measured heating days of the heating season, based on the individual heating limit;
thg = heating limit;
ta= average outdoor temperature of each heating day.
If the temperature is collected in 15-minute periods or interpolated to such interval, the Heating Degree Days (HDD) should be calculated directly by the function:
where:
t = measured air temperature;
r = room temperature;
l = temperature limit.
Public weather data
The public weather data should be collected from a certified weather service using a specific adapter. The weather signals should be organized in a way easy for the user to select when setting up the weather normalization. Only the temperature signal should be collected it should be stored as an adapter signal.
The Degree Days calculation should be done via a virtual signal that is linked only to the source temperature signal chosen for each site. Each site should have its Degree Days signals and each signal should be part of a Degree Days Signal Type/KPI.
Implementation | |
---|---|
Calculation | IIf(IsLeaf([Site].[Site].CurrentMember), ([Measures].[Sum], [Signal].[Type].&[1]) * DIVIDE(Avg( { ParallelPeriod ([Time].[Calendar].[Year], 01, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 02, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 03, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 04, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 05, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 06, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 07, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 08, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 09, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 10, [Time].[Calendar].CurrentMember)} * [Signal].[Type].&[11], [Measures].[Sum]), ([Measures].[Sum], [Signal].[Type].&[11])), RollUpChildren([Site].[Site].CurrentMember,'+')) |
Unit | kWh |
Category | Electricity |
Sources |
|
Sample Query:
WITH MEMBER [Consumption] AS ([Measures].[Sum], [Signal].[Type].[Heating]) MEMBER [HDD] AS ([Measures].[Sum], [Signal].[Type].[Heating Degree Days]) MEMBER [Avg HDD] AS Avg( { ParallelPeriod ([Time].[Calendar].[Year], 01, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 02, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 03, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 04, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 05, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 06, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 07, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 08, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 09, [Time].[Calendar].CurrentMember), ParallelPeriod ([Time].[Calendar].[Year], 10, [Time].[Calendar].CurrentMember)} * [Signal].[Type].[Heating Degree Days], [Measures].[Sum]) MEMBER [Ratio] AS DIVIDE([Avg HDD], [HDD]) MEMBER [Normalized] AS IIf(IsLeaf([Site].[Site].CurrentMember), [Consumption] * [Ratio], RollUpChildren([Site].[Site].CurrentMember,'+')) SELECT NON EMPTY { [Normalized] } ON COLUMNS, NON EMPTY [Time].[Month].[Month] ON ROWS FROM ( SELECT [Time Zone].[Time Zone].&[98] ON COLUMNS FROM ( SELECT [Time].[Year].&[2012-01-01T00:00:00] ON COLUMNS FROM [WEBfactory DWH] ) )