September 30th, 2019

Track the progress of work using Rollup columns

Romi Koifman
Senior Program Manager

How is our Feature progressing? As simple and common as this question is, it’s a hard one to answer. Especially if your Feature is complex and is composed of multiple User Stories and Tasks. With Sprint 157 Update you will be able to answer this using Rollup in Azure Boards backlog view.

What is rollup?

Rollup is an aggregation displayed on a parent item (like Epic, Feature or even User story) calculated based on parent child relationships. For example, at the Feature backlog you can track progress of each of the Features based on the sum of Story Points for the completed linked User Stories. Learn more about Rollup. Rollup is based on the Analytics service, see Analytics latency and rollup for more details.

Add rollup columns to you backlog

Adding a rollup column is as simple as adding any other column to your backlog view. Click on “Column Options”. In the panel click “Add rollup column” and select from the rollup quick list what you want to rollup on. You can add one or more rollup columns to any of the backlog levels. Like regular columns, this selection will be saved per user and backlog level. The rollup options you can add are based on your project’s process template. That means that the list of rollup columns available may vary per project.

Rollup for custom fields

If you want to rollup on numeric fields that are not part of the out of the box process template, you can configure your own column. In the “Column options” panel, click “Add rollup column” and then “Configure custom rollup”. Then you’ll then need to define the column’s characteristics:

  • Pick between Progress Bar and Total (More details on types of rollup columns below)
  • Select a work item type or a Backlog level for the descendant items
  • Select the aggregation type: count of work items or sum of field. For sum also select the field to summarize.

How to read a rollup column?

Let’s explore an example using the image below: Rolling up Story points into Sum of Story Points and Progress by Story Points

  1. The “Sum of Story Points” column for the “Public Web Rooms” Feature is 65 based on the Story Points of the linked User Stories. Note that the same rollup column for the User Stories themselves is showing 0 because they don’t have items with Story Points linked as children.
  2. The “Progress by Story Points” column is indicating that 61% of the Story Points were completed (40/65).

Types of rollup columns

There are two types of rollup columns you can add. Progress rollup and Total rollup. Each serves a different scenario.

  • Progress is based on the state of the linked items. This column presents the percentage of completed linked items as a progress bar. Hovering over the bar shows the details of the calculation. For example, if you choose “Progress by all Work Items” then a tooltip will tell you the count of items completed out of all the linked items.

  • Totals are state agnostic and can be used to estimate size. For example, let’s imagine that your team breaks Epics into Features, and Features into User Stories. If you add the “Total by Count of User Stories” column to the Epics backlog, next to each Epic you’ll see the number of User Stories linked to it. This is an easy way to compare the size of two Epics in terms of engineering work (assuming the team has good practices on breaking down work evenly). Notice that in this example User Stories are actually the “Grandchildren” of the Epic.

Important notes when using rollup columns

  1. The “Progress by all Work Items” column includes all the descendant items, including custom work item types. For example, for an Epic, it will count all the Features, User Stories, and Tasks.

  2. If you update a large amount of items from the backlog or your project has a lot of updates going on, you might experience a delay when refreshing rollup columns. If we can’t present accurate data you will see an error indicating the last time data was ingested into the Analytics service. Read more about Rollup latency.

  3. The “Progress based on Sum of Remaining work” column assumes the remaining work is set to 0 for any linked items that are closed. Even if the actual value of Remaining work is greater than

  4. Linking between projects is not supported. Rollup is only calculated based on linked items from the same project.

  5. Rollup is always calculated based on the descendant links. Even if your view is not showing all the descendant items, rollup will take them into account. For example, in the image below we added “Total – Count of Work items” as a column. The Feature has 7 items, 6 User Stories and 1 Feedback item. Even if we filter the backlog to only show User Stories, the rollup column would still show 7 items. If the numbers don’t add up we recommend checking the parents linked items panel in the work item form. Filters don't imapct Rollup calculation

Keep providing great feedback

Rollup was one of the community’s top requests. Post your feedback in the comments below or through the Developer community.

Author

Romi Koifman
Senior Program Manager

24 comments

Discussion is closed. Login to edit/delete existing comments.

