Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
Serviços de DevOps do Azure | Azure DevOps Server | Azure DevOps Server 2022
Use consultas Analytics OData para recuperar dados de acompanhamento de trabalho do Azure DevOps no seu navegador ou em ferramentas de cliente como Excel e Power BI. Este artigo aborda a contagem de itens, seleção de campos específicos com $select, filtragem com $filter, expansão das propriedades de navegação com $expand, consulta a intervalos de datas e ordenação com $orderby.
Sugestão
Pode usar IA para ajudar nesta tarefa mais adiante neste artigo, ou consultar Habilitar assistência de IA com Azure DevOps MCP Server para começar.
Os exemplos focam-se no rastreio de conjuntos de entidades do Azure Boards, mas os mesmos princípios aplicam-se a outros conjuntos de entidades. Para obter mais informações, consulte Construir consultas OData para análise e referência de metadados para o Azure Boards Analytics.
Nota
O serviço Analytics é automaticamente habilitado e suportado na produção para todos os serviços nos Serviços de DevOps do Azure. A integração do Power BI e o acesso ao feed OData do serviço Analytics estão geralmente disponíveis. Você é incentivado a usar o feed OData do Google Analytics e fornecer feedback.
Os dados disponíveis dependem da versão. A última versão suportada da API OData é v2.0, e a versão de visualização mais recente é v4.0-preview. Para obter mais informações, consulte o artigo Controlo de Versões da API OData.
Nota
O serviço Analytics é instalado automaticamente e suportado na produção para todas as novas coleções de projetos para o Azure DevOps Server 2020 e versões posteriores. A integração do Power BI e o acesso ao feed OData do serviço Analytics estão geralmente disponíveis. Você é incentivado a usar o feed OData do Google Analytics e fornecer feedback. Se você atualizar do Azure DevOps Server 2019, poderá instalar o serviço Analytics durante a atualização.
Os dados disponíveis dependem da versão. A última versão suportada da API OData é v2.0, e a versão de visualização mais recente é v4.0-preview. Para obter mais informações, consulte o artigo Controlo de Versões da API OData.
Pré-requisitos
| Categoria | Requerimentos |
|---|---|
| Níveis de acesso |
-
Membro do projeto. - Pelo menos acesso básico . |
| Permissões | Por padrão, os membros do projeto têm permissão para consultar o Google Analytics e criar modos de exibição. Para obter mais informações sobre outros pré-requisitos relacionados com a ativação de serviços e funcionalidades e atividades gerais de monitorização de dados, consulte Permissões e pré-requisitos para aceder ao Analytics. |
Nota
- As consultas entre projetos falham quando o usuário que executa a consulta não tem acesso a todos os projetos. Para obter mais informações, consulte Consultas de escopo de projeto e de organização.
- Os exemplos neste artigo utilizam o formato URL do Azure DevOps Services:
https://analytics.dev.azure.com/{OrganizationName}/. Para Azure DevOps Server, usehttps://{servername}/{CollectionName}/em vez disso. Para obter mais informações, consulte Construir consultas OData para Analytics.
Obter uma contagem de itens
Para devolver apenas uma contagem sem outros dados, adicione $apply=aggregate($count as Count) a qualquer URL definida por entidade. Por exemplo, as seguintes consultas contam projetos, itens de trabalho, caminhos de área e utilizadores em toda a organização:
https://analytics.dev.azure.com/<OrganizationName>/_odata/v4.0-preview/Projects?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/<OrganizationName>/_odata/v4.0-preview/WorkItems?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/<OrganizationName>/_odata/v4.0-preview/Areas?$apply=aggregate($count as Count)
https://analytics.dev.azure.com/<OrganizationName>/_odata/v4.0-preview/Users?$apply=aggregate($count as Count)
A Projects consulta para a fabrikam organização devolve:
{
"value": [
{
"Count": 16
}
]
}
Obter uma contagem de itens e seus dados
Para devolver uma contagem juntamente com os dados, adicione $count=true a uma consulta que inclua uma $select cláusula. As consultas seguintes retornam uma contagem mais propriedades selecionadas para itens de trabalho, caminhos de área e utilizadores num projeto:
https://analytics.dev.azure.com/<OrganizationName>/<ProjectName>/_odata/v4.0-preview/WorkItems?$count=true&$select=WorkItemId,Title,WorkItemType
https://analytics.dev.azure.com/<OrganizationName>/<ProjectName>/_odata/v4.0-preview/Areas?$count=true&$select=AreaName,AreaPath
https://analytics.dev.azure.com/<OrganizationName>/<ProjectName>/_odata/v4.0-preview/Users?$count=true&$select=UserName,UserEmail
Nota
Inclua $select sempre ou $apply na sua questão. Omitir ambos gera um aviso e pode ultrapassar os limites de uso.
Para nomes válidos de propriedades, consulte a referência de metadados para Azure Boards Analytics e data do Calendário, Projeto e referência de metadados de utilizador.
Por exemplo, a consulta seguinte devolve a contagem e os nomes de utilizador no projeto Fabrikam Fiber :
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/Users?$count=true&$select=UserName
A resposta inclui a contagem total em @odata.count e os registos correspondentes em value:
{
"@odata.count": 5,
"value": [
{ "UserName": "Microsoft.VisualStudio.Services.TFS" },
{ "UserName": "fabrikamfiber1@hotmail.com" },
{ "UserName": "Jamal Hartnett" },
{ "UserName": "fabrikamfiber5@hotmail.com" },
{ "UserName": "fabrikamfiber2@hotmail.com" }
]
}
Selecionar propriedades ou campos específicos
Adicione uma $select cláusula para devolver apenas as propriedades de que precisa. Os nomes das propriedades são sensíveis a maiúsculas e minúsculas, não podem conter espaços e correspondem aos nomes dos campos dos itens de trabalho. Por exemplo, $select=WorkItemId,WorkItemType,Title,State devolve esses quatro campos.
Para consultas de nomes de propriedades, incluindo campos personalizados, veja Referência de Metadados para Azure Boards.
A consulta seguinte devolve o ID, tipo, título e estado dos três principais itens de trabalho no projeto Fabrikam Fiber:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$top=3
{
"value": [
{ "WorkItemId": 31, "Title": "About screen", "WorkItemType": "Task", "State": "New" },
{ "WorkItemId": 30, "Title": "Change background color", "WorkItemType": "Task", "State": "Active" },
{ "WorkItemId": 32, "Title": "Standardize on form factors", "WorkItemType": "Task", "State": "Active" }
]
}
Filtrar dados
Adicione uma $filter cláusula para devolver apenas itens que cumpram critérios específicos. Use operadores de comparação como eq, ne, gt, ge, lt, e le, e , e combine condições com and e or. Por exemplo, a seguinte consulta devolve funcionalidades que estão em curso:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,AssignedTo,State&$filter=WorkItemType eq 'Feature' and State eq 'In Progress'
Combinar múltiplas condições de filtro
Use parênteses para agrupar or as condições dentro de um filtro mais amplo and . A consulta seguinte devolve histórias de utilizador, bugs e um tipo personalizado em estados específicos:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,Title,AssignedTo,State&$filter=(WorkItemType eq 'User Story' or WorkItemType eq 'Bug' or WorkItemType eq 'Backlog Work') and (State eq 'New' or State eq 'Committed' or State eq 'Active')
{
"value": [
{ "WorkItemId": 210, "Title": "Slow response on form", "State": "Active" },
...
{ "WorkItemId": 160, "Title": "Game store testing", "State": "New" }
]
}
Também pode usar funções string como contains, startswith, e endswith em expressões de filtro. Para mais informações, consulte Funções suportadas.
Propriedades do Caminho da Área de Consulta ou do Caminho de Iteração
Algumas consultas requerem a chave substituta (AreaSK ou IterationSK) em vez da cadeia de caminhos. Use os conjuntos de entidades Áreas ou Iterações para consultar a chave para um caminho específico.
Retornar o AreaSK para um caminho de área específico
A consulta seguinte devolve o AreaSK para o caminho de área Fabrikam Fiber\Production Planning\Web. Para outras propriedades disponíveis, veja Áreas.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/Areas?$filter=AreaPath eq 'Fabrikam Fiber\Production Planning\Web'&$select=AreaSK
{
"value": [
{ "AreaSK": "aaaaaaaa-0000-1111-2222-bbbbbbbbbbbb" }
]
}
Retornar o IterationSK para um caminho de iteração específico
A consulta seguinte retorna o IterationSK para o caminho de iteração Fabrikam Fiber\Release 1\Sprint 3. Para outras propriedades disponíveis, veja Iterações.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/Iterations?$filter=IterationPath eq 'Fabrikam Fiber\Release 1\Sprint 3'&$select=IterationSK
Filtrar por propriedades de navegação
Propriedades de navegação como Iteration, Area, e AssignedTo representam relações com outras entidades. Para filtrar num campo de uma entidade relacionada, use o caminho completo no formato NavigationProperty/Field. Por exemplo, Iteration/IterationPath refere-se ao IterationPath campo através da Iteration propriedade de navegação:
/WorkItems?$filter=Iteration/IterationPath eq 'Project Name\Iteration 1'
A consulta seguinte devolve os cinco principais itens de trabalho numa iteração específica, usando o caminho de navegação completo:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$top=5&$filter=Iteration/IterationPath eq 'Fabrikam Fiber\3Week Sprints\Sprint 3'&$select=WorkItemId,WorkItemType,Title,State&$orderby=WorkItemId asc
Expandir dados de entidades relacionadas
Filtrar por uma propriedade de navegação não inclui os seus dados na resposta. Para devolver campos de uma entidade relacionada, use $expand. Sem $expand, não podes aceder aos campos de propriedades de navegação através de $select.
A seguinte consulta devolve o item 480 de trabalho com todos os campos da entidade expandida Iteration :
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 480&$select=WorkItemId,WorkItemType,Title,State&$expand=Iteration
Como não $select é aplicado à Iteration expansão, a resposta inclui todos os Iteration campos:
{
"value": [
{
"WorkItemId": 480,
"Title": "Add animated emoticons",
"WorkItemType": "User Story",
"State": "New",
"Iteration": {
"ProjectSK": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"IterationSK": "cccccccc-2222-3333-4444-dddddddddddd",
"IterationName": "Sprint 3",
"IterationPath": "Fabrikam Fiber\\3Week Sprints\\Sprint 3",
"StartDate": "2025-12-04T00:00:00-12:00",
"EndDate": "2025-12-25T23:59:59.999-12:00",
"IterationLevel1": "Fabrikam Fiber",
"IterationLevel2": "3Week Sprints",
"IterationLevel3": "Sprint 3",
...
"Depth": 2,
"IsEnded": false
}
}
]
}
Utilize o comando selecionar em instruções de expansão
Para limitar os campos devolvidos de uma entidade expandida, adicione uma cláusula $select dentro de $expand usando a sintaxe $expand=Entity($select=Field1,Field2). A seguinte consulta expande Iteration, mas retorna apenas IterationName e IterationPath:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 480&$select=WorkItemId,WorkItemType,Title,State&$expand=Iteration($select=IterationName,IterationPath)
{
"value": [
{
"WorkItemId": 480,
"Title": "Add animated emoticons",
"WorkItemType": "User Story",
"State": "New",
"Iteration": {
"IterationName": "Sprint 3",
"IterationPath": "Fabrikam Fiber\\3Week Sprints\\Sprint 3"
}
}
]
}
A tabela seguinte apresenta $expand com exemplos $select para tipos comuns de propriedades de navegação:
| Tipo de navegação | Propriedade chave | Cláusulas de exemplo |
|---|---|---|
| Data e Hora | DateSK |
$expand=CreatedDate($select=Date) ou$expand=CreatedDate($select=WeekStartingDate) |
| Identidade | UserSK |
$expand=AssignedTo($select=UserName) ou$expand=AssignedTo($select=UserEmail) |
| Área | AreaSK |
$expand=Area($select=AreaName) ou$expand=Area($select=AreaPath) |
| Iteração | IterationSK |
$expand=Iteration($select=IterationName) ou$expand=Iteration($select=IterationPath) ou$expand=Iteration($select=StartDate) |
| Projeto | ProjectSK |
$expand=Project($select=ProjectName) |
| Equipa | TeamSK |
$expand=Teams($select=TeamName) |
Para expandir múltiplas propriedades de navegação numa única consulta, use uma lista delimitada por vírgulas:
$expand=AssignedTo($select=UserName),Iteration($select=IterationPath),Area($select=AreaPath)
Usar instruções de expansão aninhadas
Para expandir uma propriedade de navegação dentro de uma entidade já expandida, aninhe um $expand dentro de outro. A consulta seguinte expande Iteration e depois expande Project dentro de Iteration para mostrar a que projeto pertence a iteração.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 480&$select=WorkItemId,WorkItemType,Title,State&$expand=Iteration($expand=Project)
Para combinar a expansão aninhada com $select, use um ponto e vírgula (;) para separar $select de $expand dentro dos parênteses. Sem o ponto e vírgula, a consulta devolve um erro. A consulta seguinte retorna apenas IterationName e IterationPath de Iteration, mais o Project aninhado:
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$filter=WorkItemId eq 480&$select=WorkItemId,WorkItemType,Title,State&$expand=Iteration($select=IterationName,IterationPath;$expand=Project)
{
"value": [
{
"WorkItemId": 480,
"Title": "Add animated emoticons",
"WorkItemType": "User Story",
"State": "New",
"Iteration": {
"IterationName": "Sprint 3",
"IterationPath": "Fabrikam Fiber\\3Week Sprints\\Sprint 3",
"Project": {
"ProjectSK": "bbbbbbbb-1111-2222-3333-cccccccccccc",
"ProjectName": "Fabrikam Fiber"
}
}
}
]
}
Consultar um intervalo de datas
A consulta de exemplo a seguir retorna itens de trabalho cuja última Data Alterada é maior ou igual a 1º de janeiro de 2025.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=ChangedDate ge 2025-01-01Z
A consulta de exemplo a seguir retorna itens de trabalho cuja última Data Alterada ocorreu durante a semana de 31 de outubro a 7 de novembro de 2025.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?$select=WorkItemId,WorkItemType,Title,State&$filter=ChangedDate ge 2025-10-31Z and ChangedDate le 2025-11-07Z
Ordenar os resultados
Adicione $orderby para ordenar resultados por uma ou mais propriedades. Os resultados são ordenados por ordem ascendente por defeito; adicione desc para ordem decrescente. Separe múltiplos campos de ordenação com vírgulas.
| Ordenar por | Cláusula |
|---|---|
| ID do item de trabalho | /WorkItems?$orderby=WorkItemId |
| ID do item de trabalho (o mais recente primeiro) | /WorkItems?$orderby=WorkItemId desc |
| Tipo de item de trabalho, seguido por estado | /WorkItems?$orderby=WorkItemType,State |
Usar IA para construir consultas OData
Se configurares o Azure DevOps MCP Server, podes usar assistentes de IA para ajudar a construir e resolver problemas de consultas OData.
Exemplos de sugestões
| Tarefa | Exemplo de prompt |
|---|---|
| Construir uma consulta | Write an OData query that returns all active bugs with their area path and assigned-to fields in <Contoso> project |
| Filtrar por data | Create an OData query that returns work items created in the last 30 days in <Contoso> project |
| Expandir propriedades de navegação | Write an OData query that expands the iteration path and area path for user stories in <Contoso> project |
| Depurar uma consulta | My OData query returns no results — help me troubleshoot the filter clause and URL format for <Contoso> project |
| Expansão aninhada | Write an OData query with nested expand to return work items with their parent details in <Contoso> project |
| Ordenar e limitar resultados | Create an OData query that returns the 20 most recently changed bugs ordered by changed date in <Contoso> project |
| Contagem por tipo de item de trabalho | Write an OData query that counts work items grouped by work item type for <Contoso> project |
| Filtro com funções de cadeia | Create an OData query that returns work items whose title contains "login" in <Contoso> project |
| Combinar, selecionar, filtrar e expandir | Write an OData query that returns the title, state, assigned-to name, and iteration path for all user stories in the current sprint in <Contoso> project |