Skip to content
claused
docs navigation — How rollups are computed

How rollups are computed

updated 2026-09-20

The one principle

Every row aggregates the issue itself plus everything below it — its own value, if it has one, together with every descendant’s value at any depth. An epic that carries its own estimate adds it to its children’s. The footer’s how it’s counted link opens this rule on the tile itself.

The Σ column is that aggregate. Behind it sits a list: the value of every issue in the subtree that has one in the selected field. Issues without a value are simply absent from the list — they are not zeros, and they never pull an average down. The operation is then applied to the list:

Operation Meaning
sum Total of the list
avg Sum ÷ number of issues with a value
median Middle of the sorted list (even count → mean of the two middle values)
min / max Smallest / largest value in the subtree
count Number of issues in the subtree, the row itself included — with or without a value

Two consequences are worth spelling out:

  • A leaf with value v shows v under every operation except count, where it shows 1. A leaf without a value shows — (a dash, never a fake zero) — again except under count, where it still shows 1.
  • A parent’s count includes the parent: an epic with six stories shows 7. Project rows and the two containers described below are structure, not issues, so they never add to a count.
Hierarchy Totals tile for project PLAT, header sum · Story point estimate: three epics expanded to their stories — PLAT-1180 Payments: unified ledger migration with Σ 34 and DONE 57 %, PLAT-1190 Search: relevance tuning, phase 2 with 16 and 50 %, PLAT-1210 Auth: passkeys rollout with 13 and 33 % — each carrying an amber 1 unest. badge; PLAT-1202 sits collapsed under the first epic at 16 and 50 %; three stories (PLAT-1205, PLAT-1194, PLAT-1215) show a dash in the Σ column with their own 1 unest. badge; a loose task PLAT-1241 shows 2; the footer reads data as of 2026-09-02 06:40 UTC · 19 issues · how it's counted · support · debug.
Epics expanded one level. Σ 34 on PLAT-1180 is the sum over its whole subtree — the collapsed PLAT-1202 contributes 16, everything under it included; PLAT-1205 has no estimate, so it shows — and a 1 unest. badge.

Unestimated

The amber N unest. badge counts leaf issues in the subtree that have no value in the selected field. Parent containers without their own estimate are the Jira norm, not a data-quality problem, so they are not counted — the badge points at actual work nobody sized. A leaf with no value shows — and its own 1 unest.; every row above it adds that leaf to its count.

On rows with children the badge is a button: click it to see only the branches that contain unestimated work (drill-down). Under count the badge is not shown at all — every issue has a count.

Two containers for untidy data

Real Jira data has issues whose parent sits somewhere else, and top-level issues that carry no value. The gadget keeps them in view instead of guessing or hiding them, and once there are enough of them in one project it folds them into a single row:

  • No parent in view — issues whose parent is outside the gadget: in a project you did not select, or an issue your issue-security level does not let you see. Fewer than four in a project stay where they are, as ordinary top-level rows. Four or more are gathered under an italic No parent in view row at the end of that project’s list, with their subtrees and correct aggregates, one click away. How it’s counted in the footer counts them as N outside hierarchy.
  • No value set — top-level issues in a project that have no children and no value in the field. Again, fewer than four stay inline; four or more are gathered under No value set. Under count nothing is gathered, because there every row has a value.

Both containers start collapsed, and nothing is dropped: expanding the row shows every issue inside.

Parent links that form a cycle (an import gone wrong) are always cut in the same way, so the same issue is never counted twice, and how it’s counted reports it as N cycles broken.

Tile grouping three projects: a bold PLAT row with Σ 65, DONE 53 % and a 3 unest. badge over its collapsed epics, MOBL with 62 and 43 % and 1 unest., DES with 41 and 33 % and 2 unest., an italic No parent in view row at the end of the DES list showing 10 and 1 unest., and a footer reading data as of 2026-09-02 06:40 UTC · 50 issues · how it's counted · support · debug.
Four DES issues have parents outside the gadget, so they sit under No parent in view at the end of the DES list, worth 10 story points together; the how it's counted panel counts them as outside hierarchy.

Open work only

With Open work only checked in the gadget settings, the header reads · open only and the totals cover only issues whose status category is not Done — the same test as the JQL statusCategory != Done. The category is the one status attribute no Jira admin can rename away: Cancelled, Rejected and Won’t Do all map to Done, so they count as done here too, not just a status literally named “Done”.

Three rules follow:

  • A done epic with open children stays in view as a container. Its own value is left out — finished work adds nothing to remaining totals — but the open stories under it keep their place instead of floating loose.
  • Σ, the N unest. badge and the footer’s issue count are computed over the open issues only.
  • The DONE column keeps its percentages. It is always taken over the work under the row in every status — so it keeps answering “how far along is this?” while Σ answers “how much is left?”. A row carries a percentage only while it has rows under it, so an open epic whose work is all done — nothing is listed below it any more — leaves the cell empty instead of reading 100 %.