Newest
Newest
Popular
Oldest
  • Dave Braet

    I have 3 rollup columns for Sum of Task Remaining Work, Sum of Task Completed Work and Sum of Task Original Estimate. However, in Backlog view DevOps is displaying all 0's for each Task within a User Story. The User Story actually does perform the calculation behind the scenes and displays the correct rollup values, but I don't understand why each Task shown as a child to the User Story displays 0's when I know...

    Read more
    • Gregg BoerMicrosoft employee

      Dave, the rollup columns always calculate the rollup of the specific fields for all children. For example, "Sum of Task Remaining Work" will calculate the rollup of Remaining Work for all child Tasks. Since a Task typically doesn't have any child Tasks, its rollup value will be zero. If you want to see Remaining Work for the Tasks, you'll need to add a regular column: Remaining Work, to display alongside the rollup column.
      I hope...

      Read more
      • Dave Braet

        Gregg, thank you! I admit, that I feel a little silly now because that makes very logical sense since they are "rollup columns" not actual "Remaining Work." I just thought at one point a few months ago I was able to see a view with User Stories and their children that displayed all work hours and also rolled up the sum (similar to how MS Project does). But I could be very well mistaken. Either...

        Read more
  • Reed, David

    Anyway you can include rollup columns in analytic views. For example exporting sum of story points to features into a powerbi chart?

  • walid riahi

    Hello,

    i insalled the september’s update on my azure devops, but untill now i can’t see the rollup column.
    i don’t know if i missed something.

    thank you for your help

    Regards
    Walid

    • Annie GesellchenMicrosoft employee

      @Walid if you email AzDevCompassShield (at) microsoft.com we’ll be happy to help you figure out this issue.

  • Daniel Barber

    This indeed sounds a great development however my environment doesn’t have the ability to add a rollup column. I would have thought this would have rolled out to all geos now? Is there some config i am missing? Doesn’t appear to be in the preview features list as something you need to turn on.

    • Annie GesellchenMicrosoft employee

      @Daniel if you could email AzDevCompassShield (at) microsoft.com, we would like to help you figure out this issue.

  • Maarten van Diemen

    Right now the information will be saved per user and backlog level. Are there any plans to modify this and make this available for the entire team and/or project?

  • Michael Wisebaker

    Is there any way to export these values for reporting purposes? I don’t see any “Export to CSV” option in Backlogs. In addition, when I copy or email the backlog, the data stops at the last non-rollup column.

  • Nicolás López

    Hello good morning Romi. When and how will this update be available?
    Regards!

      • Troy Gerton

        Hi Gregg, is roll up available for on-prem installs of DevOps Server?
        Thanks.

      • Nicolás López

        Hi @Gregg-boer, thanks for your response and sorry for the delay in answering you. I would like to know, is this going to be available for azure devops server? Since I have a local installation of azure devops in my organization.
        Thank you!
        Regards!

      • Troy Gerton

        I was just asked by one of our product teams for this feature. We have an on-prem install as well. The lead developer promised me a bottle of gin if I could make roll-ups work.

  • IC India

    Looks like this sentence is incomplete?
    Even if the actual value of Remaining work is greater than

  • Ping Fung Yin

    I want a custom roll up progress bar for the percentage of efforts which has been complete in my organization. If I put in an "estimated effort" for one epic is around 80 hours and I link child items to that epic and if I add a field in the child items as "actual efforts" then I want a roll up column that would give me the progress bar of the amount of effort left....

    Read more
    • Romi KoifmanMicrosoft employeeAuthor

      Hi Ping Fung Yin,
      Currently Rollup only support Progress by state. This is great feedback and we would appreciate if you could submit this as a suggestion in Developers community
      A workaround would be to add two Total columns and have them side by side. Add a column with the Sum of actual effort and a column with the Sum of estimated effort. While you wont get the percentage calculated s progress, you will...

      Read more
'; block.insertAdjacentElement('beforebegin', codeheader); let button = codeheader.querySelector('.copy-button'); button.addEventListener("click", async () => { let blockToCopy = block; await copyCode(blockToCopy, button); }); } }); async function copyCode(blockToCopy, button) { let code = blockToCopy.querySelector("code"); let text = ''; if (code) { text = code.innerText; } else { text = blockToCopy.innerText; } try { await navigator.clipboard.writeText(text); } catch (err) { console.error('Failed to copy:', err); } button.innerText = "Copied"; setTimeout(() => { button.innerHTML = '' + svgCodeIcon + ' Copy'; }, 1400); }

Feedback