Forum Discussion
Burndown Chart
Hello Everyone,
I am trying to create a burn down chart for our development sprints in Power BI. I have found few examples in forums on how to do that, but unfortunately I was not able to replicate those solutions due to difference of datasets. Usually people have nice tables which has columns with sprint days and progress by itself.
In my dataset there are only records of user stories with their estimates and logs.
Example:
The data which I have is per “User Story” worklog. Meaning if there are 4 times “time worked” logged, the same user story will appear 4 times. So for total sprint estimate I need to group user stories and only then sum Original Estimate column.
There might be different “Sprints” happening at once by different development teams.
7 Replies
- Greg_DecklerCommunity Champion
Aurimas - I have an example of a burndown chart in my book, DAX Cookbook. If all you want is the DAX for it, you can get that here:
https://github.com/gdeckler/DAXCookbook
Chapter 8, Recipe 7
- AurimasFrequent Visitor
Hi Greg_Deckler ,
This is really helpful. I am trying to recreate as per your example. Yet I have two issues:
1. My "Idealized Burndown" starting point does not match with total. It should in total have 378 hours, but have this result:
2. Burndown is going in straight line.
Note: Table is a calculated table to get unique estimates per items.Table = SUMMARIZE(Development,Development[Sprint ID], Development[Key],Development[Time Original Estimate],[Sprint Start Date], Development[Sprint End Date], "UniqueKey", Development[Sprint ID] & "-"& Development[Key])
Idealized Burndown = VAR __Date = MAX('Date Range'[Date]) VAR __StartDate = MINX('Table','Table'[Sprint Start Date]) VAR __FinishDate = MAXX('Table','Table'[Sprint End Date]) VAR __TotalProjectHours = SUMX(ALL('Table'),'Table'[Time Original Estimate]) VAR __IdealHoursPerDay = DIVIDE( __TotalProjectHours, DATEDIFF(__StartDate,__FinishDate,DAY) + 1, 0 ) VAR __IdealConsumedHours = __IdealHoursPerDay * (DATEDIFF(__StartDate,__Date,DAY) + 1) RETURN IF( __Date < __StartDate - 1 || __Date > __FinishDate, BLANK(), __TotalProjectHours - __IdealConsumedHours )
Burndown = VAR __Date = MAX('Date Range'[Date]) VAR __StartDate = MINX('Table','Table'[Sprint Start Date]) VAR __FinishDate = MAXX('Table','Table'[Sprint End Date]) VAR __TotalProjectHours = SUMX(ALL('Table'),'Table'[Time Original Estimate]) VAR __TotalConsumedHours = SUMX( FILTER( ALL(Development), Development[Worklogs Created] <= __FinishDate ), Development[Worklog Time Spent]) RETURN IF( __Date < __StartDate - 1 || __Date > __FinishDate, BLANK(), __TotalProjectHours - __TotalConsumedHours )
Sample Data:
- Greg_DecklerCommunity Champion
Aurimas - I'd have to play with the data. Can you post it as text or post PBIX?
- amitchandakSuper User
Aurimas , Not very clear. Try
Original Estimate Sum = sumx(summarize(Table, Table[Sprint ID], "_1", max(Table[Original Estimate])),[_1])
time Logged = sum(Table[time Logged]) - amitchandakSuper User
Aurimas , do you need more help on this. Can you share sample data and sample output in table format? Or a sample pbix after removing sensitive data.