Difference between revisions of "Create iReport Templates with Subreports"

From IMSMA Wiki
Jump to: navigation, search
(Created page with "==Advanced Reports== ===Sub-Report=== <p>Sub-report is reports within a report; thus, providing a way to generate a report that includes data on the target IMSMA Item as well ...")
 
 
(80 intermediate revisions by 8 users not shown)
Line 1: Line 1:
==Advanced Reports==
+
{{TOC right}}
===Sub-Report===
+
==Creating Subreports==__NOEDITSECTION__
<p>Sub-report is reports within a report; thus, providing a way to generate a report that includes data on the target IMSMA Item as well as data on other IMSMA Items that are associated to the target IMSMA Item.  Generally a sub-report is used in a situation where you have one or more sets of data relating to a single IMSMA item. A common use case would be a Location report with multiple details bands of different IMSMA items (Hazard, Hazard Reduction, Accident, Victim, MRE, and QC).</p>
+
A subreport is a report within a report; thus, providing a way to generate a report that includes data on the target IMSMA item as well as data on other IMSMA items that are associated to the target IMSMA item.  Generally a subreport is used in a situation where you have one or more sets of data relating to a single IMSMA item. A common use case would be a Location report with multiple details bands of different IMSMA items (Land, Activity, Accident, Victim, Education, and QM).
<p>Regardless of what IMSMA data you’re including in your report and sub-reports, there are 6 basic steps to create a report with sub-reports:</p>
 
  
:Step 1 – Create the Main report
+
Regardless of what IMSMA data you’re including in your report and subreports, there are 5 basic steps to create a report with subreports:
:Step 2 – Add Sub-report to the Main report
+
:Step 1 – Create the main report
:Step 3 – Add Parameter to the Sub-report
+
:Step 2 – Add a subreport to the main report
:Step 4 – Define Report Query for the Sub-report
+
:Step 3 – Add a parameter to the subreport
:Step 5 – Add Sub-report Parameter to the Main report
+
:Step 4 – Define the report query for the subreport
:Step 6 – Repeat Step 2-5 for additional Sub-reports
+
:Step 5 – Add subreport parameter to the main report
  
[[Image:iRepStep01.png|center|500px|''Step 1 – Create the Main Report'']]
+
====Step 1 – Create the Main Report====__NOEDITSECTION__
  
====''Step 1 Create the Main Report''====
+
Before creating the main report, you will need to determine what data should be included in your report.  For example, if you are creating a report about Land with all the Progress Report data, then the target IMSMA item for your main report should be Land and the target data for your subreport should be Activity assuming that Progress Reports are entered into the system as Activity.  Below is a list of questions and things to be considered when designing a report.
 +
*What are all the data to be included on the report?
 +
*What is the target IMSMA item for the main report?  This is the primary data of your report.
 +
*What is the target IMSMA item for the subreports?  This is the secondary data of your report.
 +
*Determine the relationship between the primary data and the secondary data.  How did they get reconciled to one another? How are they linked?
 +
 
 +
The main report should be created with the IMSMA item determined to be the primary data of your report.  The main report is just a basic report and can be created using the steps provided in the [[Create a Basic iReport Template]] section.
 +
 
 +
====Step 2 Add Subreport to the Main report====__NOEDITSECTION__
 +
 
 +
Once the main report has been created you can add a subreport to the main report. The intent of the subreport is to bring data from a different but related datasource into the main report. For example, you could include Activity data on a report about Land.  Below are the instructions to create a subreport:
  
<p>Before creating the main report, you will need to determine what data to be included on your report. For example, if you are creating a report about Hazard with all the Progress Report data, then the target IMSMA item for your main report should be Hazard and the target data for your sub-report should be Hazard Reduction assuming that Progress Reports are entered into the system as Hazard Reduction. Below is a list of questions and things to be considered when designing a report.</p>
+
# On the main report, from the '''Palette''' pane, select '''Subreport''' and drag it to the desired band on the iReport template (normally this is the '''Detail''' band).
*What are all the data to be included on the report?
+
#:[[Image:IReportSubReportPalette.png|center|300px|''Subreport Palette'']]<div align="center">''Subreport Palette''</div>
*What is the target IMSMA Item for the Main report?  This is the primary data of your report.
+
# Release the button and the window below displays.
*What is the target IMSMA Item for the sub-reports?  This is the secondary data of your report.
+
#:[[Image:IReportSubReport1.png|center|500px|''Add Subreport to the Main report'']]
*Determine the relationship between the primary data and the secondary dataHow did they get reconciled to one another?
+
# Click '''Next''' to define a new subreport unless you have an existing report that you would like to use for subreport.
 +
# Select the desired iReport Template to apply (Blank is recommended).
 +
#:[[Image:IReportSubReport2.png|center|500px|''Select the desired iReport Template'']]
 +
# Select from the '''Connection/Data Source''' list.  This should be the IMSMA item determined as the secondary data of your report. For example, if you are creating a report about Land with Progress Reports, then “Hazard Reduction” should be the data source for the subreport. Click Next.
 +
