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

Atlassians Cloud Roadmap

Einleitung Falls Sie einen Wechsel in die Atlassian Cloud in Erwägung ziehen oder diese bereits nutzen, interessiert Sie vielleicht auch, welche Neuerungen Atlassian für die Cloud kürzlich veröffentlicht hat, plant oder gerade daran arbeitet. In diesem Blogbeitrag...

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

Atlassian setzt auf Cloud

Atlassian setzt seine Cloud-First Strategie in die Tat um: Ab dem 2. Februar 2021 wird Atlassian keine neuen Server-Lizenzen für seine Produkte mehr verkaufen. Die bestehenden Server-Lizenzen können ab diesem Termin noch für maximal 3 Jahre erneuert werden. Für...

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

Datenstandort wählen für alle Atlassian Cloud Modelle

Bis anhin konnte nur beim Modell Enterprise der Datenstandort der Cloud-Produkte von Atlassian ausgewählt werden. Die Cloud-Produkte von Atlassian werden immer attraktiver. Jetzt hat Atlassian eine weitere Ankündigung gemacht. Der Datenstandort kann in der Zukunft für...

Super-Dashboards und -Cockpits in Confluence und Jira

Im digitalen Alltag verwenden wir verschiedenste Tools. Da kann es schnell vorkommen, dass man die Übersicht verliert. Deshalb ist es eminent, dass Informationen aus unterschiedlichen Systemen zusammengezogen und passend aufbereitet werden. Wir benötigen also ein...

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

SAFe® Enablers für Prozessoptimierungen nutzen

Agile Vorgehensweisen implementieren einen kontinuierlichen Verbesserungs- und Anpassungsprozess. Viele Organisationen setzen diesen Prozess bereits erfolgreich auf der Ebene der Produkt-Entwicklung und der direkten Leistungserbringung ein. Gleichzeitig schläft die...

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

Quo Vadis Jira Service Desk?

Ausgangslage Am 9. November hat Atlassian das neueste Produkt angekündigt: Jira Service Management. Es handelt sich dabei nicht um ein komplett neues Produkt, sondern um eine Weiterentwicklung von Jira Service Desk. Atlassian will damit auf geänderte Anforderungen und...

Pin It on Pinterest

Share This