KPI-Reporting in Jira

8. Okt. 2020 | Aufgaben- und Projektmanagement, Jira Service Desk, Jira Software

Jira ist viel mehr als nur eine Projektmanagementsoftware. Es können damit zum Beispiel auch interne Prozesse abgewickelt, Arbeitszeiten rapportiert oder – mit Jira Service Desk – ein komplettes IT Service Desk damit betrieben werden. Ein weiterer Anwendungsfall ist Business Intelligence oder die Auswertung von Key Performance Indicators (KPIs) in Jira. Durch die Arbeit in Jira entstehen viele Daten, die ausgewertet werden können. Wie das gemacht werden kann, ist im folgenden Blogbeitrag beschrieben.

Jira das Rechnen beibringen

In Jira können standardmässig Nummer-Felder verwendet werden. Allerdings können mit diesen keine Rechenoperationen getätigt werden. Möchten Sie jedoch Berechnungen auf Basis von numerischen Feldern machen, ist eine App wie Jira Misc Custom Fields (JMCF) notwendig. Damit können Sie für ein Feld Formeln definieren, das auch die Werte anderer Felder miteinbeziehen kann:

Wollen Sie komplexere Auswertungen oder Daten via REST abfragen, z.B. alle Buchungen eines bestimmten Accounts der Rapportierungsapp Tempo Timesheets auswerten, ist die App Script Runner notwendig. Damit können sogenannte „Scripted Fields“, die Groovy Scripts wie dasjenige unten enthalten können, erstellt werden. Die Berechnungen werden wie bei der Lösung oben bei jedem Laden eines Vorgangs durchgeführt.

Das folgende Beispiel berechnet die Reststunden eines Projekts anhand eines ursprünglichen Budgets und aller gebuchten verrechenbaren Stunden auf allen Vorgängen in Jira mit dem Account für das Projekt:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.atlassian.jira.issue.worklog.Worklog

def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchService = ComponentAccessor.getComponent(SearchService)
def issueManager = ComponentAccessor.getIssueManager()
def issueService = ComponentAccessor.getIssueService()
def user = ComponentAccessor.getJiraAuthenticationContext().getUser()
def workLogManager = ComponentAccessor.getWorklogManager()

import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.tempoplugin.core.workattribute.api.WorkAttributeValueService
import com.tempoplugin.core.workattribute.api.WorkAttributeService

@WithPlugin("is.origo.jira.tempo-plugin")

@PluginModule
WorkAttributeService workAttributeService

@PluginModule
WorkAttributeValueService workAttributeValueService

String account = getCustomFieldValue("Account")

def log = Logger.getLogger("ch.zuara.totalRemainingHoursScriptLogger")
log.setLevel(Level.INFO)
 
def originalEstimatedHours = 0.0d
if (issue.originalEstimate != null) {
 originalEstimatedHours = issue.originalEstimate / 3600
} else {
 log.warn ("Original estimate not set. Cannot calculate value.")
 return 0.0d
}

if (account != null) {
 log.info("Account:" + account)
 def accountKey = account.substring(account.indexOf("(")+1,account.indexOf(")"));
 log.info("AccountKey:" + accountKey)
 
 // edit this query to suit
 def query = jqlQueryParser.parseQuery("Account = " + accountKey)

 def results = searchService.search(user,query, PagerFilter.getUnlimitedFilter())
 log.info("Total issues: ${results.total}")
 Double totalBillableHours = 0.0d;
 Double totalSpentHours = 0.0d;
 results.getResults().each { documentIssue ->
 log.warn(documentIssue.key)
 
 def logsForIssue = workLogManager.getByIssue(documentIssue)

 for(Worklog worklog : logsForIssue)
 {
 def attributeBillableSeconds = workAttributeService.getWorkAttributeByKey("BILLABLE_SECONDS").returnedValue
 def workAttributeValue = workAttributeValueService.getWorkAttributeValueByWorklogAndWorkAttribute(worklog.id, attributeBillableSeconds.id)
 def worklogBillableHours = workAttributeValue.returnedValue?.value as Double
 def worklogSpentHours = worklog.getTimeSpent() / 3600 as Double
 if (worklogBillableHours == null) { 
 totalBillableHours += worklogSpentHours
 } else {
 totalBillableHours += worklogBillableHours / 3600
 }
 totalSpentHours += worklogSpentHours
 }
 }
 log.info ("Total estimated hours:": originalEstimatedHours)
 log.info ("Total hours spent:": totalSpentHours)
 log.info ("Total billed hours spent:": totalBillableHours)
 return (originalEstimatedHours - totalBillableHours).round(2)
} else {
 log.warn ("Account is not set on issue. Cannot calculate value.")
 return 0.0d
}

Zahlen zusammentragen

Sind die Berechnungen auf den Jira Vorgängen erstmal gemacht, müssen diese noch gemäss den definierten Key Performance Indicators aggregiert und übersichtlich dargestellt werden. Eine sehr einfache und schnelle Möglichkeit, Zielwerte zu kontrollieren, ist die App Performance Objectives. Sie ermöglicht es durch einfach konfigurierbarer Gadgets, Werte diverser Gruppen von Issues, die via JQL definiert werden können, zu aggregieren, Zielwerte zu definieren und alle KPIs auf einem Dashboard und die Zielerreichung auf einem Jira Dashboard übersichtlich darzustellen:

