What | nameofinstance.xml |
---|---|
Description | Configuration for the Report module |
schema location |
Related pages
Table of Contents
The role of the report module is to generate reports of the forecast results in a form that can easily be displayed without using DELFT-FEWS on a web server. Reports that are produced by DELFT-FEWS serve two purposes:
Reports are used to present the forecast result data in a fixed, user defined, format. The format of a report can be easily customized by a user and stored in a template.
Some functions of the DELFT-FEWS use the report component to present the results. For example the critical condition lookup tables defined in for example coastal forecasting only produce index time series. Without post-processing of these indices, a user can never see what is happening in his coastal system. The report component will therefore also be used to interpret the indices and transform these into information that a user can understand. The ValueAttributeMaps (see Regional Configuration) define how these indices are to be transformed to understandable strings and/or icons.
Reports generated can be exported directly to the file system (for viewing through the web server) or they can be stored in the database. The report export module may then be used to exporting selected reports when required to the web server.
The report template uses tags as placeholders to identify the location of objects in the report. In the following table the available tags are described. This page gives an overview of available tags. It also gives details on how defined declarations are to be used in the reports- allowing layout of tables etc. to be defined.
For many report elements, the MC ID should be set in the global.properties in "REPORTS_LEFTCOLMCID" (REPORTS_LEFTCOLMCID=none for Stand Alone).
When available as configuration on the file system, the name of the XML file for configuring an instance of the correlation module called for example Report_Coastal_Forecast may be:
Report_Coastal_Forecast 1.00 default.xml
Report_Coastal_Forecast | File name for the Report_Coastal_Forecast configuration. |
1.00 | Version number |
default | Flag to indicate the version is the default configuration (otherwise omitted). |
Figure 89 Elements of the Reports configuration
Root element for declaring variables and formats to be used in making the report.
Figure Elements of the declarations configuration
The DefineGlobal element can be used to enter some information that is valid for all reports. Multiple DefineGlobal elements may be defined, as long as the ID attribute is kept unique.
Related TAG: $DEFINITION(definitionId)$
Formatting instructions for a specific item in the report.
Root directory of the directory containing report templates.
Root directory to which the all reports are to be exported. This directory is typically the root directory of the web server
Note: A global.properties tag may be useful to define this directory
Root directory to which the current reports are to be exported. This directory is relative to the reportsRootsDir
Boolean option to determine if reports are to be written to the file system on creation. If set to false reports will be stored in the Reports table in the database, pending export through the ReportExport module.
When temporary the reports are only available for the report export module executed in the same run. The reports are not saved to the database but instead to a temp file that is deleted at the end of the run
Root element for defining the data to be included in the report.
Figure 91 Elements of the Report configuration
Input timeseriesSets for the report. All timeSeriesSets that are used in the report must be defined here, both for carts and for tables. See Transformation Module for details on defining an inputVariable element.
Reference to an external file that must be copied with the report. The file will be copied to the same location as the report, with the correct filename inserted at the place of the tag. This can be used for copying images.
Related TAG: $FILERESOURCE(resourceId)$
In the Report configuration file a <fileResource id="Plot1">Plot1.svg</fileResource> need t be added with an id. The fileresource file "Plot1.svg" is a file that need to be included in the \Config\ReportImageFiles\ folder.
In the report template file a TAG need to be included with the fileResource ID: <img src="$FILERESOURCE(Plot1)$">
In the Chart element the variableId's to be used for one or more charts are defined. The Chart ID that is defined is referenced in the TAG.
Related TAG: $CHART(chartId)$
In the Summary element the variableId's are specified that are used to create the summary information. The OverlayFormat of the SummaryFormat determines what is shown on the map.
Related TAG: $SUMMARY(summaryId)$
In the Table element the variableId's are specified that are used to create a table. The TableFormat controls how the table is formatted, i.e. the row and column information and how the data is displayed in the map.
Related TAG: $TABLE(tableId)$
See for more information Tables (Overview) below.
The Status element links a Status ID that is referenced in the STATUS TAG to a Status Format ID.
Related TAG: $STATUS(statusId)$
Template file name to be used for the report.
Optional output subdirectory for this report.
If singleLocation is true, then outputSubDir can contain location attribute ids, e.g. "H_ (BASIN)", where tags between "@" signs refer to location attributes that are defined in the locationSets config file. These tags will be replaced with the corresponding attribute values of the location of the report. These values can be different for different locations. See 22 Locations and attributes defined in CSV files, Shape-DBF files or external tables for more information. If required to use a "@" sign in this element without using locationAttributes, then need to add an extra escape character "@" before each "@" sign. In other words "@@" is replaced with a single "@" sign.
Output file name for this report.
The following tags can be used to customize the file output name:
If singleLocation is true, then can use tag %LOCATIONID% here, which will be replaced with the id of the location of the report. If singleLocation is true, and the %LOCATIONID% tag is not present, then a "_" sign and the id of the location of the report will be inserted automatically just before the "." sign in the filename.
Additionally, if singleLocation is true, then outputFileName can contain location attribute ids, e.g. "H_ (BASIN)", where tags between "@" signs refer to location attributes that are defined in the locationSets config file. These tags will be replaced with the corresponding attribute values of the location of the report. These values can be different for different locations. See 22 Locations and attributes defined in CSV files, Shape-DBF files or external tables for more information. If required to use a "@" sign in this element without using locationAttributes, then need to add an extra escape character "@" before each "@" sign. In other words "@@" is replaced with a single "@" sign.
The TIMESERIES_POSTFIX tag will be replaced by the minimum date of the configured timeSeries in the report. If no timeSeries have been configured, the system date will be used. An optional dateFormat id can be specified. For example: %TIMESERIES_POSTFIX(dateFormatId)% where dateFormatId is the id of a dateFormat as specified in the reports declarations. If no dateFormatId is passed, the default date format ddmmyyyym will be used.
The CURRENTTIME tag will be replaced by the current system time. An optional dateFormat id can be specified (see TIMESERIES_POSTFIX).
The TIMEZERO tag will be replaced by the minimum T0 of the timeSeries configured by the reportVariableId. If no parameter is configured, T0 of the task run will be used. The reportVariableId is optional.
An optional dateFormat id can be specified (see TIMESERIES_POSTFIX).
N.B.: Be careful in specifying date formats that are compatible with the filesystem. For example and : in the dateformat will not be compatible with the windows filesystem.
The TIMESTEP tag will be replaced by the timestep of a spatialPlotSnapshots snapshot. An optional dateFormat id can be specified. For example
<snapshot id="Waterlevel_0"> <relativeTime unit="hour" value="0"/> <fileName>Report.EAM.Waterlevel.FC_%TIMESTEP(df1)%</fileName> </snapshot> |
The DefineLocal element can be used to enter some information that is valid for a single report. Multiple DefineLocal elements may be defined, as long as the ID attribute is kept unique.
A special case of the DefineLocal attribute is when the DefineLocalID is the same as a previously DefineGlobalID. In this case the DefineLocal overrides the setting of the DefineGlobal. This is valid only for the report being configured, not for any other configured reports in the same configuration file.
Related TAG: $DEFINITION(definitionId)$
The template function tag $DEFINITION(defineLocalId)$ will be replaced with the value of the defineLocal element with the corresponding id.
If singleLocation is true, then the value of a defineLocal element can contain location attribute ids, e.g. "H_ (BASIN)", where tags between "@" signs refer to location attributes that are defined in the locationSets config file. These tags will be replaced with the corresponding attribute values of the location of the report. These values can be different for different locations. See 22 Locations and attributes defined in CSV files, Shape-DBF files or external tables for more information. If required to use a "@" sign in this element without using locationAttributes, then need to add an extra escape character "@" before each "@" sign. In other words "@@" is replaced with a single "@" sign.
Charts can be used for visualizing timeseries. The charts which can be added to html-reports look more or less the same as in the TimeSeries Display. The configuration is simular to display groups. Charts are being created as (individual) *.png files.
Figure 92 Example of a chart (*.png file)
In the Chart element the variableId's to be used for one or more charts are defined. The Chart ID that is defined is referenced in the TAG.
Related TAG: $CHART(chartId)$
Chart should be configured according the following schema definition.
Figure 93 Chart definition according the ChartComplexType (reports.xsd).
It is possible to have two y-axis visible in the same plot. This can be done by having multiple timeseries where some are assigned to the left y axis and some to the right y axis, or by having a timeseries on the left y axis with an assigned rating curve on the right y axis. So every timeseries plot (also in reports) will have a mandatory left y axis to which a timeseries is assigned and an optional right y axis to which a timeseries or rating curve is assigned.
Both left y axis and right y axis can be customized using <leftAxis> and <rightAxis> configuration elements. Note that <leftAxis> configuration is used only if at least one time series is attached to the left axis. The same goes for the <rightAxis>.
The display of threshold lines are supported for one y axis. But there can be threshold lines for either the left or the right y axis, but not both. Note that further constraints on what thresholds are displayed is possible in the reports schema.
The images configured in <plotBackgroundReportImage> and <plotForegroundReportImage> should be included in the config folder ReportImageFiles. The images are resized to fill the whole plot. The foreground image should be transparent. Below an example of the plot with the background image.
To assign a timeseries to the left or right y axis use the <axis> element. This element is optional and leaving it out will assign it (default) to the left axis. Please note that at least one timeseries should be on the left axis (by either settings <axis>left</axis> or leaving the element out and using the default).
Below are two examples of a config and the resulting plot.
| |
When a discharge is displayed, it is possible to show the stage on the right axis. It is not possible to configure this rating on the left axis (and the timeseries on the right axis), since a plot has to have at least one timeseries on the left axis.
The right axis is then not a linear axis but the ticks on the right axis are calculated from the discharge ticks on the left axis.
It is also possible to display the stage and show the discharge on the right axis. The example below shows a display which plots several discharge time series.
The left axis is a linear axis with ticks for the discharge. The right axis is a non-linear axis.
The ticks on the right axis are calculated from the value of the discharge on the left axis by using a rating curve.
Stage/discharge plots support both PI rating curves and deprecated rating curves (deprecated rating curves are ratings obtained from xml file according to the schema ratingCurves.xsd)
Below an configuration and resulting plot. The option reverse is applicable only to deprecated rating curves.
| | |
| |
For adding a chart to a report the following aspects are important to configure:
To display the chart the following attributes need to be defined:
To display lines, dots etc. of a certain timeseries, the reference to this timeseries (variableId) should be mentioned.
Figure 94 chart declaration in the report section
Since 2017.02 FEWS supports the possibility to plot arrows markers showing direction on plots, which for example can be used to create a plot of wind speed where the arrow markers signify the wind direction. The report module also supports such markers. Configuration for these markers must be included in the TimeSeriesDisplayConfig.xml, as described in the Time Series Display Configuration Guide under the "Directional arrow markers" section. In addition, for the direction time series to be available in the report module, the direction time series must be included in the chart in addition to the speed time series. The direction time series is NOT added automatically.
A new feature in FEWS version 2021.01 is the option to create a chart using a direct reference to an existing Display ID in the DisplayGroups configuration. You can configure this using the <DisplayChart/> element like this:
<displayChart id="testDisplayChart" width="400" height="400">
<displayId>testDisplay</displayId>
</displayChart>
Using a classic <chart/> tag you have to reconfigure each chart separately for both the TimeSeriesDisplay on screen and the Report Export. The Benefit of this may be that you can optimize the way the charts look in a printed or web based report, which may have a different resolution, fonts and other features relative to the computer screen. However, if you just want the charts in the report to look the same as they do on the screen, using the existing Display ID in a <displayChart /> element can save you a lot of work. Optionally you can specifiy a fileName and fileFormat, the default output will be named chart00.png, chart001.png etc.
Please note that the displayChart feature currently requires a (default) period to be defined in the timeseriesSets used in the configuration.
Gridded time series can be visualized in a report by means of snapshots. The snap shot is an image depicting the time series spatially.
Spatial plot snapshots are configured according to the following schema definition (sharedTypes.xsd). Since FEWS 2023.01 multiple class breaks are allowed. When multiple class breaks are configured in the best suitable class breaks are automatically chosen
The snapshot is defined as a relative time interval from T0. Optionally a file name may be specified for the snapshot which is used to save the snapshot on the file system. If omitted the file name is generated by the report module. If required the date-time label can be adjusted (font type and font size)
<spatialPlotSnapshots id="spatialPlotSnapshot"> ....... ...... <snapshot id="Snapshot"> <relativeTime value="0" unit="hour"/> <fileName>SnapshotFile</fileName> <dateTimeLabel visible="true"> <font name="SansSerif" size="12" style="bold"/> </dateTimeLabel> </snapshot> </spatialPlotSnapshots> |
A summary is a (background) map which can be added to a report. On top of this map, icons can be displayed. The icons indicate the location or the (warning) status of the monitoring or forecasting point. By adding specific html-functionality to the report template(s), maps can be used to navigate through the reports as well. Clickable areas and locations can be distinguished here. The map itself (as a file) can be any image file. For displaying maps in html-reports the following formats are advised: *.png, *.jpg or *.gif.
In the Summary element the variableId's are specified that are used to create the summary information. The OverlayFormat of the SummaryFormat determines what is shown on the map.
Related TAG: $SUMMARY(summaryId)$
The map itself is an existing file and can be created in several ways. An image processing software package (like Paint Shop Pro) can create a 'screendump' from the map section of The FEWS-Explorer. The FEWS-Explorer itself has some hidden features which can be used as well. The [F12] button can be used for:
The *.png file is named "currentmap.png" and can be found in the /bin directory of your system. The map extent (rectangle containing real world coordinates) can be pasted into any application by choosing Edit-Paste or [Ctrl]+ V. These four coordinates describing the extent of your map picture in world coordinates are needed in the declarations section of the report ModuleConfigFile where you declare this summary.
Remark: Every time you use the above mentioned [F12] features, the png file in the /bin directory and the clipboard is overwritten! In making series of maps you should copy/rename your png file after using this option. You should also paste the map extent in a text editor or spreadsheet directly before repeating the operations with another map extent in the FEWS-Explorer.
In the declarations section of the report ModuleConfigFile, the summaryFormat needs to be declared. The following elements should be specified (see figure).
Figure 95 Summaryformat in the declarations section
Position | Type | Variable |
0 | number | Absolute x position of map image. |
1 | number | Absolute y position of map image. |
2 | number | Image width. |
3 | number | Image height |
4 | number | Image filename. |
5 (optional) | number | Reference to a clickable map (#clickmap by default) |
Note that in case of numbers bigger than 999, it can be that the output may contain unwanted commas, e.g. width 1274 is printed in the reports as 1,274. In order to avoid this, it is recommended to use
{<position>, number, #} |
instead of
{<position>, number} |
.
Position | Type | Variable |
0 | number | Absolute x position of status icon. |
1 | number | Absolute y position of status icon. |
2 | string | Image filename. |
3 | string | Status description. |
4 | string | Location name. |
5 (optional) | string | Html-link for opening a individual html page (forecastlocation.html) |
The mapFormat and overlayFormat elements are configured in html language in which some parts needs to be dynamically filled in. The result will be valid html. The map itself is placed as the bottom 'layer' using the <DIV> tag attributes (index="0") in the mapFormat. Objects defined in the overlayFormat are given higher indices to place them 'on top of the map' and will always be visible (location icons, warning icons).
In both formats, an optional item can be specified.
A clickable map is an image on a html page containing 'hot spots' where the cursor change from the normal 'arrow' to a 'pointing finger' during a mouse-over event. These hot spots can contain hyperlinks to other pages.
mapFormat |
|
---|
When adding the string "usemap="{5}" to the mapFormat (see above) the outcome in the html page will be (printed in bold).
The part describing the hot spots for this map are defined in the [map] tag. In this example below, three areas are 'clickable'. Every hot spots links to another html page in the set of reports.
<img border="0" src="northeast.png" width="503" height="595" *usemap="#clickmap"*> <!-- Here the clickable map starts: SHOULD BE IN THE TEMPLATE --> <map name="clickmap"> <area alt="Northumbria Area" href="northumbria/area_status.html" shape="polygon" coords="138, ...,...,34"> <area alt="Dales Area" href="dales/area_status.html" shape="polygon" coords="266, ..., ..., 285"> <area alt="Ridings Area" href="ridings/area_status.html" shape="polygon" coords="359, ..., ..., 379"> </map> |
To avoid hot spots on a map, do not include the "usemap="{5}" in the mapFormat.
Hyperlinks can be added to the overlayFormat. By using the following option, hyperlinks to individual reports will be added automatically. They will have a fixed (non-configurable) name, "forecastlocation.html" and assuming it is located in a directory with the same name as the locationId compared to where this report with the map is located in the directory structure.
overlayFormat |
|
---|
When adding href="{5}" to the overlayFormat (at that location) a hyperlink is being added to the icon placed on the map. In html it will look like this.
<!-- map --> <div style="TOP:160px;LEFT:5px;position:absolute;Z-index:0"> <img border="0" src="derwent.png" width="503" height="578" usemap="#clickmap"> </div> <!-- icons --> <div style="TOP:467px;LEFT:427px;position:absolute;Z-index:1"> <a href="BOYNTN1/forecastlocation.html"><img border="0" src="fluvial_site_data.gif" title="Boyntn1: No threshold exceeded"></a> </div> |
The z-index of a icon is determined by the severity of the thresholdWarningLevel that has been crossed, meaning that the locations with the highest crossed thresholdWarningLevel will always be visible (and not potentially hidden behind other icons). Also, future/predicted crossings have a higher z-index then past/observed crossings. The exact Z index for a historical crossing is equal to the severity level. For a forecast crossing it's equal to the maximum configured severity level plus the severity level.
The overlayFormat element can also contain location attribute ids, e.g. " (BASIN)", where tags between "@" signs refer to location attributes that are defined in the locationSets config file. These tags will be replaced with the corresponding attribute values for each location. These values can be different for different locations. See 22 Locations and attributes defined in CSV files, Shape-DBF files or external tables for more information. If required to use a "@" sign in this element without using locationAttributes, then need to add an extra escape character "@" before each "@" sign. In other words "@@" is replaced with a single "@" sign.
A summary can be added to a report configuration as shown below.
Figure 96 Summary configuration in the reports section
The following elements need to be defined.
Tables are available in different types, see below. The similarity between them is that they are referenced with the same template tag.
In the Table element the variableId's are specified that are used to create a table. The TableFormat controls how the table is formatted, i.e. the row and column information and how the data is displayed in the map.
Related TAG: $TABLE(tableId)$
forecastHistory: historic overview of forecasts.
Tables 3 to 7 have references to cascading style sheets.
See Table above
The rowPerLocationHtmlTable can be configured directly in <report> section, or in the <declarations> section and reffered from the <report> section. This table is a generic table type and contains for each configured location one row with several columns. The data displayed in a particular column are result of the function that is configured for that column. Since 2024.01 also htmlColumn’s can be configured.
For each column the following elements can be configured:
For each htmlColumn the following elements can be configured:
These elements currently support the following functions:
The existing report functions, that are also used in html-templates, can be configured in the columns. For example MAXVALUE(variableId; numberFormat) or LASTVALUETIME(variableId; dateFormat).
Furthermore the following functions are available:
Please note: If you configure any THRESHOLDCROSSING function in a column, then only the locations with threshold crossing will be printed by default. |
<report> <locationSetId>AllLocations</locationSetId> <rowPerLocationHtmlTable id="tableA" tableStyle="tableStyle3" > <column> <header>Locatie id</header> <format>_data</format> <function>LOCATIONATTRIBUTE(id)</function> </column> <column> <header>Locatie name</header> <format>_data</format> <width>200</width> <function>LOCATIONATTRIBUTE(name)</function> </column> <column> <header>Eenheid</header> <format>_data</format> <function>PARAMETERATTRIBUTE(UNIT;Qobserved)</function> </column> <column> <header>Datum 1e overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(FIRST_DATE;Qobserved;dateFormatThreshold)</function> </column> <column> <header>Tijdstip 1e overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(FIRST_TIME;Qobserved;timeFormatThreshold)</function> </column> <column> <header>Waarde 1e overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(FIRST_VALUE;Qobserved;numberFormatThreshold)</function> </column> <column> <header>Datum maximale overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(MAX_DATE;Qobserved;dateFormatThreshold)</function> </column> <column> <header>Tijdstip maximale overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(MAX_TIME;Qobserved;timeFormatThreshold)</function> </column> <column> <header>Waarde maximale overschrijding</header> <format>_data</format> <function>THRESHOLDCROSSING(MAX_VALUE;Qobserved;numberFormatThreshold)</function> </column> </rowPerLocationHtmlTable> <template>ReportRowPerLocationTable.html</template> <outputFileName>tableA.html</outputFileName> </report> |
<declarations> <rowPerLocationHtmlTableFormat id="rowPerLocationFormat1" tableStyle="tableStyle3" > <column> <header>Naam</header> <format>_data_yellow</format> <function>LOCATIONATTRIBUTE(shortname)</function> </column> <column> <header>Tijd maximale overschrijding</header> <function>THRESHOLDCROSSING(MAX_DATETIME;Qobserved;dateFormat1)</function> </column> <column> <header>Waarde maximale overschrijding (m3/s)</header> <function>THRESHOLDCROSSING(MAX_VALUE;Qobserved;numberFormat1)</function> </column> <column> <header>Tijd maximale waterstand</header> <function>MAXTIME(Hobserved;dateFormat1)</function> </column> <column> <header>Maximale waterstand (m)</header> <function>MAXVALUE(Hobserved;numberFormat1)</function> </column> </rowPerLocationHtmlTableFormat> </declarations> |
<rowPerLocationHtmlTableFormat id="rowPerLocationHtml" tableStyle="tableStyle3"> <htmlColumn> <thTemplate> <![CDATA[<th>Location name</th>]]> </thTemplate> <tdTemplate> <![CDATA[<td>%LOCATIONATTRIBUTE(id)%</td>]]> </tdTemplate> </htmlColumn> <htmlColumn> <thTemplate> <![CDATA[ <th class="data-status" style="color:#F9E11E">Thresholds crossed</th> ]]> </thTemplate> <tdTemplate> <![CDATA[ <td class="data-status" style="color:%THRESHOLDCROSSING(MAX_THRESHOLDCOLOR; Hobserved)%">%THRESHOLDCROSSING(MAX_THRESHOLDNAME;Hobserved;dateFormat)%</td> ]]> </tdTemplate> </htmlColumn> </rowPerLocationHtmlTableFormat> |
This table is a generic table type and contains for each configured location one row with several columns, separated by commas. The data displayed in a particular column are result of the function that is configured for that column. For each column the following elements can be configured:
Note that the xml schema allows element 'format', however the format is not applicable to csv table type Also this report type uses templates. The template should contain at least table name. An example:
{noformat}
$TABLE(myTable)$
{noformat}
The rowPerLocationCsvTable can be configured directly in <report> section, or in the <declarations> section and reffered from the <report> section.
Example of the configuration in <report> section:
<report> <locationId>M-1000</locationId> <locationId>H-2091</locationId> <rowPerLocationCsvTable id="myTable"> <column> <header>Naam</header> <function>LOCATIONATTRIBUTE(shortname)</function> </column> <column> <header>Tijd maximale overschrijding</header> <function>THRESHOLDCROSSING(MAX_DATETIME;Qobserved;dateFormat1)</function> </column> <column> <header>Waarde maximale overschrijding (m3/s)</header> <function>THRESHOLDCROSSING(MAX_VALUE;Qobserved;numberFormat1)</function> </column> |
The htmlTable is the successor of the table described earlier. The configuration of this htmlTable is easier and more readable.
Declarations section
In the declarations sections a format of a table needs to be defined. In the figure below, a format of a htmlTable is configured.
Figure 97 Declaration of a htmlTableFormat
The following elements needs to be defined:
In the report itself the reference to a tableFormat and the declaration of the content should take place. The schema prescribes as follows:
Figure 98 Declaration and reference of a htmlTable in a report
The following elements need to be defined:
Remark: htmlTables can contain more than one timeseries. By adding different cellFormats to the series (see picture above) different styles can be attached for display in the table. In this way you can distinguish the two timeseries in the table!
The choice of adding a certain tableStyle to a table supplies you with the opportunity to influence the looks and style of the table, its borders, background and content. By setting the tableStyle a number of style classes are being generated in the html-pages. By declaring these classes in a stylesheet (*.css) and ascribe a certain font family, font size, border color, background color etc. you are able to 'polish' the looks of your reports. If a tableStyle class is not mentioned in a stylesheet, it is being displayed using default settings.
The following classes are generated automatically and are added after the tableStyleX in which X stand for an integer in the range 1 to 10.
class | description | specific for |
_beforeT0 | date/time indication before time zero (TO) of the forecast | time column (most left column) |
_firstAfterT0 | date/time indication of the first occurrence after time zero (T0) of the forecast | time column (most left column) |
_afterT0 | date/time indication after time zero (TO) of the forecast | time column (most left column) |
_data | default indication of data content of a cell | data cells |
_anyString | user defined cellFormat | data cells |
_datamax | addition to current style if value is maximum of that series (_data_datamax or _anyString_datamax) | data cells |
_leftcol | default indication of a row header | |
_header | default indication of a column header | |
_threshold_n | indication of threshold level (n=0,1,2,...) | threshold tables (colouring of backgrounds) |
Notice: the thresholdCrossingsCountTable (see further below) is a newer version of this type of table |
A thresholdCrossingsTable is a table in which the number of thresholds for each level are counted. The number given in the table suggests with the 'worst' case situation. When a timeseries crosses a number of thresholds in a forecast, only the 'worst' threshold crossings are counted. An example of a thresholdsCrossingsTable is given below.
Figure 99 Example of a thresholdCrossingTable (NE Region)
In the declaration sections the layout of the table needs to be defined.
Figure 100 Declaration of a thresholdsCrossingsTable
The following elements needs to be defined:
A thresholdsCrossingsTable should be defined in the report as well. E.g. this table needs to be 'filled' with its corresponding timeseries.
Figure 101 Declaration of a thresholdsCrossingsTable in a report
The following elements needs to be defined:
Since this type of table is a table in which you can aggregate data (which means combine timeseries) the following option is available: mergeLocations.
A thresholdCrossingsCountsTable displays threshold crossing counts depending on which thresholds have been crossed within a given time period. The thresholdCrossingCountsTable is a new version of the thresholdsCrossingsTable. A thresholdCrossingCountsTable has the same layout as a thresholdCrossingCountsTab in the thresholdOverviewDisplay for consistency.
In the declaration sections the layout of the table needs to be defined in a thresholdCrossingCountsTableFormat.
The following options are available:
In the reports section define a thresholdCrossingCountsTable.
The following options are available:
FlagCountsTable is available since Delft-FEWS release 2011.01. A FlagCountsTable displays flag counts depending on the flags of the values in a time series within a given time period.
Example of a flagCountsTable
In the declaration section the layout of the table needs to be defined in a flagCountsTableFormat.
The following options are available:
Configuration example:
<flagCountsTableFormat id="flagCountsTableFormat"> <tableStyle>tableStyle1</tableStyle> <hyperlinkUrl>report.html#!LOCATION_NAME!_!PARAMETER_NAME!</hyperlinkUrl> </flagCountsTableFormat> |
In the reports section define a flagCountsTable.
The following options are available:
Configuration example:
<flagCountsTable id="flagCountsTable" formatId="flagCountsTableFormat"> <inputVariableId>Cowbeech</inputVariableId> <inputVariableId>Romsey</inputVariableId> <inputVariableId>CrosslandsDrive</inputVariableId> </flagCountsTable> |
FlagSourceCountsTable is available since Delft-FEWS release 2011.01. A FlagSourceCountsTable displays counts of flag sources depending on the flag sources of the values in a time series within a given time period. The flag source for a value contains the reason why that value got a certain flag. For example if a value was rejected by a "hard max" validation rule, then it gets flag unreliable and flag source "hard max".
Example of a flagSourceCountsTable
In the declaration section the layout of the table needs to be defined in a flagSourceCountsTableFormat.
The following options are available:
Configuration example:
<flagSourceCountsTableFormat id="flagSourceCountsTableFormat"> <tableStyle>tableStyle1</tableStyle> </flagSourceCountsTableFormat> |
In the reports section define a flagSourceCountsTable.
The following options are available:
Configuration example:
<flagSourceCountsTable id="flagSourceCountsTable1" formatId="flagSourceCountsTableFormat"> <inputVariableId>Cowbeech</inputVariableId> </flagSourceCountsTable> |
A maximumStatusTable indicates, by colouring, when certain threshold levels are crossed. In this type of table, the rows should be defined individually and can contain more than one series. The boolean value 'mergLocation' plays an important role in combining the locations or treat them individually.
Figure 102 Example of a maximumStatusTable (NE Region)
In the declaration sections the layout of the table needs to be defined.
Figure 103 Declaration of maximumStatusTable
The following elements needs to be defined:
In the report itself the necessary timeseries needs to be assigned to the table.
Figure 104 Declaration of a maximumStatusTable in a report
The following elements need to be defined:
For each table:
The maximumstatusTable was developed with the focus on the status of forecasted timeseries. When using the table to show the status in the past (eg to what extent timeseries are available), it is necessary to place the T0 in the past, at the beginning of the period to be displayed. This is contradictory to normal practice. |
In fact, the maximumStatusTable is designed as visualised below. To create a nicely aligned table the 'two timeseries tables' (the one with the 'observed' values and the one with the forecast series) are put in individual cells of the outer table. So the outer table only consist of two cells. The left cell contains the observed table, the right cell contains the forecast table. The outer table itself needs to be declared as well!! The report declaration (see above) can be inspected to see this one in practice.
The variation for displaying maximumStatus information is wide. The combination of relativeViewPeriod (length of forecast series), timestep and the desire to aggregate timesteps can all be implemented. The calculation should be correct. If not, several messages will be shown.
Source: 12 hrs of 15min data
Display: maximumStatus with 15 minute data, time header by the hour (with minutes)
Configuration
value | explanation | |
timeStepsInTable | 48 | (12*4=48 timesteps) |
timeStepsAggregation | 1 | each column represent 1 timestep |
timeHeaderInterval | 4 | 4 columns have a merged header (hour) |
timeHeaderDisplayMinutes | true | minute indication |
Result: table with 48 time columns with 12 aggregated headers visualising the hour with a minute indication (like in first figure of this section)
Source: 6 hrs of 15min data
Display: maximumStatus with hourly data (no minute indication)
Configuration
value | explanation | |
timeStepsInTable | 24 | (6*4=24 timesteps) |
timeStepsAggregation | 4 | 4*15min aggregate to 1 hour |
timeHeaderInterval | 1 | each hour 'column' has its own header |
timeHeaderDisplayMinutes | false | no minute indication in header |
Result: table with 6 (time) columns indicating the 'worst' status of that hour.
Example thresholdsCrossingsTable/maximumStatusTable
In a configuration the following timeSeries/InputVariables exist:
Name | Parameter | LocationSet | Locations |
Catchment1_Waterlevel_Obs | H.obs | Catchment1_Locs | Loc1 |
Catchment1_Waterlevel_For | H.simulated | Catchment1_Locs | Loc1 |
Catchment2_Waterlevel_Obs | H.obs | Catchment2_Locs | Loc4 |
Catchment2_Waterlevel_For | H.simulated | Catchment2_Locs | Loc4 |
The geographical hierarchy is that Area 1 contains 2 Catchments (Catchment1 and Catchment2)
The Region overview should be configured that all catchments belonging to that area are 'put' into one row which is describing the status of that area. This is valid for both the observed as the forecast timeseries. The 'mergeLocations' variable should be put to 'true' because all locations should be merged (combined).
The Area overview should be configured in such way that all catchments are in separate rows. This is valid for both the observed as the forecast timeseries. The 'mergeLocations' variable should be put to 'true' because all locations should be merged (combined).
The Catchment overview forms the exception here. With mergeLocations set to 'False', the corresponding locationSet is extracted into the individual locations and so every location has got its own row.
For the two tables for which this is valid, the last example does not give much additional value for a thresholdsCrossingsTable. Then each row (which is equal to one locatation) will have a '1' in one of the cells. A maximumStatusTable supplies more value because it will indicate when this (maximum) threshold will be reached.
See below mentioned (simplified) figures.
A mergedPrecipitationTable contains both observed rainfall as well as forecast rainfall, preferably in P.merged timeseries. Data can be visualised in configurable time intervals compared to T0 and will appear in separate columns. Additionally, a single column can be added to visualise any parameter (e.g. CWI). An example can be found below (without extra column). In the example below, actually two tables are plotted next to each other. The left table (with names) contains the historical date. The one on the right hand side contains the forecast timeseries and has no name column. A table like this has two header rows to be defined by the user.
Figure 105 Example of a mergedPrecipitationTable (NE Region)
In the declaration section the layout of the table needs to be defined.
Figure 106 mergedPrecipitationTable configuration in the declarations section
The following elements need to be defined.
In the report section the content (timeseries) are 'attached' to this table.
Figure 107 mergedPrecipitationTable in the report section.
The mergedPrecipitationTable in the report section is (very) easy to define. The rule of the 'outer table' is valid here as well. To align the historical and the forecast table nicely, the outer table contains both P.merged tables.
The following elements need to be defined:
SystemStatusTables display information about the status and behaviour of the FEWS system itself (like in the System monitor).
SystemStatysTables come in different types:
In most tables it is possible to add 'benchmark' data to compare the actual and the desired/required situation. The configuration of such a table requires the definition of this benchmark value. Such a table contains a 'Item', "Benchmark' and a 'Status' column.
Besides a 'benchmark' (something to compare the actual status with) additional fields (columns from the database) can be included in the table. A specific boolean value (showOutputFieldsOnly) can be used to either include or exclude these benchmark columns. In most tables this boolean is set to 'False' because most tables contain both status information as well as additional (meta)information. See figure below.
Figure 108 A systemStatusTable is divided into a status part and an extraOutputFields part.
Each type will be briefly explained:
Notice that for the systemStatus reports the global variable "REPORTS_LEFTCOLMCID" should be included in the global properties. In case of a dual-MC, also "REPORTS_RIGHTCOLMCID" should be included. In a Stand-Alone, use REPORTS_LEFTCOLMCID=none |
A liveSystemStatusTable displays information about the status and behaviour of the live system components (MasterController and Forecasting Shell Server(s))
Figure 109 Example of a liveSystemStatus table (NE Region)
Figure 110 Example of the configuration of a liveSystemStatus table in the declarations section
The following elements need to be defined:
Figure 111 Example of the configuration of a liveSystemStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
A exportStatus table displays information about the status of a number export features of the system, such as:
Figure 112 Example of an exportStatus table (NE Region)
Figure 113 Example of the configuration of an exportStatus table in the declarations section
The following elements need to be defined:
++
Figure 114 Example of the configuration of an exportStatus table in the report section
This table is constructed using two types of queries:
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
An importStatus table displays information about the datafeeds which have been imported, how many of them were read and how many failed to be imported. The frequency of the files imported can be (visually) compared with a benchmark figure. See below for an example.
Figure 115 Example of an importStatus table (NE Region)
Figure 116 Example of the configuration of an importStatus table in the declarations section
The following elements need to be defined:
Remark: when defining extraOutputFieldHeaders it is important to maintain the same order in the declarations sections (definition of the fields) and in the report section (referencing the content) otherwise the header and the content will not correspond. |
Figure 117 Example of the configuration of an importStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
A scheduledWorkflowStatus table displays the workflows which are scheduled together with their repeat time and next due time. The figure below illustrates this.
Figure 118 Example of a scheduledworkflowStatus table (NE Region)
Figure 119 Example of the configuration of a completedWorkflowStatus table in the declarations section
The following elements need to be defined:
Since this table is not referring to a benchmark (it is just reading the configuration) the value for showOutputFieldsOnly is set to true. Only these fields are displayed.
remark: One reference to an existing workflow is sufficient to extract all scheduled workflows out of the database, that's why it seems that there is only one table row configured here. In fact, this table will be filled with ALL scheduled workflows when configured as above. |
Figure 120 Example of the configuration of a scheduledWorkflowStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
A completedWorkflowStatus table contains an overview of all workflows carried out in the last 24 hours. An example is given below.
Figure 121 Example of a completedworkflowStatus table (NE Region)
Figure 122 Example of the configuration of a completedWorkflowStatus table in the declarations section
The following elements need to be defined:
Figure 123 Example of the configuration of a completedWorkflowStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
The currentForecastStatus table gives an overview of which workflows are set to CURRENT. These mentioned workflows in this tables are the same as the marked with a green icon the System Monitor of the Operator Client. An example of this table is given below.
Figure 124 Example of a currentForecastStatus table (NE Region)
Figure 125 Example of the configuration of a currentForecast table in the declarations section
The following elements need to be defined:
Figure 126 Example of the configuration of a currentForecastStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
A logMessageListing table contains logmessages which are available in the Log Browser tab in the System Monitor of the Operator Client. Log messages of a specific type can be queried. By making use of a correct reference to the cascading style sheet this table can be set to 'scrollable' An example of such a table is given in the figure below.
Figure 127 Example of a logMessageListing table (NE Region)
Figure 128 Example of the configuration of a logMessageListing table in the declarations section
The following elements need to be defined:
Figure 129 Example of the configuration of a currentForecastStatus table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
A forecastHistory table provides an overview of all most recent forecasts carried out. The number of forecasts to include is configurable. An example of such a table is given below.
Figure 130 Example of a forecastHistory table (NE Region)
Figure 131 Example of the configuration of a forecastHistory table in the declarations section
The following elements need to be defined:
+
Figure 132 Example of the configuration of a forecastHistory table in the report section
The following elements need to be defined:
(keep in mind that "REPORTS_LEFTCOLMCID" should be included in the global properties (REPORTS_LEFTCOLMCID=none for Stand Alone)
The forecastThresholdCrossingXml report generates an xml-file containing threshold crossing information for a given ensemble time series. An example of a generated xml file can be found here.
Configuring the forecastThresholdCrossingXml report requires at least two input variables to be configured. One input variable containing the forecast ensemble time series for which the report must be generated, and a second input variable containing the a time series which has the current level (value) for the same locations. Optionally, additional forecast scenario input variables can be defined, each containing forecast time series (no ensemble) for the same locations as the ensemble input variable.
The example generated xml file was generated using the following configuration:
<report> <inputVariable variableId="forecast_series"> ... </inputVariable> <inputVariable variableId="ensemble_series"> ... </inputVariable> <inputVariable variableId="level_series"> ... </inputVariable> <forecastThresholdCrossingXml fileName="threshold-crossing.xml" locationNameAttribute="REPORT_NAME" externalLocationIdAttribute="EXTERNAL_ID"> <forecastThresholdCrossingXmlTemplate>ForecastThresholdCrossing_template.xml</forecastThresholdCrossingXmlTemplate> <forecastEnsembleTimeSeries>ensemble_series</forecastEnsembleTimeSeries> <forecastScenarios> <forecastTimeSeries id="1" name="Forecast Policy" numberFormatId="numberFormatId">forecast_series</forecastTimeSeries> </forecastScenarios> <exceedance> <numberFormatId>numberFormatId</numberFormatId> <minEnsembleMembers>5</minEnsembleMembers> <belowMinimumLabel><10%</belowMinimumLabel> <earliestExceedanceTimeStep unit="hour" multiplier="1"/> <scenarios> <earliest name="earliest"/> <percentile name="25%">25</percentile> <percentile name="50% (most likely)">50</percentile> <percentile name="75%">75</percentile> <latest name="latest"/> </scenarios> </exceedance> <currentLevelTimeSeries numberFormatId="numberFormatId">level_series</currentLevelTimeSeries> <floodClasses> <default>less-than-minor</default> <floodClass thresholdId="levelThreshold1">minor</floodClass> <floodClass thresholdId="levelThreshold2">moderate</floodClass> <floodClass thresholdId="levelThreshold3">major</floodClass> </floodClasses> <additionalThresholds> <thresholdId>levelThreshold3</thresholdId> <thresholdId>levelThreshold4</thresholdId> <thresholdId>levelThreshold4</thresholdId> </additionalThresholds> <siteFigures> <siteFigure> <id>1</id> <name>@NAME@Forecast1</name> <fileName>@NAME@-forecast-1.png</fileName> <type>png</type> <alternativeText>Graphical forecast for @NAME@</alternativeText> <viewPort left="0" top="0" width="800" height="600"/> </siteFigure> <siteFigure> <id>2</id> <name>@NAME@Forecast2</name> <fileName>@NAME@-forecast-2.png</fileName> <type>png</type> <alternativeText>Graphical forecast for @NAME@</alternativeText> <viewPort left="100" top="100" width="900" height="700"/> </siteFigure> </siteFigures> </forecastThresholdCrossingXml> <template>ForecastThresholdCrossing_template.xml</template> <!-- irrelevant, the report module will use the <forecastThresholdCrossingXmlTemplate> element to determine the template --> <outputSubDir>thresholdcrossing</outputSubDir> <outputFileName>crossingTest.html</outputFileName> <!-- irrelevant, the report module will use the "filename" attribute of the <forecastThresholdCrossingXml> element to determine the output file name --> </report> |
The ForecastThresholdCrossing_template.xml can contain normal report tags which will be replaced as usual. This report type also allows several report specific tags:
The forecastThresholdCrossingXml report type generates an <ensemble> element for the given ensemble input time series. This ensemble element will first contain a number of <scenario> elements equal to the number of forecast scenario time series specified in the configuration. The id and name attributes of each of these <scenario> elements will match the configured id and name for the <forecastTimeSeries> in the configuration. After the <scenario> elements, there will be a <sites> element in which for each location in the given ensemble time series, the current level (taken from the level time series), figures (determined using the <siteFigures> in the configuration) and threshold crossings for each of the scenarios (configured in the <exceedance> element) will be reported. The thresholds which are to be included in the report are all the thresholds named in the <floodClasses> element as well as the thresholds configured in the <additionalThresholds> element.
With each value reported for the forecast scenario time series as well as the level time series, the report will also contain a "flood-class". This flood class is determined using the <floodClasses> configured. The flood class corresponding to a value is the highest of the configured flood class thresholds which is exceeded by the value, or the configured default flood class if none of the thresholds is exceeded.
For each of the sites, the number of ensemble members which cross a threshold is calculated. This is reported as the "exceedance" in the generated report: the percentage of ensemble members which crossed the threshold. This percentage will be formatted using the number format reference by <numberFormatId> if configured. If at least one but less than the configured <minEnsembleMembers> cross the threshold, and there is a <belowMinimumLabel> configured, than the <belowMinimumLabel> will be reported as the "exceedance" instead. In this example "<10%".
If more than the configured <minEnsembleMembers> cross the threshold, the earliest exceedance times for each of the configured <scenario> elements is reported. To obtain these times, only the ensemble members that cross the threshold are taken into account. The times at which these members first cross the threshold are determined and ordered from earliest to latest. For an <earliest> scenario the first time at which an ensemble member crosses the threshold is reported. For a <latest> scenario, the last time is reported. For the configured <percentile> scenarios, the x-th percentile is taken from the ordered list of crossing times. If the percentile would "fall between two values in the list" their weighted average is taken. If an <earliestExceedanceTimeStep> is configured, each of the reported earliest exceedance times is changed to the closest time in the configured time step.
WORK-IN-PROGRESS (TO DO RUDIE: )
An animated GIF is an animation of a grid timeserie in a GIF image format. The advantage of this format is that it can easily be added to HTML pages, without the need to embed extra controls (like with AVI).
The following elements need to be defined:
To export a report see the reportExport module instance. However, if you simply want to include your created gif in a html report, you can use <IMG SRC="gif0_0.gif"> in the report template file, where gif0_0.gif refers to the name of your created gif.
Since 2013_01 it is possible to create reports of Schematic Status Display panels in the form of animations in the formats Avi and animated gif as well as snapshots in the form of Png files and Svg files.
For this purpose there will probably already be some Schematic Status Display configuration in the DisplayConfigFiles of the configuration. In order to create a report of a Schematic Status Display panel, most elements of this configuration can be copied manually to the reports configuration file. For configuring a Schematic Status Display panel please refer to Schematic Status Display configuration.
An example Schematic Status Display that contains the following configuration,
<dateFormat id="DF1"> <timeZone> <timeZoneName>CET</timeZoneName> </timeZone> <dateTimePattern>dd-MM-yyyy</dateTimePattern> </dateFormat> <numberFormat id="NF1"> <pattern>{0,number,##0.00}</pattern> </numberFormat> |
must be transferred to the report declarations. The definitions of the date format and number format cannot be copied directly to the report configuration since they have a slightly different format.
<reports xmlns="http://www.wldelft.nl/fews" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.wldelft.nl/fews https://fewsdocs.deltares.nl/schemas/version1.0/reports.xsd" version="1.0"> <declarations> <defineGlobal id="ForecastingRegion">IWP-Twentekanalen</defineGlobal> <dateFormat id="DF1"> <timeZone> <timeZoneName>CET</timeZoneName> </timeZone> <pattern>dd-MM-yyyy</pattern> </dateFormat> <numberFormat id="NF1">{0,number,##0.00}</numberFormat> ... </declarations> <report> ... // Add Ssd report elements here for generating Avi, Gif, Png or Svg. ... </report> </reports> |
When first configuring a Schematic Status Display panel report, the scadaPanel section of the Schematic Status Display configuration can be copied directly to the Schematic Status Display Reports configuration. For Svg output the interactive sections will not be supported, so it is recommended to remove these.
With this function an animation of the configured period can be generated for a single Schematic Status Display panel. Use id $SSD_AVI(myId)$ for including the avi file in the reports.
<schematicStatusDisplayPanelAvi id="ssdAvi"> <scadaPanel id="TK" name="Twentekanalen 10 min"> <svgFile>Twentekanalen.svg</svgFile> <nodeId>Twentekanalen Hydro</nodeId> ... </scadaPanel> <width>1024</width> <height>800</height> <relativePeriod unit="hour" start="-20" end="4"/> <timeStep unit="second" multiplier="300"/> <movieFrameDurationMillis>200</movieFrameDurationMillis> <fileName>SSD_test.avi</fileName> </schematicStatusDisplayPanelAvi> |
With this function an animation of the configured period can be generated for a single Schematic Status Display panel. Use id $SSD_ANIMATED_GIF(myId)$ for including the animated gif file in the reports.
<schematicStatusDisplayPanelAnimatedGif id="ssdGif"> <scadaPanel id="TK" name="Twentekanalen 10 min"> <svgFile>Twentekanalen.svg</svgFile> <nodeId>Twentekanalen Hydro</nodeId> ... </scadaPanel> <width>1024</width> <height>800</height> <relativePeriod unit="hour" start="-20" end="4"/> <timeStep unit="second" multiplier="300"/> <movieFrameDurationMillis>200</movieFrameDurationMillis> <fileName>SSD_test.gif</fileName> </schematicStatusDisplayPanelAnimatedGif> |
With this function one or more png images can be generated of a single Schematic Status Display panel. Use id $SSD_PNG(myId)$ for including the png files in the reports.
Sample demonstrating use of creating png snapshots that includes Schematic Status Display transformations:
<schematicStatusDisplayPanelSnapshotsPng> <variable> ... </variable> <transformation id="UserSimpleTransformation"> <user> <simple> <expression>Waterstanden_10min * 100</expression> <outputVariable> <variableId>Waterstanden_10min_times_100</variableId> </outputVariable> </simple> </user> </transformation> <scadaPanel id="TK" name="Twentekanalen 10 min"> .... </scadaPanel > <width>1024</width> <height>800</height> <snapshot id="ssd1"> <relativeTime unit="hour" value="-4"/> <fileName>SSD_test1.png</fileName> </snapshot> <snapshot id="ssd2"> <relativeTime unit="hour" value="-3"/> <fileName>SSD_test2.png</fileName> </snapshot> </schematicStatusDisplayPanelSnapshotsPng> |
With this function one or more svg images can be generated of a single Schematic Status Display panel. Use id $SSD_SVG(myId)$ for including the svg files in the reports.
The interactive parts of the Schematic Status Display such as Left Single Click Action and Left Double Click Action that can be configured when the Schematic Status Display is run in Delft-FEWS are not supported when exported as .svg report and it is recommended to remove these interactive sections where appropriate.
<schematicStatusDisplayPanelSnapshotsSvg> <scadaPanel id="TK" name="Twentekanalen 10 min"> .... </scadaPanel > <width>1024</width> <height>800</height> <snapshot id="ssd1"> <relativeTime unit="hour" value="-4"/> <fileName>SSD_test4.svg</fileName> </snapshot> <snapshot id="ssd2"> <relativeTime unit="hour" value="-3"/> <fileName>SSD_test5.svg</fileName> </snapshot> </schematicStatusDisplayPanelSnapshotsSvg> |
From the FEWS version 2018.02 it is possible to configure filename prefix and suffix for schematicStatusDisplayPanelSnapshotsPng and schematicStatusDisplayPanelSnapshotsSvg reports.
If fileNamePrefix is configured it will add the system time date to the beggining of file name in the configured format. If fileNameSuffix is configured it will add the system time date to end of the file name in the configured format.
<snapshot id="SchematicStatusSnapshot"> <relativeTime unit="day" value="0"/> <fileName>scada.png</fileName> <fileNamePrefix> <timeZeroFormattingString>yyyy_</timeZeroFormattingString> </fileNamePrefix> <fileNameSuffix> <timeZeroFormattingString>MMDDHHmm</timeZeroFormattingString> </fileNameSuffix> </snapshot> |