You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

查询TFS2015本地工作项中标签的使用次数

解决TFS2015中查询标签及工作项使用次数的问题

我明白你在直接查询TFS数据库时遇到的困扰——尤其是因为TFS会保留工作项的历史状态,导致之前的查询可能把已经移除标签的旧版本也算进去了,结果自然和实际不符。下面我分别提供数据库查询和REST API两种可行的方案:

一、数据库查询方案(仅针对TFS2015,注意官方不支持直接操作数据库,建议只做查询)

要准确获取当前工作项关联的标签,需要关联tbl_WorkItemCoreLatest(最新工作项)、tbl_TagDefinition(标签定义)和tbl_WorkItem_Tag(工作项与标签的关联表),而不是用tbl_PropertyDefinition——因为标签在TFS里是单独的关联表存储的,不是普通属性。

这里的关键是只取最新状态的工作项标签关联,避免历史数据干扰:

SELECT 
    td.Name AS TagName,
    COUNT(DISTINCT wic.WorkItemID) AS WorkItemCount
FROM 
    tbl_TagDefinition td
LEFT JOIN 
    tbl_WorkItem_Tag wit ON td.TagID = wit.TagID
LEFT JOIN 
    tbl_WorkItemCoreLatest wic ON wit.WorkItemID = wic.WorkItemID
WHERE 
    wic.TeamProjectID IS NOT NULL -- 排除已删除的项目中的工作项
GROUP BY 
    td.Name
ORDER BY 
    WorkItemCount DESC;

解释一下:

  • tbl_WorkItem_Tag是工作项和标签的中间关联表,直接关联标签ID和工作项ID
  • tbl_WorkItemCoreLatest确保我们只取每个工作项的最新版本,不会包含历史上曾经有过该标签但现在已经移除的情况
  • 用LEFT JOIN可以统计出那些还没有被任何工作项使用的标签(如果需要的话),如果只想看有使用的标签,把LEFT JOIN改成INNER JOIN即可

二、REST API方案(更推荐,符合官方最佳实践)

TFS2015支持REST API来查询标签和关联的工作项,这种方法不需要直接操作数据库,也不会受到历史数据的影响。

步骤1:获取所有标签列表

首先调用API获取项目中的所有标签(如果是全服务器范围,需要调整URL):

GET http://<你的TFS服务器地址>/tfs/<集合名称>/_apis/tagging/tags?api-version=1.0

返回的结果会包含每个标签的name和id。

步骤2:统计每个标签的工作项数量

对于每个标签,调用工作项查询API,筛选包含该标签的工作项,然后获取总数:

GET http://<你的TFS服务器地址>/tfs/<集合名称>/_apis/wit/wiql?api-version=1.0

请求体(JSON格式):

{
    "query": "SELECT [System.Id] FROM WorkItems WHERE [System.Tags] CONTAINS '<标签名称>'"
}

返回的结果里的workItems数组长度就是该标签的使用次数。如果要批量处理,可以写个简单的脚本(比如PowerShell或者Python)来遍历所有标签,自动执行查询并统计。

举个PowerShell脚本的例子(简化版):

$tfsUrl = "http://你的TFS服务器地址/tfs/集合名称"
$apiVersion = "1.0"

# 获取所有标签
$tags = Invoke-RestMethod -Uri "$tfsUrl/_apis/tagging/tags?api-version=$apiVersion" -Method Get -UseDefaultCredentials

# 遍历标签统计
foreach ($tag in $tags.value) {
    $wiqlQuery = @"
    {
        "query": "SELECT [System.Id] FROM WorkItems WHERE [System.Tags] CONTAINS '$($tag.name)'"
    }
"@
    $result = Invoke-RestMethod -Uri "$tfsUrl/_apis/wit/wiql?api-version=$apiVersion" -Method Post -Body $wiqlQuery -ContentType "application/json" -UseDefaultCredentials
    Write-Host "标签 '$($tag.name)' 关联的工作项数量: $($result.workItems.Count)"
}

这个脚本会自动统计每个标签的工作项使用次数,结果和你在TFS界面看到的完全一致,因为它查询的是当前状态的工作项。


内容的提问来源于stack exchange,提问作者W. Siegmund

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 08:10:20