Die Berechnungen werden bei jedem Laden des Dashboards live gemacht. Bei grossen Datenmengen und komplexeren Auswertungen kann dies zu sehr langen Ladezeiten führen. Eine Alternative, die sowohl mehr Möglichkeiten bietet wie auch die Daten vorprozessiert, ist die App Exply des deutschen Herstellers Sandstorm. Sie präsentiert sich als ausgewachsene BI-Lösung mit zahlreichen eigenen Gadgets und einer eigenen Dashboard-Engine, die aber auch in diejenige von Jira integriert werden kann.

Fazit

Wenn Sie Ihre Daten in Jira direkt auswerten wollen, gibt es dafür wie wir in diesem Blogbeitrag gesehen haben diverse Möglichkeiten. Haben Sie einfache Anforderungen, reichen Ihnen vielleicht bereits die App Jira Misc Custom Fields (JMCF) für die Berechnungen in Kombination mit Performance Objectives und die Darstellung auf einem Dashboard.

Schnell steigt jedoch die Komplexität und Sie wollen grössere Datenmengen aggregieren, Zeitbuchungen auswerten oder mehr Berechnungs- und Darstellungsmöglichkeiten für Ihr KPI-Reporting. In diesem Fall greifen Sie am besten zur App Script Runner, die Ihnen durch die Groovy-Engine fast unbegrenzte Berechnungsmöglichkeiten sowie die Anbindung externer Schnittstellen bietet und ergänzen diese mit einer Business-Intelligence App wie Exply für die Darstellung Ihrer Inhalte.

Haben Sie Fragen oder Anregungen zum diesem Blog-Beitrag? Dürfen wir Sie unterstützen?
Schreiben Sie uns auf hallo@zuara.ch oder rufen Sie uns an: 031 302 60 00. Wir freuen uns auf Ihre Anfrage!

Der Autor:

Kevin Suter
kevin.suter@zuara.ch

Direkt: +41 79 307 60 01

      

Weitere Fachartikel und Neuigkeiten von Zuara

Confluence Server/Data-Center in Microsoft Teams integrieren

"Vergessen Sie Kontext-Wechsel und mühsames Suchen von passenden Confluence-Inhalten in Ihren Teams-Channels!"+Sie möchten nicht immer zwischen Microsoft Teams und Ihrem Confluence hin- und herwechseln? Wollen Sie bestimmte Confluence-Seiten direkt mit einem...

Atlassian Testumgebungen automatisieren

Einleitung und Problemstellung Es gibt viele Situationen, in denen wir schnell eine Testinstanz von Jira oder Confluence benötigen: Demonstrationen für Verkaufsgespräche, Testsysteme für Konfigurationen, Proof of Concepts, Schulungssysteme, Entwicklungssysteme für...

In Confluence Finden, statt ewiges Suchen

Haben Sie auch schon versucht, in Confluence etwas zu finden und dafür kostbare Zeit verschwendet?  Die Indexierung von Confluence ist wirklich ein grosser Vorteil, kann aber auch dazu führen, dass das Gesuchte durch die Masse an Ergebnissen einfach nicht gefunden...

Dateien auf Share direkt aus Confluence heraus öffnen mit Zuara User Makro

Einleitung Hatten Sie bereits einmal das Problem, dass Sie eine Datei aus Confluence aus verlinken wollten, die auf einem Share liegt? Die meisten Browser verhindern dies aus Sicherheitsgründen und je nach Browser ist die Syntax der geforderten URL unterschiedlich....

Digital Workplace/Home-Office – wie verteilte Zusammenarbeit gut funktioniert und wie nicht

Eines vorweg: Ja, ich weiss, es schreiben zur Zeit alle über den "Digital Workplace" und die Zusammenarbeit aus dem Home-Office heraus. Schliesslich ist das gerade DAS Trend-Thema bedingt durch die Corona-Krise. Und viele Organisationen haben gemerkt, dass sie in...

Alles rund um Stichwörter in Confluence

Mithilfe von Stichwörtern in Confluence können Sie Ihre und auch die Effizienz Ihres kompletten Teams erhöhen. Viele User erstellen eine Seite, einen Blog-Artikel oder auch Anhänge, ohne diese mit einem Stichwort zu versehen. Je mehr Inhalte erstellt werden, umso...

Jira App-Entwicklung: JQL verarbeiten ohne Kopfschmerzen

Die Herausforderung In vielen Projekten haben wir Kundenanforderungen, die mit den normalen Bordmitteln von Jira nicht mehr zu erfüllen sind. Häufig ist die einfachste Lösung, selbst ein kleines Add-on zu implementieren. Eine solche Anforderung, die wir kürzlich...

Confluence Nutzerstatistiken – damit Sie wissen, welche Seiten beliebt sind

Möchten Sie herausfinden, welche Seiten in Ihrem Confluence wie oft besucht werden, welche Bereiche (Spaces) beliebt sind, in welchen Bereichen die meisten Updates gemacht werden und welche Benutzer am aktivsten Inhalte bearbeiten? Dann sind Sie hier richtig. Wir...

Word Integration in Confluence

Eine häufige Anforderung bei der Arbeit mit Confluence ist die Integration von Office. Office ist bei vielen Unternehmen im Einsatz und bei einer Einführung von Confluence stellt sich dann die Frage, wie sich die Microsoft-Welt mit der Atlassian-Welt verbinden lässt....

Alle im Homeoffice – auch Schülerinnen und Schüler

Aus aktuellem Anlass stellt sich für viele Schulen und Organisationen die Frage, wie ihre Mitarbeitenden weiterhin möglichst reibungslos zusammenarbeiten können und wie der Schulunterricht fortgesetzt werden kann. Teams und Klassen haben die folgenden Ansprüche, um...