The same three-project tile with · open only in the header: PLAT's Σ is 30 instead of 65, MOBL's 40 instead of 62 and DES's 28 instead of 41, while the DONE column still reads 53 %, 43 % and 33 %; only three DES issues now sit outside the hierarchy, so they are listed inline (DES-50, DES-52, DES-53) instead of under No parent in view, and the footer reads data as of 2026-09-02 06:40 UTC · 32 issues · how it's counted · support · debug.
Open work only: Σ drops to what is still open (PLAT 65 → 30, 50 → 32 issues) while the DONE column keeps its percentages — 53 % on PLAT either way — because it is always taken over all statuses.

The DONE column

The DONE column carries a percentage on rows with children and on project rows only — a single issue leaves the cell empty, and so do No parent in view and No value set. The figure is the share of the work items under the row that are done.

A work item is an issue with nothing below it: a sub-task, a story without sub-tasks, a standalone task. An epic, or a story with sub-tasks, is never counted itself — its work is. This is the one column where a row does not count itself: Σ includes the row’s own value, DONE leaves the row out. Done is the status category Done, the same test as Open work only uses.

Two consequences:

  • An open epic whose stories are all done reads 100 %. The epic’s own status is not one of the things counted.
  • A Done epic whose work is all still open reads 0 %. Closing the container closes none of the work under it.

The share is always taken over all statuses, even when the gadget shows open work only — in the capture above PLAT reads 53 % with and without Open work only. What that mode can take away is the rows under a row: an open epic whose work is all done then has nothing listed below it, and its cell is empty rather than 100 %.

A JQL filter does narrow the share: it then counts the matched issues only. Ancestors kept for structure count as nothing, and a matched issue whose children did not match is itself the work item, counted once by its own status. So the same project can read a different percentage filtered than unfiltered.

The tile states the rule itself. The DONE header carries it as a tooltip, and how it’s counted shows a second line for this column while the column is on screen.

The percentage is rounded, with one deliberate exception: 0 % and 100 % are shown only when they are exact. A row with 998 of 1,000 work items done shows 99 %, so two open work items never disappear into a rounded figure.

The column needs room. It is shown when the tile is wider than 520 px and hidden on narrower tiles to keep issue keys readable; the Σ column is always there.

The number is the one Hierarchy Progress prints as % DONE for the same row — both gadgets count work items by the same rule. What the second gadget adds is the count behind the share (4 / 7), the share by story points or another number field, what is left, a bar, the rows furthest behind listed first, and a trend of each project’s percentage.

Which hierarchy is followed

The tree is Jira’s parent field, and only that:

  • Sub-task → story, task or bug → epic → any level above epic that your site defines in Advanced Roadmaps (Plans). Those higher levels are parents like any other, so they roll up with no extra setup.
  • Team-managed and company-managed projects work the same way, because in Jira Cloud both record the hierarchy in the same parent field.
  • Issue links are not followed — not “relates to”, not “blocks”, not a custom link type used to build a hierarchy of its own. An issue reached only through a link is a separate root.

An issue whose parent is outside the gadget becomes a root of its own, and once four or more of them sit in one project they are gathered under No parent in view, as described above.

Time-tracking fields

Original estimate, Time spent and Remaining estimate arrive from Jira as seconds; the gadget shows them in hours with an h suffix (99h, 12.5h), with up to two decimals in your Jira locale. Count is the exception — counting issues has nothing to convert. Everything else works exactly as for a number field: a row with no time set shows —, and if it is a leaf it carries the badge.

The PLAT tile with the header sum · Original estimate: Σ values carry an h suffix — 99h on PLAT-1180, 52h on PLAT-1190, 46h on PLAT-1210, 3h on the loose PLAT-1241, and child rows such as 24h, the collapsed PLAT-1202 at 49h, 16h, 4h and 6h below them; the DONE column reads 57 %, 50 %, 50 % and 33 %, the same as with story points, and stories without an estimate show a dash with a 1 unest. badge. The footer reads data as of 2026-09-02 06:40 UTC · 19 issues · how it's counted · support · debug.
Original estimate summed in hours: 99h on PLAT-1180 is the sum of the hours below it (24h + 49h + 16h + 4h + 6h); PLAT-1205 has no original estimate, so it shows — and the badge, exactly like a missing story-point value.

Per-project rows

With two or more projects, the gadget always shows one bold row per project. Each project row is computed like any other subtree — meaning its median and average come from the full distribution of that project’s values, not from combining epic-level results (a median of medians is a different, wrong number). Its count is the number of issues in its subtrees.

An issue whose parent is in another selected project sits under that parent, and the whole subtree is attributed to the project of the topmost parent — so an epic’s cross-project children count toward the epic’s project, every issue is counted in exactly one project, and nothing is counted twice.

The 520 px width, the 100 rows shown per level before Show 100 more, and the other sizing numbers are collected on the limits page.