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

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

Statuspage – den Systemstatus einfach und zuverlässig kommunizieren

Mit Statuspage hat Atlassian ein Tool im Angebot, das Teams und Organisationen hilft, Benutzer über den Systemstatus der angebotenen Services zu informieren. Im Grundsatz zeigt Statuspage auf einer Webpage den Zustand aller technischer Services einer Organisation an,...

Erweiterte Auditing-Funktionen – Atlassian Data Center

Sobald es darum geht, die Effizienz und die Effektivität in Ihrem Unternehmen zu steigern, sind die Monitorig- und Reportfunktionen die besten Freunde. Diese Funktionen ermöglichen Ihnen Einblicke wie Ihre Teams die Software benutzen. Als Admin sind Sie für die...

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

Tabellenkalkulation in Confluence

Excel ist aufgrund der vielfältigen Möglichkeiten zur Tabellenkalkulation sowie der Flexibilität in vielen Unternehmen weit verbreitet. Deshalb taucht auch in Zusammenhang mit dem Einsatz von Confluence oft die Frage auf, welche Funktionen zur Tabellenkalkulation...

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

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

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

Die IT Organisationsform der Zukunft

Sebastian Fiechter nimmt das Opinion Battle am Swiss Agile Leadership Day zum Anlass, seine Gedanken zur IT 2030 festzuhalten. Zum Opinion Battle: Die Referenten liefern sich am Opinion Battle einen Wettkampf. In 5-minütigen Lightning-Talks müssen sie die Vor- und...

Jira Software Cloud – neu mit Performance-Messungen für Dev-Teams

Jira Software Cloud bietet 4 neue Features für Entwicklungs-Teams, die es endlich erlauben, Code und Code-Repositories mit Issues zu verknüpfen und die Deployments in verschiedenen Stages zu visualisieren. Die Folge davon: weniger Kontext-Wechsel, weniger...

Pin It on Pinterest

Share This