Microsoft Fabric Community Conference 2025, March 31 - April 2, Las Vegas, Nevada. Use code FABINSIDER for a $400 discount.
Register nowGet inspired! Check out the entries from the Power BI DataViz World Championships preliminary rounds and give kudos to your favorites. View the vizzies.
I am trying to Calculate Sprint Commitmment.There are some stories that are not completed in the same sprint and gets moved to next sprint.In such cases i dont want to add this story points twice. Here in this case if yiu refer Issue Key 68173 gets executed in multiple sprint.So in case if i sum it then it will keep adding the numbers of sprints it appears rather the need is to consider it once (unique).So here i need a power query that will calculate the sum of all story points committed considering the unique Issue Keys.
ISSUE_KEY | SPRINT_NAME | SPRINT_NUMBER | SPRINT_REPORT_STATUS | STORY_POINTS_COMMITTED |
54244 | Sprint 202 | 202 | COMPLETED | null |
62009 | Sprint 203 | 203 | INCOMPLETED | 0 |
62009 | Sprint 204 | 204 | COMPLETED | null |
65726 | Sprint 202 | 202 | INCOMPLETED | null |
65726 | Sprint 203 | 203 | INCOMPLETED | null |
65726 | Sprint 204 | 204 | REMOVED | null |
66113 | Sprint 202 | 202 | COMPLETED | 0 |
66198 | Sprint 203 | 203 | COMPLETED | 0 |
68164 | Sprint 204 | 204 | COMPLETED | 0 |
68173 | Sprint 203 | 203 | INCOMPLETED | 0 |
68173 | Sprint 204 | 204 | INCOMPLETED | 5 |
68173 | Sprint 205 | 205 | COMPLETED | 5 |
68651 | Sprint 202 | 202 | INCOMPLETED | 5 |
68651 | Sprint 203 | 203 | COMPLETED | 5 |
68653 | Sprint 205 | 205 | INCOMPLETED | 3 |
68799 | Sprint 202 | 202 | COMPLETED | 3 |
68888 | Sprint 202 | 202 | COMPLETED | 4 |
69669 | Sprint 202 | 202 | COMPLETED | 0 |
69825 | Sprint 202 | 202 | COMPLETED | 3 |
69827 | Sprint 202 | 202 | INCOMPLETED | 4 |
69827 | Sprint 203 | 203 | INCOMPLETED | 4 |
69827 | Sprint 204 | 204 | COMPLETED | 4 |
70191 | Sprint 205 | 205 | COMPLETED | 0 |
70244 | Sprint 203 | 203 | COMPLETED | 0 |
70249 | Sprint 203 | 203 | COMPLETED | 0 |
70448 | Sprint 204 | 204 | COMPLETED | 0 |
70588 | Sprint 204 | 204 | COMPLETED | 0 |
70694 | Sprint 202 | 202 | INCOMPLETED | 2 |
70694 | Sprint 203 | 203 | COMPLETED | 2 |
70695 | Sprint 202 | 202 | INCOMPLETED | 2 |
70695 | Sprint 203 | 203 | COMPLETED | 2 |
70710 | Sprint 202 | 202 | COMPLETED | 0 |
70720 | Sprint 202 | 202 | INCOMPLETED | 0 |
70720 | Sprint 203 | 203 | COMPLETED | null |
70787 | Sprint 202 | 202 | INCOMPLETED | 2 |
70787 | Sprint 203 | 203 | INCOMPLETED | 2 |
70787 | Sprint 204 | 204 | COMPLETED | 2 |
70789 | Sprint 203 | 203 | INCOMPLETED | 0 |
70789 | Sprint 204 | 204 | INCOMPLETED | 3 |
70789 | Sprint 205 | 205 | COMPLETED | 3 |
70868 | Sprint 202 | 202 | COMPLETED | 0 |
71109 | Sprint 202 | 202 | COMPLETED | 0 |
71286 | Sprint 202 | 202 | COMPLETED | 0 |
71325 | Sprint 202 | 202 | INCOMPLETED | 0 |
71325 | Sprint 203 | 203 | COMPLETED | null |
71358 | Sprint 204 | 204 | COMPLETED | 0 |
71439 | Sprint 203 | 203 | COMPLETED | 0 |
71499 | Sprint 203 | 203 | INCOMPLETED | 0 |
71499 | Sprint 204 | 204 | COMPLETED | null |
71532 | Sprint 203 | 203 | COMPLETED | 0 |
71775 | Sprint 204 | 204 | COMPLETED | 0 |
71880 | Sprint 203 | 203 | INCOMPLETED | 0 |
71880 | Sprint 204 | 204 | COMPLETED | null |
71940 | Sprint 203 | 203 | INCOMPLETED | 0 |
71940 | Sprint 204 | 204 | COMPLETED | null |
71942 | Sprint 203 | 203 | INCOMPLETED | 0 |
71942 | Sprint 204 | 204 | COMPLETED | null |
72035 | Sprint 204 | 204 | REMOVED | 0 |
72103 | Sprint 204 | 204 | COMPLETED | 0 |
72218 | Sprint 204 | 204 | COMPLETED | 0 |
72480 | Sprint 204 | 204 | COMPLETED | 0 |
72518 | Sprint 204 | 204 | COMPLETED | 0 |
72547 | Sprint 204 | 204 | COMPLETED | 0 |
72556 | Sprint 204 | 204 | INCOMPLETED | 0 |
72556 | Sprint 205 | 205 | COMPLETED | null |
72559 | Sprint 204 | 204 | INCOMPLETED | 0 |
72559 | Sprint 205 | 205 | COMPLETED | null |
72578 | Sprint 204 | 204 | INCOMPLETED | 0 |
72578 | Sprint 205 | 205 | INCOMPLETED | null |
72598 | Sprint 205 | 205 | INCOMPLETED | null |
72599 | Sprint 205 | 205 | COMPLETED | null |
72600 | Sprint 205 | 205 | INCOMPLETED | null |
72766 | Sprint 205 | 205 | COMPLETED | 0 |
72821 | Sprint 205 | 205 | INCOMPLETED | 0 |
72963 | Sprint 205 | 205 | INCOMPLETED | 0 |
Solved! Go to Solution.
Done.
Result
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZZNTgMxDIWvgmbNInbsOFlDF0iUIkBsqh6ADUKI+4v0dzqpPeN0MepIn57ePDuOt9uBCYmG++H95/fr++8OA9aX4/Nhs359Xn2sHuv/MOzut0PCEMo1HA/w/vn04sDpgJOuzYJJN6Jqt/iClRYfrbyt1pvPazQBRHciCUrWbShwhkTuPDJI7PjAFh+1pzjrOB9wbqyc4cTgKY2B65mMsGFkqh1PuJSiW9Hg+luG6QiXlBzKp7RLRnbbqLB44iMdtwpv4HpTHWEJUEBP+/YjJTSjYa6397AxGjSYKC97PsOcO+BUjHE2DQ91XHc9wkbRLW32awsEb/dVGA1YGw03+HxpJLuaFXXcalYD12s5wh23zQ1uTcCo4/pROMM5OSbJyQhAcE8SAczGtafB0Ro7aiItPlt4iOw/ZkDRf9qBSk8dW3zeCEf0GxFhv3LOxqnRXTf4vHahLu0GX9I2ErG00a1ddYwA2y1KEIKxj2i6CP7eQ+pIGrlHmckxnS4wGxulmnOLz968FXaNMgNf0BYjEUN7ilv72QUvnXiH8xRCj7akjsQzGouRrl2Sa2ut+O4f", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ISSUE_KEY = _t, SPRINT_NAME = _t, SPRINT_NUMBER = _t, SPRINT_REPORT_STATUS = _t, STORY_POINTS_COMMITTED = _t]),
ChangedType = Table.TransformColumnTypes(Source,{{"STORY_POINTS_COMMITTED", Int64.Type}, {"ISSUE_KEY", Int64.Type}, {"SPRINT_NUMBER", Int64.Type}}),
GroupedRows = Table.Group(ChangedType, {"ISSUE_KEY"}, {
{"All", each _, type table [SSUE_KEY=nullable number, SPRINT_NAME=nullable text, SPRINT_NUMBER=nullable number, SPRINT_REPORT_STATUS=nullable text, STORY_POINTS_COMMITTED=nullable number]},
{"Points", each List.Max([STORY_POINTS_COMMITTED]), Int64.Type} }),
BufferedPoints = List.Buffer(GroupedRows[Points]),
GenerateHelper = List.Generate(
()=> [ x = 0, y = BufferedPoints{x} ],
each [x] < List.Count(BufferedPoints),
each [ x = [x]+1, y = [y] + BufferedPoints{x} ],
each [y]
),
Merged = Table.FromColumns(Table.ToColumns(GroupedRows) & { {0} & List.RemoveLastN(GenerateHelper, 1)}, Value.Type(GroupedRows & #table(type table[Helper=Int64.Type],{}))),
Ad_InnerColumn = Table.AddColumn(Merged, "All With Total Column", each Table.AddColumn([All], "Total Story Points Committed", (x)=> x[STORY_POINTS_COMMITTED] + [Helper], Int64.Type), type table),
Combined = Table.Combine(Ad_InnerColumn[All With Total Column])
in
Combined
Thank you
Yes the requirement here is the sum all the individual story points keeping in mind to consider only Unique issue keys (Issues Key only once) if they appear in multiple sprints.Consider the ones with highest story points for summation.
So as in case of 68173 we should consider 5 (Highest story point) only once for summation.I would like to replace all null with zero for STORY_POINTS_COMMITTED column and add a new column called Total_Committed_Story_Points and sum it considering the issue key with Max story points once.Something like below
ISSUE_KEY | SPRINT_NAME | SPRINT_NUMBER | SPRINT_REPORT_STATUS | STORY_POINTS_COMMITTED | Total Story Points committed |
54244 | Sprint 202 | 202 | COMPLETED | 0 | 0 |
62009 | Sprint 203 | 203 | INCOMPLETED | 0 | 0 |
62009 | Sprint 204 | 204 | COMPLETED | 0 | 0 |
65726 | Sprint 202 | 202 | INCOMPLETED | 0 | 0 |
65726 | Sprint 203 | 203 | INCOMPLETED | 0 | 0 |
65726 | Sprint 204 | 204 | REMOVED | 0 | 0 |
66113 | Sprint 202 | 202 | COMPLETED | 0 | 0 |
66198 | Sprint 203 | 203 | COMPLETED | 0 | 0 |
68164 | Sprint 204 | 204 | COMPLETED | 0 | 0 |
68173 | Sprint 203 | 203 | INCOMPLETED | 0 | 0 |
68173 | Sprint 204 | 204 | INCOMPLETED | 5 | 5 |
68173 | Sprint 205 | 205 | COMPLETED | 5 | 5 |
68651 | Sprint 202 | 202 | INCOMPLETED | 5 | 10 |
68651 | Sprint 203 | 203 | COMPLETED | 5 | 10 |
68653 | Sprint 205 | 205 | INCOMPLETED | 3 | 13 |
68799 | Sprint 202 | 202 | COMPLETED | 3 | 16 |
68888 | Sprint 202 | 202 | COMPLETED | 4 | 20 |
69669 | Sprint 202 | 202 | COMPLETED | 0 | 20 |
69825 | Sprint 202 | 202 | COMPLETED | 3 | 23 |
69827 | Sprint 202 | 202 | INCOMPLETED | 4 | 27 |
69827 | Sprint 203 | 203 | INCOMPLETED | 4 | 27 |
69827 | Sprint 204 | 204 | COMPLETED | 4 | 27 |
70191 | Sprint 205 | 205 | COMPLETED | 0 | 27 |
70244 | Sprint 203 | 203 | COMPLETED | 0 | 27 |
70249 | Sprint 203 | 203 | COMPLETED | 0 | 27 |
70448 | Sprint 204 | 204 | COMPLETED | 0 | 27 |
70588 | Sprint 204 | 204 | COMPLETED | 0 | 27 |
70694 | Sprint 202 | 202 | INCOMPLETED | 2 | 29 |
70694 | Sprint 203 | 203 | COMPLETED | 2 | 29 |
70695 | Sprint 202 | 202 | INCOMPLETED | 2 | 31 |
70695 | Sprint 203 | 203 | COMPLETED | 2 | 31 |
70710 | Sprint 202 | 202 | COMPLETED | 0 | 31 |
70720 | Sprint 202 | 202 | INCOMPLETED | 0 | 31 |
70720 | Sprint 203 | 203 | COMPLETED | 0 | 31 |
70787 | Sprint 202 | 202 | INCOMPLETED | 2 | 33 |
70787 | Sprint 203 | 203 | INCOMPLETED | 2 | 33 |
70787 | Sprint 204 | 204 | COMPLETED | 2 | 33 |
70789 | Sprint 203 | 203 | INCOMPLETED | 0 | 33 |
70789 | Sprint 204 | 204 | INCOMPLETED | 3 | 36 |
70789 | Sprint 205 | 205 | COMPLETED | 3 | 36 |
70868 | Sprint 202 | 202 | COMPLETED | 0 | 36 |
71109 | Sprint 202 | 202 | COMPLETED | 0 | 36 |
71286 | Sprint 202 | 202 | COMPLETED | 0 | 36 |
71325 | Sprint 202 | 202 | INCOMPLETED | 0 | 36 |
71325 | Sprint 203 | 203 | COMPLETED | 0 | 36 |
71358 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
71439 | Sprint 203 | 203 | COMPLETED | 0 | 36 |
71499 | Sprint 203 | 203 | INCOMPLETED | 0 | 36 |
71499 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
71532 | Sprint 203 | 203 | COMPLETED | 0 | 36 |
71775 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
71880 | Sprint 203 | 203 | INCOMPLETED | 0 | 36 |
71880 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
71940 | Sprint 203 | 203 | INCOMPLETED | 0 | 36 |
71940 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
71942 | Sprint 203 | 203 | INCOMPLETED | 0 | 36 |
71942 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72035 | Sprint 204 | 204 | REMOVED | 0 | 36 |
72103 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72218 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72480 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72518 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72547 | Sprint 204 | 204 | COMPLETED | 0 | 36 |
72556 | Sprint 204 | 204 | INCOMPLETED | 0 | 36 |
72556 | Sprint 205 | 205 | COMPLETED | 0 | 36 |
72559 | Sprint 204 | 204 | INCOMPLETED | 0 | 36 |
72559 | Sprint 205 | 205 | COMPLETED | 0 | 36 |
72578 | Sprint 204 | 204 | INCOMPLETED | 0 | 36 |
72578 | Sprint 205 | 205 | INCOMPLETED | 0 | 36 |
72598 | Sprint 205 | 205 | INCOMPLETED | 0 | 36 |
72599 | Sprint 205 | 205 | COMPLETED | 0 | 36 |
72600 | Sprint 205 | 205 | INCOMPLETED | 0 | 36 |
72766 | Sprint 205 | 205 | COMPLETED | 0 | 36 |
72821 | Sprint 205 | 205 | INCOMPLETED | 0 | 36 |
72963 | Sprint 205 | 205 | INCOMPLETED | 0 | 36 |
Done.
Result
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("lZZNTgMxDIWvgmbNInbsOFlDF0iUIkBsqh6ADUKI+4v0dzqpPeN0MepIn57ePDuOt9uBCYmG++H95/fr++8OA9aX4/Nhs359Xn2sHuv/MOzut0PCEMo1HA/w/vn04sDpgJOuzYJJN6Jqt/iClRYfrbyt1pvPazQBRHciCUrWbShwhkTuPDJI7PjAFh+1pzjrOB9wbqyc4cTgKY2B65mMsGFkqh1PuJSiW9Hg+luG6QiXlBzKp7RLRnbbqLB44iMdtwpv4HpTHWEJUEBP+/YjJTSjYa6397AxGjSYKC97PsOcO+BUjHE2DQ91XHc9wkbRLW32awsEb/dVGA1YGw03+HxpJLuaFXXcalYD12s5wh23zQ1uTcCo4/pROMM5OSbJyQhAcE8SAczGtafB0Ro7aiItPlt4iOw/ZkDRf9qBSk8dW3zeCEf0GxFhv3LOxqnRXTf4vHahLu0GX9I2ErG00a1ddYwA2y1KEIKxj2i6CP7eQ+pIGrlHmckxnS4wGxulmnOLz968FXaNMgNf0BYjEUN7ilv72QUvnXiH8xRCj7akjsQzGouRrl2Sa2ut+O4f", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [ISSUE_KEY = _t, SPRINT_NAME = _t, SPRINT_NUMBER = _t, SPRINT_REPORT_STATUS = _t, STORY_POINTS_COMMITTED = _t]),
ChangedType = Table.TransformColumnTypes(Source,{{"STORY_POINTS_COMMITTED", Int64.Type}, {"ISSUE_KEY", Int64.Type}, {"SPRINT_NUMBER", Int64.Type}}),
GroupedRows = Table.Group(ChangedType, {"ISSUE_KEY"}, {
{"All", each _, type table [SSUE_KEY=nullable number, SPRINT_NAME=nullable text, SPRINT_NUMBER=nullable number, SPRINT_REPORT_STATUS=nullable text, STORY_POINTS_COMMITTED=nullable number]},
{"Points", each List.Max([STORY_POINTS_COMMITTED]), Int64.Type} }),
BufferedPoints = List.Buffer(GroupedRows[Points]),
GenerateHelper = List.Generate(
()=> [ x = 0, y = BufferedPoints{x} ],
each [x] < List.Count(BufferedPoints),
each [ x = [x]+1, y = [y] + BufferedPoints{x} ],
each [y]
),
Merged = Table.FromColumns(Table.ToColumns(GroupedRows) & { {0} & List.RemoveLastN(GenerateHelper, 1)}, Value.Type(GroupedRows & #table(type table[Helper=Int64.Type],{}))),
Ad_InnerColumn = Table.AddColumn(Merged, "All With Total Column", each Table.AddColumn([All], "Total Story Points Committed", (x)=> x[STORY_POINTS_COMMITTED] + [Helper], Int64.Type), type table),
Combined = Table.Combine(Ad_InnerColumn[All With Total Column])
in
Combined
March 31 - April 2, 2025, in Las Vegas, Nevada. Use code FABINSIDER for a $400 discount!
Check out the February 2025 Power BI update to learn about new features.
User | Count |
---|---|
28 | |
27 | |
23 | |
14 | |
10 |
User | Count |
---|---|
24 | |
21 | |
17 | |
10 | |
9 |