This is the documentation for Dataplane Reports 3.3. - 4.0.x.
If you are using an earlier version of the app, you can access the documentation from the version index page.
Roll up epic time estimates
Overview
For project and development managers working with Jira Software and agile teams, it is very difficult in Jira to get a picture of the total amount of time remaining to complete outstanding epics when the work is spread across a multitude of user stories, sub-tasks, and possibly even separate projects. There's no visibility into how those estimates roll up to the epic they are a part of.
Using Dataplane Reports and the Jira Misc Custom Fields (JMCF) or ScriptRunner for Jira app, you will quickly create comprehensive reports tracking time across all your Jira Software epic initiatives.
For details on using Jira Misc Custom Fields (JMCF) with Dataplane Reports, see Reporting on Calculated Values with JMCF. Review Writing scripts in JMCF using the Groovy language for additional information on JMCF app and script use.
For details on using ScriptRunner for Jira with Dataplane Reports, see Reporting on Calculated Values with ScriptRunner. For additional information, review the ScriptRunner Scripted Fields documentation.
Configuring your Jira instance
This solution assumes you are using Jira Software and its Epic, Story, and Task issue types. However, the same general approach can be used for any set of issues and sub-task issues associated with an issue representing a parent feature.
In Jira, install the Jira Misc Custom Fields (JMCF) or ScriptRunner for Jira app.
Create a new JMCF custom field of type Calculated (scripted) Text/Html Field, or a ScriptRunner custom field of type Scripted Field. Name the field Parent Epic or something similar. Select Free Text Searcher for the Search Template option for this field, since the field will be returning text values. We are going to use this field to report on the epic that each issue is associated with, regardless of whether the issue is a user story or a sub-task issue.
For a JMCF custom field, use the following script:
import com.atlassian.jira.issue.Issue if (issue.isSubTask()) { issue = issue.getParentObject() } Issue epicIssue = issue.get("Issue Type").getName().equals("Epic") ? issue : issue.getEpic() return epicIssue != null ? epicIssue.get("Epic Name") : nullFor a ScriptRunner custom field, use the following script:
import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.issue.Issue CustomFieldManager fieldManager = ComponentAccessor.getCustomFieldManager() CustomField epicLinkField = fieldManager.getCustomFieldObjectByName("Epic Link") CustomField epicNameField = fieldManager.getCustomFieldObjectByName("Epic Name") if (issue.isSubTask()) { issue = issue.getParentObject() } Issue epicIssue = (issue.getIssueTypeObject().getName().equals("Epic")) ? issue : issue.getCustomFieldValue(epicLinkField) return epicIssue != null ? epicIssue.getCustomFieldValue(epicNameField) : nullReindex Jira. This is necessary whenever adding a new custom field in Jira.
Once Jira is reindexed, click Dataplane Reports > Administration > Configuration. On the Indexer tab, click the Sync Index button to have Dataplane register the newly added custom field.
We're now ready to create the Dataplane report.
Creating the report
In the Dataplane report directory, under New Report, select the Advanced category of reports.
Select the Sum Numeric Field Report.
For report configuration options, set up your report as follows:
Option | Selection | Comments |
|---|---|---|
Search | any | Select your Jira projects, project categories, and filters of interest. Or click the JQL tab in that field to enter a command using Jira Query Language (JQL). |
Segment By | Parent Epic | Select the newly added JMCF or ScriptRunner custom field. |
Statuses to Include | all, | Select which Jira issue statuses you want to include in the report. Select all statuses in your Jira instance except Resolved and Closed. |
Value Of | Time Estimate (Hours) | We want the estimated time remaining for the issues in the epic. Alternatively, you could select Original Estimate (Hours) to report on the total time estimated to complete all the epic work or Time Spent (Hours) to report on the hours of work completed so far. If you select one of these other time fields, you'll want to change the Statuses to Include options so they're sensibly matched (for example, including Resolved and Closed for Original Estimate (Hours). |
Chart Type | or | Select the Bar Chart or Vertical Bar Chart. |
Click the Run Report button to create your report.
You'll see a nice roll-up of the time remaining to complete all the stories and sub-tasks for each epic.
Segmenting results
The Segment By field in Dataplane reports lets you break down report results by any number of different Jira fields or properties to see more granularity.
To check that we're properly including the time for all stories and sub-tasks within each epic, add Issue Type to Segment By in the report configuration. This will allow us to segment the results by the new JMCF or ScriptRunner custom field Parent Epic and further slice the data by Issue Type.
Click Run Report again, and the results will look something like this:
Comparing time allocation across epics
Among the various Chart Type options in a report configuration, the Normalized Bar Chart and Normalized Vertical Bar Chart are great tools for comparative analysis of where time is remaining or was spent across epics.
These chart types visualize the report results on a percentage basis instead of using absolute units of time, allowing for easy epic-to-epic comparisons.
Here's our same report run using a Normalized Vertical Bar Chart:
