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

Wo befinden sich meine Daten bei Atlassian Cloud?

Wie im Blog «Atlassian setzt auf Cloud» beschrieben, wird ab dem 2. Februar 2021 keine neue Server-Lizenz für die Atlassian Produkte verkauft und die Lizenzen können maximal noch für 3 Jahre gelöst werden. Anschliessend stellt Atlassian das Produkt ein. Die Zeit bis...

Effizientere Sitzungsgestaltung

Wie viele Stunden haben Sie schon verschwendet mit unnötigen, nicht effizienten Sitzungen? Haben Sie sich auch schon gefragt, warum Sitzungen abgehalten und Entscheidungen getroffen werden, die sowieso nichts bringen? Seit meinem Start in der Berufswelt habe ich viele...

Confluence als Innovationsplattform

Confluence kann so erweitert werden, dass es Organisationen als Innovationsplattform dient. Alle Mitarbeitenden können neue Ideen zur Verbesserung von Angeboten oder internen Prozessen liefern. Diese Ideen werden aufbereitet, bewertet und priorisiert. Auch 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....

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

Denkanstösse zum Arbeiten mit E-Mails und Chat

Schon seit 10 Jahren wurde der Tod von E-Mail angekündigt. E-Mail hat jedoch weiterhin ihren Platz in der heutigen Welt. Chat-Lösungen und E-Mail existieren im Unternehmen nebeneinander. In diesem Blog zeige ich Ihnen, wann und wie Sie am besten welches Tool...

Portfolio for JIRA® – Strategische Projektplanung direkt in JIRA®

Portfolio for JIRA® ist ein Add-on für die Projektmanagement- und Issue-Tracking Software JIRA®, die von Atlassian® entwickelt wird. Das Add-on ermöglicht eine GANTT-ähnliche Echtzeitplanung in JIRA®. Die Informationen für die Planung werden den JIRA® Issues...

4 Tools für die erfolgreiche digitale Zusammenarbeit

Durch den Lockdown in der Schweiz ist Homeoffice und damit die digitale Zusammenarbeit der neue Normalfall geworden. Funktioniert das gut? Wohl nur teilweise. Viele Unternehmen waren nicht darauf vorbereitet, dass ein Grossteil Ihrer Mitarbeiter/-innen in so kurzer...

Jira Service Desk: Strukturierter Import mit Insight

Ausgangslage Eine häufige Anforderung für Service Desk ist es, Bestellungen darüber abwickeln zu können. Um die Daten zu managen, bietet sich die App Insight - Asset Management an, die kürzlich von Atlassian übernommen wurde. Mit ihr können Daten als Objekte mit...

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

Pin It on Pinterest

Share This