Azure DevOps - 工作项在看板板块内停留的时间

3

我想报告一下我们看板板块中每个列头所花费的时间。

例如,对于我想要的输出,我们有以下看板板块:

Funnel           --> Workitem X spend 10 days in here
Analyzing        --> Workitem X spend 13 days in here
Backlog          --> Workitem X spend  3 days in here
Implementing     --> Workitem X spend 11 days in here
Done             --> Workitem X spend 50 days in here

到目前为止,我尝试了以下方法:

  • 分析视图:无法将BoardColumn添加到输出字段中
  • OData:找到一种基于当前WorkItem状态获取列值(BoardLocation)的方法
  • OData:WorkItemSnapshot(用于获取历史数据)不支持BoardLocation。

您知道任何可以检索功能及其BoardColumns历史数据的方法吗?

谢谢, Joost


我会提出两种解决方案,但我不会写答案,因为可能有更正确的处理方式: 1)根据需要查询工作项 API(尽可能细化):链接。这可能会更昂贵,具体取决于您想要多细致入微。但是响应包含其日期和状态,将其存储在其他地方,您可以或多或少地获取所需数据。 2)使用逻辑应用程序中的触发器(例如),以便在任务更新时触发。 - Mitchell
嗨,米切尔,似乎没有一种方法来查询工作项的历史数据。虽然可以使用WorkItemSnapshot进行此操作,但BoardColumn不是可查询字段。 - JoostVanPoppel
嗨@JoostVanPoppel,问题解决了吗?如果是的话,您可以将下面的答案接受为答案,这样可以帮助其他遇到相同问题的社区成员,并且我们可以归档此线程,谢谢。 - Vito Liu
2个回答

1

不是为了唤起一个旧的帖子,但是简而言之:我遇到了类似的问题,并在我的Github上发布了一个解决方案。

如果你的每一列都有自己独特的状态,维托提供的解决方案对你来说是可行的,然而它只能告诉你工作项在当前状态下花费了多长时间,基于今天。它无法展示工作项在看板上的历史视图。

我提供的解决方案并不像一个简单的Power Shell脚本那样只给你报告,它是一个捕捉工作项所在看板列的历史变化的过程,允许你运行类似下面展示的报告。

SELECT DISTINCT
    wi.WitID,
    DATEDIFF(day, wic_new.AuditCreatedDate, Coalesce(wic_prog.AuditCreatedDate, wic_released.AuditCreatedDate, GETDATE())) as DaysInNew,
    DATEDIFF(day, wic_prog.AuditCreatedDate, Coalesce(wic_released.AuditCreatedDate, GETDATE())) as DaysInProgess,
    DATEDIFF(day, wic_released.AuditCreatedDate, GETDATE()) as DaysInReleased
FROM WorkItems wi
LEFT JOIN WorkItem_ColumnHistory wic_new on (wic_new.WitID = wi.WitID AND wic_new.CurrentColumn = 'New' AND wic_new.WefColumnID LIKE '%[YOUR TEAMS WEF ID]%')
LEFT JOIN WorkItem_ColumnHistory wic_prog on (wic_prog.WitID = wi.WitID AND wic_prog.CurrentColumn = 'In Progress' AND wic_prog.WefColumnID LIKE '%[YOUR TEAMS WEF ID]%')
LEFT JOIN WorkItem_ColumnHistory wic_released on (wic_released.WitID = wi.WitID AND wic_released.CurrentColumn = 'Released' AND wic_released.WefColumnID LIKE '%[YOUR TEAMS WEF ID]%')
WHERE
wi.[State] NOT IN('Closed', 'Removed')
ORDER BY WitID ASC

这个查询的解释已在链接的 GitHub 存储库的 ReadMe 文件中,因此我不会在此重复解释。基本上,此查询查看从 Azure DevOps 收集的历史数据,然后显示结果集,显示一个工作项在您的看板板的每个列中存在多长时间。

1
我们可以使用 Rest API 和 PowerShell 来完成这个任务。
通过 Wiql query 按状态获取所有工作项 ID。
示例脚本:
$connectionToken="pat"
$base64AuthInfo= [System.Convert]::ToBase64String([System.Text.Encoding]::ASCII.GetBytes(":$($connectionToken)"))
$WorkItemQueryURL = "https://dev.azure.com/{organization}/{project}/{team}/_apis/wit/wiql?api-version=6.0" 

$body =@"
{
  "query": "Select [System.Id], [System.Title], [System.State] From WorkItems Where [System.WorkItemType] = 'User Story' AND [State] = 'Closed' order by [Microsoft.VSTS.Common.Priority] asc, [System.CreatedDate] desc"
}
"@
$WorkItem = Invoke-RestMethod -Uri $WorkItemQueryURL -ContentType "application/json" -Body $body -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)} -Method POST

Write-host $WorkItem.workItems.id

结果:

enter image description here

  1. 我们可以通过REST API Get Work Item 获取字段 Microsoft.VSTS.Common.StateChangeDate 的值,它是状态改变的时间,然后我们可以计算自从状态变为 xxx 后在此状态中花费了多少天。

示例脚本:

Write-host $WorkItem.workItems.id

ForEach ($ID in $WorkItem.workItems.id)
{
   $WorkItemInfoURL = "https://dev.azure.com/v-viliu/test/_apis/wit/workitems/$($ID)?api-version=6.0" 

   $WorkItemDetail = (Invoke-RestMethod -Uri $WorkItemInfoURL -Method Get -UseDefaultCredential -Headers @{Authorization=("Basic {0}" -f $base64AuthInfo)})
   
   $StateChangeDate = $WorkItemDetail.fields."Microsoft.VSTS.Common.StateChangeDate"

   Write-host "Work item ID: $ID and StateChangeDate is $StateChangeDate"

}

结果:

enter image description here

计算自状态改变为xxx以来,在该状态下度过了多少天。
示例脚本:
$current = Get-Date

$SpendDate= New-TimeSpan -Start $current -End $StateChangeDate 

Write-Output "The spend date is: $SpendDate"

注意:您需要更改当前的日期格式,您可以参考这个doc来获取更多详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接