我有一个基于VSTS任务,用户故事,功能,史诗层次结构的数据集
Id | Parent ID | Hours completed | Aggregated hours
1 | |
2 | 1 |
3 | 2 | 3
4 | 2 | 4
5 | 1 |
6 | 5 | 2
7 | 5 | 5
我想为每一行计算作为其所有子项的总和而计算出的增加的小时数。那就是说,我想知道每个用户故事,每个功能和每个史诗花费了几个小时。
Id | Parent ID | Hours completed | Aggregated hours
1 | | | 15 (3+4+2+6)
2 | 1 | | 7 (3+4)
3 | 2 | 3
4 | 2 | 4
5 | 1 | | 8 (2+6)
6 | 5 | 2
7 | 5 | 6
我尝试对层级进行非规范化,因此我将基于https://www.daxpatterns.com/parent-child-hierarchies/
作为列使用层次结构级别。Id | Parent ID | Level 1 | Level 2 | Hours completed | Aggregated hours
1 | | | | | 15 (3+4+2+6)
2 | 1 | 1 | | | 7 (3+4)
3 | 2 | 1 | 2 | 3
4 | 2 | 1 | 2 | 4
5 | 1 | 1 | | | 8 (2+6)
6 | 5 | 1 | 5 | 2
7 | 5 | 1 | 5 | 6
但这让我无处可去...在Power BI中有没有办法实现这一目标?尝试了SUMX,但仍未达到正确的结果
EstCumulativeHoursCompleted =
CALCULATE(
SUMX('Work Items - Today', 'Work Items - Today'[Completed Work]),
'Work Items - Today'[Parent Work Item Id] = EARLIER('Work Items -
Today'[Work Item Id])
)
感谢一些提示!
P.S。根据亚历克西斯(Alexis)的建议,我设法做到了这一点:
答案 0 :(得分:2)
这是使用Parent and Child functions的完美情况!
您可以使用PATH
函数定义管道定界路径。
Path = PATH('Work Items'[Id], 'Work Items'[Parent ID])
将其添加到起始表中是这样的:
Id | Parent ID | Hours completed | Path
1 | | | 1
2 | 1 | | 1|2
3 | 2 | 3 | 1|2|3
4 | 2 | 4 | 1|2|4
5 | 1 | | 1|5
6 | 5 | 2 | 1|5|6
7 | 5 | 6 | 1|5|7
有了这个,就可以总结出包含当前Id
的每条路径的小时数。
Aggregated hours =
CALCULATE (
SUM ( 'Work Items'[Hours completed] ),
FILTER (
'Work Items',
PATHCONTAINS (
'Work Items'[Path], --Path column
EARLIER ( 'Work Items'[Id] ) )
)
)
您也可以跳过中间的Path
列,而仅在PATHCONTAINS
中包含路径定义,而不用引用该列。
Aggregated hours =
CALCULATE (
SUM ( 'Work Items'[Hours completed] ),
FILTER (
'Work Items',
PATHCONTAINS (
PATH ( 'Work Items'[Id], 'Work Items'[Parent ID] ), --Path Definition
EARLIER ( 'Work Items'[Id] )
)
)
)
如果保留Path
列,则表应如下所示。
Id | Parent ID | Hours completed | Path | Aggregated hours
1 | | | 1 | 15
2 | 1 | | 1|2 | 7
3 | 2 | 3 | 1|2|3 | 3
4 | 2 | 4 | 1|2|4 | 4
5 | 1 | | 1|5 | 8
6 | 5 | 2 | 1|5|6 | 2
7 | 5 | 6 | 1|5|7 | 6
如果您不想汇总最低级别的数据,则可以过滤掉PATHLENGTH
等于最大值PATHLENGTH
的行。