Partilhar via


Definir consultas básicas usando o OData Analytics

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, use https://{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

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

Próximo passo