The unresolved tickets by assignee shows the distribution of unresolved issues within a specific.
Chart preview
Parameters
Parameter | Type | |
---|---|---|
UI | Code | |
Project | Project | Project Picker (single project) |
Layout Script
Used layout: Timeseries All.
function formatTooltipAsHours(value, ratio, id, index) { return value.toFixed(2) + ' h'; } function formatQuarter(d) { if (d instanceof Date) { var q = d.getMonth(); q = parseInt(q / 3) + 1; return 'Q' + q; } return ''; } function formatHalfyear(d) { if (d instanceof Date) { var q = d.getMonth(); q = parseInt(q / 6) + 1; return 'H' + q; } return ''; } var c3arg = { onrendered: updateFrameHeight, data: chartData, grid: { y: { show: true }, x: { show: true } }, axis: { x: { type: 'timeseries', label: { text: chartData.custom.xLabel, position: 'outer-left' }, tick: { format: eval(chartData.custom.xTickFormat), culling: { max: 25 }, fit: true, multiline: false } }, y: { label: chartData.ytype } } }; if (chartData.custom && chartData.custom.tooltip) { var tooltipFunction = eval(chartData.custom.tooltip); c3arg.tooltip = { format: { value: tooltipFunction } }; } if ( chartData.custom && chartData.custom.gauge_max) { c3arg.gauge = { max: parseFloat(chartData.custom.gauge_max) }; } c3.generate(c3arg);
Data Script
import java.math.BigDecimal; import java.text.DateFormat; import java.util.Calendar; import com.atlassian.jira.component.ComponentAccessor; import com.atlassian.jira.issue.Issue; import com.atlassian.jira.jql.builder.JqlClauseBuilder; import com.atlassian.jira.jql.builder.JqlQueryBuilder; import com.atlassian.jira.util.I18nHelper; import com.decadis.jira.xchart.api.ChartParam; import com.decadis.jira.xchart.api.model.Period; import com.decadis.jira.xchart.api.util.DateUtils; I18nHelper i18n = ComponentAccessor.getJiraAuthenticationContext().getI18nHelper(); JqlClauseBuilder jqlClauseBuilder = JqlQueryBuilder.newClauseBuilder(); jqlClauseBuilder.defaultAnd(); jqlClauseBuilder.unresolved(); if ( Project != null ) {//Parameter of type Project Picker (single project) jqlClauseBuilder.project(Project); } List<Issue> issues = chartBuilder.getFilterUtils().performSearch(jqlClauseBuilder.buildQuery(), user); def metaCountGroup = chartBuilder.newDataCollector(); DateFormat dateFormat = DateUtils.SimpleDateFormat; for ( Issue issue : issues ) { Calendar cwCreated = dateUtils.getStartOfPeriod(issue.getCreated(), Period.MONTH); String cw = dateFormat.format(cwCreated.getTime()); metaCountGroup.addValue(BigDecimal.ONE, issue.getAssignee() != null ? issue.getAssignee().getDisplayName() : "Unassigned", cw); } def chartData = chartBuilder.newChartData(i18n.getText("common.concepts.issues")); chartData.setxFormat(DateUtils.SimpleDateFormatD3); chartData.setType("pie"); chartBuilder.getChartUtil().transformResult(metaCountGroup, chartData, true); return chartData;
If you still have questions, feel free to refer to our support team.