#:[[Image:IReportSubReport3.png|center|500px|''Select the desired datasource'']]
 +
# Select the attributes to be included in your subreport.  Click '''Next'''.
 +
#:[[Image:IReportSubReport4.png|center|500px|''Select the desired fields for the subreport'']]
 +
# Select the fields to group by. This step is not required.  Click '''Next'''.
 +
#:[[Image:Subreport_Group_by.png|center|500px|''Select the fields to group by'']]
 +
# Enter a name for the subreport or use the default. Choose '''Next'''.
 +
#:[[Image:IReportSubReport5.png|center|500px|''Enter a name for the subreport'']]
 +
# Select '''Use the same connection used to fill master report'''. Click Finish.   
 +
#:[[Image:IReportSubReport6.png|center|500px|''Use same connection'']]
 +
# The subreport displays.
  
<p>The Main report should be created with the IMSMA item determined to be the primary data of your report.  The Main report is just a basic report and can be created using the steps provided in the “Creating a Basic Report” section.  Below are the instructions:</p>
+
====Step 3 – Add Parameter to Subreport====__NOEDITSECTION__
<ol>
 
<ol type="a">
 
<li>Create your main report with the IMSMA item determined as the primary data of your report.  This is just a basic report.</li>
 
<li>Save your main report</li>
 
<li>Compile your main report to make sure that it’s error-free.</li>
 
</ol>
 
