首页 > 解决方案 > 仅从 Azure Devops 返回状态更改的 OData 查询

问题描述

我有一个 OData 查询,用于将数据提取到 PowerBI 中,并试图提高效率。我正在从 Azure DevOps 做一份报告,并从 WorkItemRevisions 资源中提取数据。目前,我正在提取工作项的所有数据,然后在 PowerBI 中进行过滤,以便仅在状态发生更改时获取。我想将此过滤移动到 Odata 查询,以便我可以最小化我拉入报告中的数据。

目前,我有如下查询(用于此问题的简化示例)

https://analytics.dev.azure.com/{Organization}/{Project}/_odata/v3.0-preview/WorkItemRevisions?
$select=Revision,WorkItemId,WorkItemType,Title,State,ChangedDate,LeadTimeDays,ParentWorkItemId

如何更新它以便只返回状态已更改的修订(从新到活动,从活动到完成等)?

标签: azure-devopspowerbiodata

解决方案


如何更新它以便只返回状态已更改的修订(从新到活动,从活动到完成等)?

恐怕 OData Query 无法完美实现我们所需要的。

有一个功能Revisions/any(r:r/state eq '{state}')可以过滤工作项过去有一个设置状态。

例如:

https://analytics.dev.azure.com/<Organization>/<Project>/_odata/v2.0//WorkItems?
  $filter=State eq 'Closed' and Revisions/any(r:r/State eq 'Active')

此查询类似于使用Was Ever运算符的工作项查询。

正如我所说,这可能不是一个完美的解决方案。那是因为它只能过滤工作项是否曾经有过指定的状态,而不能准确地确定工作项的状态必须是 from Newto Active, Activeto Done。如果我们将工作项的状态从更改ActiveResolved,然后将其更改ResolvedClosed。然后这个工作项就会出现在查询结果中。

另外,即使使用UI查询,我们也无法准确查询到工作项状态从A变为B的结果。为了达到这个目的,我们需要使用REST API。

因此,我们可以使用该功能Revisions/any(r:r/state eq '{state}')在一定程度上减少拉入报告中的数据。


推荐阅读