Versions Compared
Key
- This line was added.
- This line was removed.
- Formatting was changed.
Overview
For development teams, tracking key metrics across sprints is imperative to fine tuning the agile process. While Jira Software provides many useful reports to look at the progress of current sprints, it provides limited insight into the performance and metrics of past team effort.
With Dataplane Reports you can easily run a number of different reports to compare—across sprints—time logged, story points, issue types and counts or any number of additional metrics.
Info |
---|
When running a report utilizing Jira's Sprint field, or when viewing a single Jira issue, you'll notice that the Sprint field returns a list of all sprints that the issue has ever been added to—not just the sprint in which work on the issue was actually completed and the issue resolved. This confusion is furthered by language in the Agile panel when viewing a Jira issue, stating the list of "Completed Sprints" in which an issue was assigned. By "Completed Sprints" Jira Software means only that the sprints themselves were completed. |
In this Solutions Guide article, you'll learn how to easily compare metrics across sprints using Dataplane Reports, and—by using Dataplane Reports and the ScriptRunner for Jira add-on—how to associate each issue with only the one sprint in which the issue's work was completed and the issue resolved.
Configuring Your Jira Instance
As noted above, creating Dataplane reports using Jira's Sprint field directly can result in distorted metrics if issues were in multiple sprints. To get around this, we're going to create a custom scripted field to report on only the most recent sprint that each issue is associated with.
- Install the ScriptRunner for Jira add-on.
Create a new ScriptRunner custom field ("Scripted Field") in Jira, called "Sprint Latest" (or something similar). Select Free Text Searcher for the "Search Template" option for this field, since the field will be returning text values.
Info See our Reporting on Calculated Values with ScriptRunner documentation for details on using ScriptRunner custom fields with Dataplane.
You may also wish to review the general ScriptRunner primer on how to work with Scripted Fields.
- After creating the new custom ScriptRunner field, go to Jira's Administration » Add-ons page.
- Click on Script Fields under the ScriptRunner section of the left sidebar.
- Click Edit.
Enter the following script:
Code Block ArrayList sprintList = (ArrayList)getCustomFieldValue("Sprint") int numSprints = (sprintList != null) ? sprintList.size() : 0; return (numSprints > 0) ? sprintList.get(numSprints - 1).getName() : ""
- Note that the ScriptRunner static typechecker may display a red "x" on the last line of the script, similar to the screenshot below. This warning can be safely ignored. As described in the ScriptRunner documentation, Groovy is a dynamically-typed language and the ScriptRunner static typechecker has limitations that can create false positives when a dynamic script is analyzed using static typechecking.
- Reindex Jira. This is necessary whenever adding a new custom field in Jira.
- Once Jira is reindexed, click on Dataplane Reports » Administration, and on the main Administration panel for Dataplane, click on Sync Index to have Dataplane register the newly added custom field.
We are now ready to create a Dataplane report.
Time Spent per Sprint
Let's create a report showing the time spent across multiple sprints.
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 on the JQL tab in that field to enter a command using Jira Query Language (JQL). |
Segment By | Sprint Latest | Select the name of the new ScriptRunner custom field just added. |
Statuses to Include | include "Resolved" and "Closed" | Select which Jira issue statuses you wish to include in the report. Select "Resolved" and "Closed" to report on just those issues that have been completed. |
Value Of | Time Spent (Hours) | We want the time that was spent on the issues in the sprint. Alternatively you could select "Original Time Estimate (Hours)" to report on the total time that was estimated to complete all the work. |
Chart Type | or | Select the Bar Chart or Vertical Bar Chart. |
Now click on the Run Report button to create your report.
You will see a nice overview of the time logged in each sprint.
To adjust the number of individual sprints shown, change the Max Categories option as shown here:
Sorting Results by Sprint Order
For the type of report in this example, Dataplane orders the results by magnitude rather than sequentially by sprint (date) order.
In order to sort the results instead by sprint order, use a Dataplane Customizer Script and specify the desired ordering using the category
and order
keywords.
Tip |
---|
If you're not yet familiar with using Customizer Scripts in your reports, read through Customizing Reports with Scripts for some background and then return back here to get going. |
In this example, we set the order explicitly for each planned and expected sprint:
Code Block |
---|
customizeChart { int sprintNo = 1 category "Sprint 5" order sprintNo++ category "Sprint 6" order sprintNo++ category "Sprint 7" order sprintNo++ category "Sprint 8" order sprintNo++ category "Sprint 9" order sprintNo++ category "Sprint 10" order sprintNo++ category "Star Fruit" order sprintNo++ category "Durian" order sprintNo++ category "Bosch Pear Sprint" order sprintNo++ category "Sprint 11" order sprintNo++ // keep going for expected future sprints category "Sprint 12" order sprintNo++ category "Sprint 13" order sprintNo++ category "Sprint 14" order sprintNo++ // etc... } |
With the above Customizer Script, the sprints are now custom ordered on the domain axis:
Dataplane Customizer Scripts are based on the Groovy scripting language, which gives you lots of flexibility to customize your reports programmatically.
For instance, if you name your sprints using a specific date pattern—such as "Sprint 2016-01-04" and "Sprint 2016-01-18" for bi-weekly sprints—use a "for" loop to programmatically define the sprint order:
Code Block |
---|
customizeChart { int START_DAY = 4 // start day = 4th (Monday, Jan 4th) int START_MONTH = 0 // start month = Jan int START_YEAR = 2016 int TOTAL_SPRINTS = 26 int SPRINT_DURATION_DAYS = 14 def startDate = new GregorianCalendar(START_YEAR, START_MONTH, START_DAY) for (int sprintNo = 1; sprintNo <= TOTAL_SPRINTS; sprintNo++) { def sprintName = "Sprint " + String.format("%4d-%02d-%02d", startDate.get(Calendar.YEAR), startDate.get(Calendar.MONTH), startDate.get(Calendar.DAY_OF_MONTH)) // set the order on the domain axis for the sprint (data series) with this name category sprintName order sprintNo // increment to start date of the next sprint startDate.add(Calendar.DAY_OF_MONTH, SPRINT_DURATION_DAYS) } } |
Segmenting Results
The Segment By field in Dataplane reports allows you to break down report results by any number of different Jira fields or properties in order to see more granularity.
Add "Issue Type" to the Segment By field in order to see the time spent per issue type across each sprint.
Click Run Report again, and the results will look something like this:
Now let's segment the results further. Add both "Issue Type" and "Priority" to the Segment By option.
Click Run Report again, and the results will look something like this:
Simplifying Comparison Across Sprints
Among the various Chart Type options in a report configuration, the "Normalized Bar Chart" and "Normalized Vertical Bar Chart" are great tools for doing a comparative analysis of where time was spent across multiple sprints.
These chart types visualize the report results on a percentage basis instead of using absolute units of time allowing for easy sprint-to-sprint comparisons.
Here we ran the same report using a "Normalized Vertical Bar Chart":
Sprint Issues by Type
In this example, we'll create a new report to show the count of sprint issues by type.
Creating the Report
In the Dataplane report directory, under New Report, select the Advanced category of reports.
Select the Current Issue Values 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 on the JQL tab in that field to enter a command using Jira Query Language (JQL). |
Value Of | Sprint Latest | Select the name of the new ScriptRunner custom field. |
Segment By | Issue Type | Select Issue Type to group the results by this issue property. |
Chart Type | Select the Multiple Pie Chart. |
Now click on the Run Report button to see a nice overview of the various sprints, segmented by issue type.
If you move your cursor over one of the pie sections, you'll see the number of issues in that individual segment of report results.
Panel | ||
---|---|---|
| ||
Page Contents
|