</ol>
 
  
[[Image:iRepStep02.png|center|500px|''Step 2 – Add Sub-report to the Main report'']]
+
To connect a subreport to the main report, we next need to create a parameter for passing the identification (guid) of the primary IMSMA item between the subreport and the main report. In the '''Report Inspector''' on the subreport, [[Modify an iReport Template#Adding a Parameter to an iReport Template|add a Parameter]] to hold the guid of the IMSMA item on the main report. It is recommended to add a fairly generic parameter name such as ''ItemGUID'' so that the subreport can be more easily re-used.
  
====''Step 2 – Add Sub-report to the Main report''====
+
# From the Report Inspector, '''right click''' on the '''Parameter''' tree and choose '''Add Parameter'''.
 +
#: [[Image:IReport AddParameter1.png|center|250px|''Add Parameter'']]
 +
# In the '''Properties''' pane, enter a parameter name (e.g. ItemGUID} and edit any other properties. Normally it is not required to edit anything other than the name, you might however want to deselect the '''Use as a prompt''' option.
 +
#: [[Image:IReport AddParameter2.png|center|250px|''Add Parameter'']]
 +
# Once the parameter is added it will be available in the '''Report Inspector''' and can be referenced as ''$P{parametername}''. For example:
 +
$P{ItemGUID}
  
<p>Sub-report is reports within a report.  As mentioned earlier, a sub-report should be created with the IMSMA Item determined as the secondary data of the report.  Below is the instructions to create a sub-report:</p>
+
====Step 4 – Define Report Query for Subreport====__NOEDITSECTION__
  
<ol type="a">
+
The next step is to create a report query for the subreport you just created in Step 2 to define how the IMSMA item on the main report is related to the IMSMA item on the subreport. Typically the subreport report query will receive the guid from the main report via the parameter created in Step 3 and then use it to limit items in the subreport to those linked to the main report.   Below is the instructions on how to define the report query:
<li>Increase the size of Detail section of the Main report to make room for your sub-report.</li>
 
:'''View''' -> '''Bands''' -> '''detail''' -> '''increase the Band Height''' -> '''Apply'''
 
<li>Click the [[Image:iRepBand.png]] button</li>
 
<li>Click the detail section of the report.  Hold down the mouse button and drag the cursor to create a rectangle to define the area of sub-report. Release the botton and the window below displays.</li>
 
</ol>
 
  
[[Image:iRepBandScreen.png|center|500px]]
+
# Open the [[Modify an iReport Template#Using Report Query filters|report query window]].
 +
# From the report query window, select '''ImsmaQuery''' from the query language list.
 +
# Enter a report query filter using the parameter defined above to limit the objects according to the main report object. The most common report query filter would be to filter to only linked objects. For example '''''links.toGuid="$P{ItemGUID}"'''''. In this step, the Report Query tells the subreport to return only rows that are linked to the guid of the item in the main report via the link table. Other combinations of report query filters can be used on subreports beyond the link table. These are documented in the [[#Example Subreport Relationships|Possible Subreport Relationships]] section below.
 +
# Click '''OK'''. The report query window closes.
 +
# Save the subreport.
  
<ol type="a" start="4">
+
====Step 5 – Link the Subreport to the Main Report====__NOEDITSECTION__
<li>Click '''Next''' to define a new sub-report unless you have an existing report that you would like to use for sub-report.</li>
+
Now that both the main and the subreport are ready, the only thing that remains to be done is linking the two together. Below are the instructions to link the two reports:
<li>Select from the '''Connection/Data Source''' list.  This should be the IMSMA item determined as the secondary data of your report. For example, if you are creating a report about Hazard with Progress Reports, then “Hazard Reduction” should be the data source for the sub-report. Click Next.</li>
+
# Make sure you are at the main report by selecting the name of the main report from the tabs at the top of the iReport Designer canvas pane.
<li>Select the attributes to be included in your sub-report. Click '''Next'''.</li>
+
# Select the subreport box within the main report.
<li>Select the layout option.  Click '''Next'''.</li>
+
#: [[Image:IReportSubReportSelection.png|center|500px|''Select the Subreport on the main report'']]<div align="center">''Select the Subreport on the main report''</div>
<li>Enter a name for the sub-report.  Click Finish.  The sub-report displays.</li>
+
# On the '''Properties''' pane for the Subreport, select the '''Parameter''' selector.
</ol>
+
#: [[Image:IReport_SubReportProperties.png|center|200px|''Subreport properties'']]<div align="center">''Subreport properties''</div>
 +
# '''Add''' a parameter and type '''exactly the name of the subreport parameter created in step 3''' (e.g. ''ItemGUID'')
 +
#: [[Image:IReport_SubReportParameter.png|center|200px|''Add a parameter'']]<div align="center">''Add a parameter''</div>
 +
# For the '''value expression''', select the appropriate field to include in the parameter. '''Normally this is ''$F{guid}''''' but other choices are available.
 +
#: [[Image:IReport_SubReportParameter2.png|center|200px|''Select the appropriate field'']]<div align="center">''Select the field to include in the parameter''</div>
 +
# Click '''OK''' and close Subreport Parameters window.
  
[[Image:iRepStep03.png|center|500px|''Step 3 – Add Parameter to Sub-report'']]
+
You are now ready to run your main report. Running (i.e. previewing) the main report will automatically run the subreport(s) as well, and the data from the main as well as from the subreport(s) will be included in the output.
  
====Step 3 – Add Parameter to Sub-report====
+
==Kinds of Subreports==__NOEDITSECTION__
 +
There are three main kinds of relationships in IMSMA on which subreports can be generated from IMSMA data. These are:
 +
*Location relationship
 +
*Link relationship
 +
*Geospatial relationship
 +
*Other relationship
  
<p>To connect a sub-report to the Main report, we need to create a parameter for passing the identification (guid) of the primary IMSMA Item between the sub-report and the main report.  Below is the instructions to create the parameter you need for the sub-report:</p>
+
===Location relationship subreports===__NOEDITSECTION__
 +
Because each of the main items in {{IMSMANG}}, Accident, Activity, Assistance, Education, Land, QM, and Victim, must be reconciled to a Location during the data entry phase, each of these objects has a relationship with Location and can thus be a subreport on a Location main report. Since all accidents, land, activities, educations, QMs, assistances, and victims are associated with a single location each record knows what location it is related to based on the '''''location guid''''' field. When creating a report where the main report is a Location and the subreport is one of the associated objects the Location's guid is passed to the subreport in a parameter and the subreport can use a special ImsmaQuery language syntax to limit the subreport data to those associated with the main report's location:
 +
location.guid = "$P{parametername}"
  
<ol start="a">
+
The location guid field in the subreport item table contains the guid of the location to which the item record is associated. The figure below shows an example of a location and the accident and land that are associated to the location. Notice that the location_guid value (1234-1234) in the accident and land are identical to the location_guid of the location.
<li>At the Sub-report window, select View -> Parameters.
 
:The window displays the parameters.  
 
</ol>
 
  
[[Image:iRep09.png|center|500px|''Figure 9. Window of fields, variables, and parameters'']]
+
[[Image:iRep14.png|center|500px|''location_guid example'']]
 
<div align="center">
 
<div align="center">
''Figure 9. Window of fields, variables, and parameters''
+
''location_guid example''
 
</div>
 
</div>
  
<ol type="a" start="2">
+
To create a subreport using the Location relationship:
<li>Click the '''New''' button.</li>
+
# From the main "Location" report, pass the location '''''guid''''' to the subreport in a parameter (e.g. in a parameter called '''ItemGUID''').
:The Add/modify parameter window displays.
+
# Create a parameter on the subreport with the same name as in #1.
<li>From the Add/modify parameter window:</li>
+
# In the subreport for the related item (e.g. a Victim) use the parameter in the following ImsmaQuery language syntax
*Enter “'''''object_guid'''''” for the '''Parameter Name''' where ''object_guid'' is the suggested parameter name in the Column D of the Table - Required Parameters for Sub-report below.
+
location.guid="$P{parametername}"
*Click the '''OK''' button.  
+
 
<li>Close the window that displays the list of all parameters.</li>
+
This has the effect of limiting the subreport records to '''only those records that are associated to the location''' from the main report.
</ol>
+
 
 +
===Link relationship subreports===__NOEDITSECTION__
 +
In addition to the Location relationship, the main items in {{IMSMANG}} can also be linked with one another during the reconciliation process. This is how, for example, Activities are linked with Land in the {{IMSMANG}} database. Accidents, land, activities, educations, assistances, QMs, and victims may be related to one another via ''links''. For example, a victim may be associated to an accident in a particular land. If these relationships are known, IMSMA users may define these links while reconciling the Data Entry Form. This special relationship can also be modeled in iReport using a report and subreport(s).
 +
 +
The process for creating a report on an item and its linked items is similar to the process for creating a report on items with a Location relationship. The item in the main report is the primary item for which you would like to find linked items. The subreport would return the records for the particular item that is linked to the primary item. The key difference is the query used in the subreport.
 +
 
 +
To create a subreport using the link relationship:
 +
# From the main report, pass the '''''guid''''' of the main report object to the subreport in a parameter (e.g. pass an accident's '''''guid''''' in a parameter called '''ItemGUID''').
 +
# Create a parameter on the subreport with the same name as in #1.
 +
# In the subreport for the related item (e.g. a Victim) use the parameter in the following ImsmaQuery language syntax
 +
links.toGuid="$P{parametername}"
 +
 
 +
This has the effect of limiting the subreport records to only those records that have a '''link''' to the guid or object passed from the main report.
 +
 
 +
===Geospatial relationships===__NOEDITSECTION__
 +
In addition to Location and Link relationships, many objects in IMSMA can store geospatial/geographic information (i.e. point/polygon information). This relationship with the geospatial data can be modeled in a report/subreport relationship for any item that has geospatial information associated with it. To include point/polygon information on an object's main report, follow 3 basic steps:
  
[[Image:iRepStep04.png|center|500px|''Step 4 – Define Report Query for Sub-report'']]
+
*Step 1: Create a main report for an object with geospatial info
 +
*Step 2: Create a GeospatialInfo subreport on the main report, i.e. a report using the GeospatialInfo datasource
 +
*Step 3: Create a Geopoint subreport on the GeospatialInfo report, i.e. a report using the Geopoint datasource
  
====Step 4 – Define Report Query for Sub-report====
+
Step 1: Create a main report for an object with geospatial info
 +
* Create a main report with an object that has geospatial information (e.g. Land).
 +
* Ensure that the '''''geospatialInfos''''' field is added to the main report.
  
<p>The next step is to create a report query for the sub-report you just created in Step 2 to define how the IMSMA item on the Main report is related to the IMSMA item on the Sub-report.  Below is the instructions on how to define the Report Query:</p>
+
Step 2: Create a GeospatialInfo subreport on the main report
 +
* On the main report, add a subreport using the '''GeospatialInfo''' datasource
 +
* Pass the '''''geospatialInfos''''' field to the subreport in a parameter (e.g. GeospatialInfoList). '''Note:''' instead of passing the '''''$F{guid}''''' field to the parameter, the parameter value should be '''''$F{geospatialInfos}'''''
 +
* In the GeospatialInfo subreport use the parameter in the following ImsmaQuery language syntax
 +
guid IN $P{parametername}
  
<ol start="23">
+
Step 3: Create a Geopoint subreport on the GeospatialInfo report
<li>At the Sub-report window, select Data -> Report Query.</li>
+
* On the Geospatialinfo subreport, add a subreport using the '''Geopoint''' datasource
:The Report query window displays.
+
* Pass the '''''guid''''' field to the subreport in a parameter (e.g. GeospatialGUID). '''Note:''' Pass the '''''$F{guid}''''' field '''NOT''' the '''''$F{geospatialInfos}''''' value.
<li>From the Report query window:</li>
+
* In the Geopoint subreport use the parameter in the following ImsmaQuery language syntax
<ol type="a" start="3">
+
geospatialinfoguid IN $P{parametername}
<li>Select ImsmaQuery from the Query language list.</li>
 
<li>Enter object.guid = “$P{object_guid}” for the ImsmaQuery where object  is the object type of the IMSMA item on the Main report - See Column E in the Table - Required Parameters for Sub-report below to determine the ImsmaQuery string for your Sub-report.</li>
 
</ol>
 
</ol>
 
  
[[Image:iRep10.png|center|500px|''Figure 10. Define Report Query for Sub-report'']]
+
This has the effect of limiting the Geospatial records to only those records whose guid is linked to the geospatialinfo of the main report. This is an example of nested reports, i.e. a main report, a subreport, and a sub-subreport.
<div align="center">
 
''Figure 10. Define Report Query for Sub-report''
 
</div>
 
  
<ol>
+
===Other subreport relationships===__NOEDITSECTION__
<ol type="a" start="5">
+
Certain items in {{IMSMANG}} have subsets of data that are contained within them. For example, an education may have education details such as the education type, total audience, and percentage of women and men. Examples of other subreport relationships include:
<li>Click '''OK'''.</li>
 
:The Report query window closes.  
 
<li>Click the [[Image:iRepCompile.png]] button to compile the sub-report.</li>
 
</ol>
 
</ol>
 
  
[[Image:iRepStep05.png|center|500px|''Step 5 – Add Subreport Parameter to Main Report'']]
+
<center>
 +
{| class="wikitable" width="600"
 +
|-
 +
| align="center" colspan="2" | '''Other subreport relationships'''
 +
|-
 +
| width="150pt" | '''Parent item'''
 +
| width="450pt" | '''Child item(s)'''
 +
|-
 +
| Activity  || Activity Device
  
====Step 5 – Add Subreport Parameter to Main Report====
+
Impact survey
  
<p>We created a parameter on the sub-report to connect to the Main report in Step 3, now we need to create a parameter on the Main report as well.  Below is the instructions to create the parameter you need for the Main report:</p>
+
Interviewee
<ol type="a">
 
<li>Make sure you are at the Main report by selecting the name of the Main report from the '''Window''' menu or double-clicking the Main report from the Files pane.</li>
 
<li>Double-click the sub-report box within the Main report.</li>
 
:A window displays four tabs (Common, Sub-report, Sub-report (Other), and All).
 
<li>Select the Sub-report (Other) tab. Click '''Add'''.</li>
 
<li>From the Add/modify parameter window:</li>
 
<ol type="i">
 
<li>Enter ''“$P{object_guid}”'' for the '''Sub-report Parameter Name''' field where ''object_guid'' is the parameter name you created in Step 3 for the Sub-report.  See Column B in the Table – Required Parameters for Sub-report below to determine the parameter name.</li>
 
<li>In the '''Default Value Expression''' field, enter ''$F{guid}''.</li>
 
<li>Click '''OK''' and close the windowthe four tabs.</li>
 
</ol>
 
</ol>
 
  
[[Image:iRepStep06.png|center|500px|''Step 6 – Repeat Step 2-5 for additional sub-reports.'']]
+
Question
  
====Step 6 – Repeat Step 2-5 for additional sub-reports.====
+
|-
 +
| Education || Education details
 +
|-
 +
| Victim || Received Education
  
<p>You can have multiple sub-reports in one Main report.  To add more sub-reports to the Main report, just repeat Step 2 to Step 5.</p>
+
Needs Assessment
<p>Once you have all the sub-reports created for your Main report, you can compile and run your Main report.</p>
 
<p>Below is the table listing typical parameters required for both Main report and Sub-report.</p>
 
  
<table border="1">
+
Cause
<tr>
+
<td>A</td>
+
|-
<td>B</td>
+
| Land || Land Device
<td>C</td>
+
|-
<td>D</td>
+
| Accident || Accident Device
<td>E</td>
+
|-
<td>F</td>
+
| Assistance || Assistance Given
</tr>
+
|-
<tr>
+
| Task || Work Item
<td>If your Main report is</td>
+
|}
<td>Sub-report parameter on Main report</td>
+
</center>
<td>Your Sub-report can be…</td>
 
<td>Parameter on Sub-report</td>
 
<td>Report Query defined on Sub-report</td>
 
<td>Comments</td>
 
</tr>
 
<tr>
 
<td>Location</td>
 
<td>location_guid</td>
 
<td>Hazard,
 
Hazard Reduction,
 
Accident,
 
Victim,
 
MRE, or
 
QC
 
</td>
 
<td>location_guid</td>
 
<td>location.guid = "$P{location_guid}"</td>
 
<td>Relationship is defined as “New” to a Location during the reconciliation. </td>
 
</tr>
 
<tr>
 
<td>Hazard, Hazard Reduction,
 
Accident,
 
Victim,
 
MRE, or
 
QC
 
</td>
 
<td>object_guid</td>
 
<td>Hazard, Hazard Reduction,
 
Accident,
 
Victim,
 
MRE, or
 
QC
 
</td>
 
<td>object_guid</td>
 
<td>links.toGuid = "$P{ object_guid}"</td>
 
<td>Relationship is defined using “Link” during the reconciliation.</td>
 
</tr>
 
<tr>
 
<td>MRE</td>
 
<td>mre_guid</td>
 
<td>MRE Detail</td>
 
<td>mre_guid</td>
 
<td>mre.guid = "$P{mre_guid}"</td>
 
<td>Relationship is defined as “New” to a MRE during the reconciliation.</td>
 
</tr>
 
<tr>
 
<td>Hazard Reduction</td>
 
<td>hazreduc_guid</td>
 
<td>Impact survey,
 
Interviewee,
 
Sector, or
 
Vegetation removal
 
</td>
 
<td>hazreduc_guid</td>
 
<td>hazreduc.guid = "$P{hazreduc_guid}"</td>
 
<td>Relationship is defined as “New” to a Hazard Reduction during the reconciliation.</td>
 
</tr>
 
<tr>
 
<td>Interviewee</td>
 
<td>interviewee_guid</td>
 
<td>Question</td>
 
<td>interviewee_guid</td>
 
<td>interviewee.guid = “$P{ interviewee_guid}”</td>
 
<td>Relationship persisted automatically when Questions are entered for each Interviewee  at Field Report.</td>
 
</tr>
 
<tr>
 
<td>Sector</td>
 
<td>sector_guid</td>
 
<td>Sample</td>
 
<td>sector_guid</td>
 
<td>sector.guid=”$P{sector_guid}”</td>
 
<td>Relationship persisted automatically when Samples are entered for each Sector at Field Report.</td>
 
</tr>
 
<tr>
 
<td>Victim</td>
 
<td>victim_guid</td>
 
<td>Received MREs</td>
 
<td>victim_guid</td>
 
<td>victim.guid = "$P{victim_guid}"</td>
 
<td>Relationship is defined as “New” to a Victim during the reconciliation.</td>
 
</tr>
 
<tr>
 
<td>Task</td>
 
<td>task_guid</td>
 
<td>Work Item</td>
 
<td>task_guid</td>
 
<td>task.guid = "$P{ task_guid}"</td>
 
<td>Relationship is defined when adding a new Work Item to a Task at the Task Editor Window.</td>
 
</tr>
 
</table>
 
  
<p>The following section of the Advance Reports chapter discusses relationships between Items in IMSMA and also provides instructions on how to create a specific report/sub-reports.</p>
+
The process for creating a report on a parent item and its children is the same as any other report/subreport relationship.  
  
[[Category: Administrating IMSMA]]
+
===Example Subreport Relationships===__NOEDITSECTION__
[[Category: i-Report]]
+
{| class="wikitable"
 +
| align="center" style="background:#f0f0f0;"|'''Main Report'''
 +
| align="center" style="background:#f0f0f0;"|'''Subreport can be'''
 +
| align="center" style="background:#f0f0f0;"|'''Value to Pass to Subreport'''
 +
| align="center" style="background:#f0f0f0;"|'''Report Query'''
 +
|-
 +
| Location||Any Item with a Location||location guid||location.guid = "$P{ItemGUID}"
 +
|-
 +
| Any linked item||Any linked Item||Item guid (e.g. Land guid)||links.toGuid="$P{ItemGUID}"
 +
|-
 +
| Activity||Impact survey or Interviewee||Activity guid||hazreduc.guid = "$P{ItemGUID}"
 +
|-
 +
| Interviewee||Question||interviewee guid||interviewee.guid = “$P{ItemGUID}”
 +
|-
 +
| Task||Work Item||Task guid||task.guid = "$P{ItemGUID}"
 +
|-
 +
| Any Item with Geospatial information||GeospatialInfo||geoSpatialInfos||guid IN $P{GeospatialInfoList}
 +
|-
 +
| Geospatial Info||GeoPoint||GeospatialInfo guid||geospatialInfoGuid = "$P{ItemGUID}"
 +
|-
 +
| Any item with devices||Item Device (e.g. AccidentDevice)||Item guid (e.g. Accident guid)||accident.guid = "$P{ItemGUID}" hazard.guid = "$P{ItemGUID}"
 +
|-
 +
| MRE||MREDetail||MRE guid||mre.guid = "$P{ItemGUID}"
 +
|-
 +
| Victim||Needs Assessment||victim guid||victim.guid="$P{ItemGUID}"
 +
|-
 +
| Victim||Cause||victim guid||victim.guid="$P{ItemGUID}"
 +
|-
 +
| Assistance||Assistance Given||victimAssistance.guid||victimAssistance.guid="$P{ItemGUID}"
 +
|-
 +
| Task||Objective||SQL Field list of Objectives||guid IN ($P{SQLList})
 +
|-
 +
| Work Item||Linked Items (Activity, Education, QM, Assistance)||SQL Field list of Items||guid IN ($P{SQLList})
 +
|}
 +
{{NavBox HowTo Standardizing Data Analysis and Information Reporting}}
 +
[[Category:NAA]]

Latest revision as of 20:32, 20 February 2020

Creating Subreports

A subreport is a report within a report; thus, providing a way to generate a report that includes data on the target IMSMA item as well as data on other IMSMA items that are associated to the target IMSMA item. Generally a subreport is used in a situation where you have one or more sets of data relating to a single IMSMA item. A common use case would be a Location report with multiple details bands of different IMSMA items (Land, Activity, Accident, Victim, Education, and QM).

Regardless of what IMSMA data you’re including in your report and subreports, there are 5 basic steps to create a report with subreports:

Step 1 – Create the main report
Step 2 – Add a subreport to the main report
Step 3 – Add a parameter to the subreport
Step 4 – Define the report query for the subreport
Step 5 – Add subreport parameter to the main report

Step 1 – Create the Main Report

Before creating the main report, you will need to determine what data should be included in your report. For example, if you are creating a report about Land with all the Progress Report data, then the target IMSMA item for your main report should be Land and the target data for your subreport should be Activity assuming that Progress Reports are entered into the system as Activity. Below is a list of questions and things to be considered when designing a report.

  • What are all the data to be included on the report?
  • What is the target IMSMA item for the main report? This is the primary data of your report.
  • What is the target IMSMA item for the subreports? This is the secondary data of your report.
  • Determine the relationship between the primary data and the secondary data. How did they get reconciled to one another? How are they linked?

The main report should be created with the IMSMA item determined to be the primary data of your report. The main report is just a basic report and can be created using the steps provided in the Create a Basic iReport Template section.

Step 2 – Add Subreport to the Main report

Once the main report has been created you can add a subreport to the main report. The intent of the subreport is to bring data from a different but related datasource into the main report. For example, you could include Activity data on a report about Land. Below are the instructions to create a subreport:

  1. On the main report, from the Palette pane, select Subreport and drag it to the desired band on the iReport template (normally this is the Detail band).
    Subreport Palette
    Subreport Palette
  2. Release the button and the window below displays.
    Add Subreport to the Main report
  3. Click Next to define a new subreport unless you have an existing report that you would like to use for subreport.
  4. Select the desired iReport Template to apply (Blank is recommended).
    Select the desired iReport Template
  5. Select from the Connection/Data Source list. This should be the IMSMA item determined as the secondary data of your report. For example, if you are creating a report about Land with Progress Reports, then “Hazard Reduction” should be the data source for the subreport. Click Next.
    Select the desired datasource
  6. Select the attributes to be included in your subreport. Click Next.
    Select the desired fields for the subreport
  7. Select the fields to group by. This step is not required. Click Next.
    Select the fields to group by
  8. Enter a name for the subreport or use the default. Choose Next.
    Enter a name for the subreport
  9. Select Use the same connection used to fill master report. Click Finish.
    Use same connection
  10. The subreport displays.

Step 3 – Add Parameter to Subreport

To connect a subreport to the main report, we next need to create a parameter for passing the identification (guid) of the primary IMSMA item between the subreport and the main report. In the Report Inspector on the subreport, add a Parameter to hold the guid of the IMSMA item on the main report. It is recommended to add a fairly generic parameter name such as ItemGUID so that the subreport can be more easily re-used.

  1. From the Report Inspector, right click on the Parameter tree and choose Add Parameter.
    Add Parameter
  2. In the Properties pane, enter a parameter name (e.g. ItemGUID} and edit any other properties. Normally it is not required to edit anything other than the name, you might however want to deselect the Use as a prompt option.
    Add Parameter
  3. Once the parameter is added it will be available in the Report Inspector and can be referenced as $P{parametername}. For example:
$P{ItemGUID}

Step 4 – Define Report Query for Subreport

The next step is to create a report query for the subreport you just created in Step 2 to define how the IMSMA item on the main report is related to the IMSMA item on the subreport. Typically the subreport report query will receive the guid from the main report via the parameter created in Step 3 and then use it to limit items in the subreport to those linked to the main report. Below is the instructions on how to define the report query:

  1. Open the report query window.
  2. From the report query window, select ImsmaQuery from the query language list.
  3. Enter a report query filter using the parameter defined above to limit the objects according to the main report object. The most common report query filter would be to filter to only linked objects. For example links.toGuid="$P{ItemGUID}". In this step, the Report Query tells the subreport to return only rows that are linked to the guid of the item in the main report via the link table. Other combinations of report query filters can be used on subreports beyond the link table. These are documented in the Possible Subreport Relationships section below.
  4. Click OK. The report query window closes.
  5. Save the subreport.

Step 5 – Link the Subreport to the Main Report

Now that both the main and the subreport are ready, the only thing that remains to be done is linking the two together. Below are the instructions to link the two reports:

  1. Make sure you are at the main report by selecting the name of the main report from the tabs at the top of the iReport Designer canvas pane.
  2. Select the subreport box within the main report.
    Select the Subreport on the main report
    Select the Subreport on the main report
  3. On the Properties pane for the Subreport, select the Parameter selector.
    Subreport properties
    Subreport properties
  4. Add a parameter and type exactly the name of the subreport parameter created in step 3 (e.g. ItemGUID)
    Add a parameter
    Add a parameter
  5. For the value expression, select the appropriate field to include in the parameter. Normally this is $F{guid} but other choices are available.
    Select the appropriate field
    Select the field to include in the parameter
  6. Click OK and close Subreport Parameters window.

You are now ready to run your main report. Running (i.e. previewing) the main report will automatically run the subreport(s) as well, and the data from the main as well as from the subreport(s) will be included in the output.

Kinds of Subreports

There are three main kinds of relationships in IMSMA on which subreports can be generated from IMSMA data. These are:

  • Location relationship
  • Link relationship
  • Geospatial relationship
  • Other relationship

Location relationship subreports

Because each of the main items in IMSMANG, Accident, Activity, Assistance, Education, Land, QM, and Victim, must be reconciled to a Location during the data entry phase, each of these objects has a relationship with Location and can thus be a subreport on a Location main report. Since all accidents, land, activities, educations, QMs, assistances, and victims are associated with a single location each record knows what location it is related to based on the location guid field. When creating a report where the main report is a Location and the subreport is one of the associated objects the Location's guid is passed to the subreport in a parameter and the subreport can use a special ImsmaQuery language syntax to limit the subreport data to those associated with the main report's location:

location.guid = "$P{parametername}"

The location guid field in the subreport item table contains the guid of the location to which the item record is associated. The figure below shows an example of a location and the accident and land that are associated to the location. Notice that the location_guid value (1234-1234) in the accident and land are identical to the location_guid of the location.

location_guid example

location_guid example

To create a subreport using the Location relationship:

  1. From the main "Location" report, pass the location guid to the subreport in a parameter (e.g. in a parameter called ItemGUID).
  2. Create a parameter on the subreport with the same name as in #1.
  3. In the subreport for the related item (e.g. a Victim) use the parameter in the following ImsmaQuery language syntax
location.guid="$P{parametername}"

This has the effect of limiting the subreport records to only those records that are associated to the location from the main report.

Link relationship subreports

In addition to the Location relationship, the main items in IMSMANG can also be linked with one another during the reconciliation process. This is how, for example, Activities are linked with Land in the IMSMANG database. Accidents, land, activities, educations, assistances, QMs, and victims may be related to one another via links. For example, a victim may be associated to an accident in a particular land. If these relationships are known, IMSMA users may define these links while reconciling the Data Entry Form. This special relationship can also be modeled in iReport using a report and subreport(s).

The process for creating a report on an item and its linked items is similar to the process for creating a report on items with a Location relationship. The item in the main report is the primary item for which you would like to find linked items. The subreport would return the records for the particular item that is linked to the primary item. The key difference is the query used in the subreport.

To create a subreport using the link relationship:

  1. From the main report, pass the guid of the main report object to the subreport in a parameter (e.g. pass an accident's guid in a parameter called ItemGUID).
  2. Create a parameter on the subreport with the same name as in #1.
  3. In the subreport for the related item (e.g. a Victim) use the parameter in the following ImsmaQuery language syntax
links.toGuid="$P{parametername}"

This has the effect of limiting the subreport records to only those records that have a link to the guid or object passed from the main report.

Geospatial relationships

In addition to Location and Link relationships, many objects in IMSMA can store geospatial/geographic information (i.e. point/polygon information). This relationship with the geospatial data can be modeled in a report/subreport relationship for any item that has geospatial information associated with it. To include point/polygon information on an object's main report, follow 3 basic steps:

  • Step 1: Create a main report for an object with geospatial info
  • Step 2: Create a GeospatialInfo subreport on the main report, i.e. a report using the GeospatialInfo datasource
  • Step 3: Create a Geopoint subreport on the GeospatialInfo report, i.e. a report using the Geopoint datasource

Step 1: Create a main report for an object with geospatial info

  • Create a main report with an object that has geospatial information (e.g. Land).
  • Ensure that the geospatialInfos field is added to the main report.

Step 2: Create a GeospatialInfo subreport on the main report

  • On the main report, add a subreport using the GeospatialInfo datasource
  • Pass the geospatialInfos field to the subreport in a parameter (e.g. GeospatialInfoList). Note: instead of passing the $F{guid} field to the parameter, the parameter value should be $F{geospatialInfos}
  • In the GeospatialInfo subreport use the parameter in the following ImsmaQuery language syntax
guid IN $P{parametername}

Step 3: Create a Geopoint subreport on the GeospatialInfo report

  • On the Geospatialinfo subreport, add a subreport using the Geopoint datasource
  • Pass the guid field to the subreport in a parameter (e.g. GeospatialGUID). Note: Pass the $F{guid} field NOT the $F{geospatialInfos} value.
  • In the Geopoint subreport use the parameter in the following ImsmaQuery language syntax
geospatialinfoguid IN $P{parametername}

This has the effect of limiting the Geospatial records to only those records whose guid is linked to the geospatialinfo of the main report. This is an example of nested reports, i.e. a main report, a subreport, and a sub-subreport.

Other subreport relationships

Certain items in IMSMANG have subsets of data that are contained within them. For example, an education may have education details such as the education type, total audience, and percentage of women and men. Examples of other subreport relationships include:

Other subreport relationships
Parent item Child item(s)
Activity Activity Device

Impact survey

Interviewee

Question

Education Education details
Victim Received Education

Needs Assessment

Cause

Land Land Device
Accident Accident Device
Assistance Assistance Given
Task Work Item

The process for creating a report on a parent item and its children is the same as any other report/subreport relationship.

Example Subreport Relationships

Main Report Subreport can be Value to Pass to Subreport Report Query
Location Any Item with a Location location guid location.guid = "$P{ItemGUID}"
Any linked item Any linked Item Item guid (e.g. Land guid) links.toGuid="$P{ItemGUID}"
Activity Impact survey or Interviewee Activity guid hazreduc.guid = "$P{ItemGUID}"
Interviewee Question interviewee guid interviewee.guid = “$P{ItemGUID}”
Task Work Item Task guid task.guid = "$P{ItemGUID}"
Any Item with Geospatial information GeospatialInfo geoSpatialInfos guid IN $P{GeospatialInfoList}
Geospatial Info GeoPoint GeospatialInfo guid geospatialInfoGuid = "$P{ItemGUID}"
Any item with devices Item Device (e.g. AccidentDevice) Item guid (e.g. Accident guid) accident.guid = "$P{ItemGUID}" hazard.guid = "$P{ItemGUID}"
MRE MREDetail MRE guid mre.guid = "$P{ItemGUID}"
Victim Needs Assessment victim guid victim.guid="$P{ItemGUID}"
Victim Cause victim guid victim.guid="$P{ItemGUID}"
Assistance Assistance Given victimAssistance.guid victimAssistance.guid="$P{ItemGUID}"
Task Objective SQL Field list of Objectives guid IN ($P{SQLList})
Work Item Linked Items (Activity, Education, QM, Assistance) SQL Field list of Items guid IN ($P{SQLList})