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 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.

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, and—by using Arsenale Dataplane 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.

  1. Install the ScriptRunner for Jira add-on.
  2. 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.

    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.

  3. After creating the new custom ScriptRunner field, go to Jira's Administration » Add-ons page.
  4. Click on Script Fields under the ScriptRunner section of the left sidebar.
  5. Click Edit.
  6. Enter the following script:

    ArrayList sprintList = (ArrayList)getCustomFieldValue("Sprint")
    int numSprints = (sprintList != null) ? sprintList.size() : 0;
    
    return (numSprints > 0) ? sprintList.get(numSprints - 1).getName() : ""
  7. 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.
  8. Reindex Jira. This is necessary whenever adding a new custom field in Jira.
  9. 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:

OptionSelectionComments
SearchanySelect 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 BySprint LatestSelect the name of the new ScriptRunner custom field just added.
Statuses to Includeinclude "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 OfTime 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.

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: 

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:  

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:

OptionSelectionComments
SearchanySelect 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 OfSprint LatestSelect 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.

Page Contents

Copyright © 2017 Arsenale Systems, Inc. · All rights reserved · Contact Us · Powered by Atlassian Confluence