Wykonywanie zapytań dotyczących danych śledzenia pracy przy użyciu usługi Analytics

Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019

Możesz wykonywać zapytania dotyczące danych śledzenia pracy usługi Azure DevOps przy użyciu podstawowych zapytań podanych w tym artykule. Te zapytania zaspokajają codzienne potrzeby, demonstrując różne możliwości analizy. Większość tych zapytań można dostosować do swoich potrzeb.

Ten artykuł zawiera informacje zawarte w artykule Tworzenie zapytań OData na potrzeby analizy i dokumentacji metadanych dla usługi Azure Boards Analytics.

Uwaga

Usługa Analytics jest automatycznie włączona i obsługiwana w środowisku produkcyjnym dla wszystkich usług Azure DevOps Services. Integracja usługi Power BI i dostęp do źródła danych OData usługi Analytics są ogólnie dostępne. Zachęcamy do korzystania z niego i przekazywania opinii. Dostępne dane są zależne od wersji. Najnowsza obsługiwana wersja to v2.0, a najnowsza wersja zapoznawcza to v4.0-preview. Aby uzyskać więcej informacji, zobacz Przechowywanie wersji interfejsu API OData.

Uwaga

Usługa Analytics jest automatycznie instalowana i obsługiwana w środowisku produkcyjnym dla wszystkich nowych kolekcji projektów dla usługi Azure DevOps Server 2020 i nowszych wersji. Integracja usługi Power BI i dostęp do źródła danych OData usługi Analytics są ogólnie dostępne. Zachęcamy do korzystania z niego i przekazywania opinii. W przypadku uaktualnienia z usługi Azure DevOps Server 2019 możesz zainstalować usługę Analytics podczas uaktualniania.

Dostępne dane są zależne od wersji. Najnowsza obsługiwana wersja to v2.0, a najnowsza wersja zapoznawcza to v4.0-preview. Aby uzyskać więcej informacji, zobacz Przechowywanie wersji interfejsu API OData.

Uwaga

Usługa Analytics jest dostępna w wersji zapoznawczej dla usługi Azure DevOps Server 2019. Możesz włączyć lub zainstalować dla kolekcji projektów. Integracja usługi Power BI i dostęp do źródła danych OData usługi Analytics są dostępne w wersji zapoznawczej. Zachęcamy do korzystania z niego i przekazywania opinii.

Dostępne dane są zależne od wersji. Najnowsza obsługiwana wersja to v2.0, a najnowsza wersja zapoznawcza to v4.0-preview. Aby uzyskać więcej informacji, zobacz Przechowywanie wersji interfejsu API OData.

Wymagania wstępne

  • Aby wyświetlić dane analizy i wykonać zapytanie dotyczące usługi, musisz być członkiem projektu z dostępem podstawowym lub większym. Domyślnie wszyscy członkowie projektu otrzymują uprawnienia do wykonywania zapytań w usłudze Analytics i definiowania widoków analizy.
  • Aby dowiedzieć się więcej o innych wymaganiach wstępnych dotyczących włączania usługi i funkcji oraz ogólnych działań śledzenia danych, zobacz Uprawnienia i wymagania wstępne dotyczące dostępu do analizy.

Wszystkie przykłady są ograniczone do projektu w usłudze Azure DevOps. Przykłady określania zakresu na poziomie organizacji lub usługi Azure DevOps Server można znaleźć w temacie Project and organization-scoped queries (Zapytania w zakresie projektu i organizacji).

Napiwek

Rozszerzenie WIQL to OData Azure DevOps Marketplace umożliwia szybkie generowanie zapytania OData na podstawie zapytania elementu roboczego na stronie Zapytania. To rozszerzenie obsługuje konwersję płaskiej listy elementów roboczych i elementów roboczych oraz linków bezpośrednich. Rozszerzenia nie są obsługiwanymi funkcjami usługi Azure Boards i dlatego nie są obsługiwane przez zespół produktu. W przypadku pytań, sugestii lub problemów, które masz podczas korzystania z tych rozszerzeń, odwiedź odpowiednią stronę rozszerzenia.

Filtrowanie elementów roboczych na podstawie daty zmiany

Wysyłasz zapytanie do WorkItems zestawu jednostek, aby wyświetlić listę elementów roboczych spełniających kryteria pola.

Poniższe zapytanie zwraca elementy listy prac produktu, usterki i funkcje, które mają datę zmiany większą niż 12 grudnia 2021 r.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/v1.0/WorkItems?
  $select=WorkItemId, WorkItemType, Title, State 
  &$expand=AssignedTo($select=UserEmail)
  &$filter=(Project/ProjectName eq 'Fabrikam Fiber'
    AND (WorkItemType eq 'Product Backlog Item' or WorkItemType eq 'Bug' or WorkItemType eq 'Feature')
    AND ChangedOn/Date ge 2021-12-16T23:44:15.619Z)
  &$orderby=WorkItemType desc 

Filtrowanie elementów roboczych na podstawie obszaru

Poniższe zapytanie można zmodyfikować, aby wyświetlić listę wszystkich elementów roboczych w ramach określonej ścieżki obszaru.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Area/AreaPath eq '{area path}'
  &$select=WorkItemId, Title, State

Przykładowe zapytanie:

Na przykład następująca składnia wysyła zapytanie do liczby elementów roboczych dla każdego projektu zdefiniowanego dla organizacji fabrikam .

https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$apply=groupby((Project/ProjectName), aggregate($count as Count))

Przykładowa odpowiedź:

Odpowiedź zwraca dane dla następujących pięciu projektów.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(Project(ProjectName),Count)",
   "value":[
      {
         "@odata.id":null,
         "Count":2,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Basic Fabrikam"
         }
      },
      {
         "@odata.id":null,
         "Count":19,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Demo 11"
         }
      },
      {
         "@odata.id":null,
         "Count":188,
         "Project":{
            "@odata.id":null,
            "ProjectName":"Fabrikam Fiber"
         }
      },
      {
         "@odata.id":null,
         "Count":89,
         "Project":{
            "@odata.id":null,
            "ProjectName":"MyFirstProject"
         }
      },
      {
         "@odata.id":null,
         "Count":2,
         "Project":{
            "@odata.id":null,
            "ProjectName":"MyPublicProject"
         }
      }
   ]
}

Filtrowanie elementów roboczych na podstawie iteracji

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Iteration/IterationPath eq '{iteration path}'
  &$select=WorkItemId, Title, State

Przykładowe zapytanie:

Na przykład następujące składnia wykonuje zapytania dotyczące elementów roboczych projektu Fabrikam Fiber w obszarze Ścieżka iteracji=Fabrikam Fiber\Release 1\Sprint 6.

https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/WorkItems?$select=WorkItemId, WorkItemType, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemType ne '' AND Iteration/IterationPath eq 'Fabrikam Fiber\Release 1\Sprint 6')

Przykładowa odpowiedź:

Odpowiedź zwraca dane dla następujących czterech elementów roboczych.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#WorkItems(WorkItemId,WorkItemType,Title,State,Iteration(IterationPath))",
   "value":[
      {
         "WorkItemId":361,
         "Title":"Hello World Web Site",
         "WorkItemType":"Product Backlog Item",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1126,
         "Title":"web site task",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1136,
         "Title":"Add a new task with two new tags",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      },
      {
         "WorkItemId":1140,
         "Title":"New task - test for Blocked",
         "WorkItemType":"Task",
         "State":"To Do",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 6"
         }
      }
   ]
}

Pobieranie elementów dla iteracji

Możesz pobrać wszystkie elementy robocze dla danej iteracji, która przypada między pierwszym dniem iteracji a ostatnim dniem iteracji. W tym miejscu zapytanie jest ograniczone przez dane zawarte w danych śledzenia pracy.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Iteration/IterationPath eq '{iteration path}' 
    and ChangedDate ge Iteration/StartDate 
    and ChangedDate le Iteration/EndDate
  &$select=WorkItemId, Title, State

Filtrowanie elementów roboczych zawierających określone tagi

W tym miejscu jest używany dowolny operator, ponieważ istnieje kolekcja tagów, które mogą być skojarzone z elementem roboczym. Z perspektywy użycia format to: {Navigation Property}/any(d:d/{Field Name} {operator} {expression}). Każdy element nie otoczony nawiasami klamrowymi ({}) jest literałem. Istnieją pewne odmiany. Na przykład nie musisz używać wyrażenia "d", jak użyto w wyrażeniu powyżej. Zgodnie z tym formatem jest to proste.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Tags/any(d:d/TagName eq '{tag name}')
  &$select=WorkItemId, Title, State

Filtrowanie elementów roboczych dla określonego zespołu

Użyj następującego zapytania, aby wyświetlić listę elementów roboczych dla określonego zespołu.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=Teams/any(d:d/TeamName eq '{team name}')
  &$select=WorkItemId, Title, State

Filtrowanie elementów roboczych na podstawie pola, które kiedykolwiek ma określoną wartość

Poniższe zapytanie jest podobne do zapytania elementu roboczego, które używa operatora Was Ever .

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?
  $filter=WorkItemType eq '{Type}'
     and Revisions/any(r:r/ResolvedBy/UserName eq '{User}') 

Przykładowe zapytanie:

Poniższe zapytanie zwraca elementy robocze, które kiedykolwiek zostały przypisane do narzędzia Jamal Hartnett, którego adres e-mail to "fabrikamfiber4@hotmail.com" dla projektu Fabrikam Fiber .

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/WorkItems?
  $select=WorkItemType, Title, State, 
  &$expand=AssignedTo($select=UserEmail), Area($select=AreaPath)
  &$filter=(WorkItemType ne '' AND State ne '' AND Revisions/any(r:r/AssignedTo/UserEmail eq 'fabrikamfiber4@hotmail.com'))
  &$orderby=WorkItemType asc

Przykładowa odpowiedź:

Odpowiedź zwraca dwa elementy robocze.

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/Design%20Agile/_odata/v4.0-preview/$metadata#WorkItems(Priority,WorkItemType,Title,State,TagNames,AssignedTo(UserEmail),Area(AreaPath))",
   "value":[
      {
         "Title":"New home page design",
         "WorkItemType":"Feature",
         "State":"Closed",
         "AssignedTo":{
            "UserEmail":"fabrikamfiber4@hotmail.com"
         },
         "Area":{
            "AreaPath":"Design Agile"
         }
      },
      {
         "Title":"Check performance",
         "WorkItemType":"User Story",
         "State":"New",
         "AssignedTo":{
            "UserEmail":"fabrikamfiber4@hotmail.com"
         },
         "Area":{
            "AreaPath":"Design Agile"
         }
      }
   ]
}

Pobieranie zespołów przypisanych w ścieżce obszaru

Poniższe zapytanie zwraca nazwy zespołów przypisanych do ścieżek obszaru w obszarze Zarządzanie kontami dla projektu Fabrikam Fiber .

> https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v4.0-preview/Areas?
>      $filter=startswith(AreaPath,'Fabrikam Fiber\Account Management')
>      &$select=AreaPath&$expand=Teams($select=TeamName)
>```
The response returns three area paths and the names of several teams assigned to each. 

> [!div class="tabbedCodeSnippets"]
```OData
> @odata.context	"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#Areas(AreaPath,Teams(TeamName))"
> value	
> 0	
>   AreaPath             "Fabrikam Fiber\\Account Management\\Customer Profile"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Fabrikam Team"
>       2	
>           TeamName     "Customer Profile"
> 1	
>   AreaPath             "Fabrikam Fiber\\Account Management\\Shopping Cart"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Shopping Cart"
>       2	
>           TeamName     "Fabrikam Team"
> 2	
>   AreaPath             "Fabrikam Fiber\\Account Management"
>   Teams	
>       0	
>           TeamName     "Organization Management"
>       1	
>           TeamName     "Fabrikam Team"

Zwracanie historii określonego elementu roboczego

Wysyłasz zapytanie do WorkItemRevisions zestawu jednostek, aby wyświetlić listę historii elementów roboczych. Poniższe zapytanie zwraca wartość pola Tytuł, Stan i Ścieżka iteracji dla każdej poprawki dla określonego elementu roboczego.

https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItemRevisions?
  $filter=WorkItemId eq {Id}
  &$select=WorkItemId, Title, State, Iteration Path

Uwaga

Za każdym razem, gdy zostanie wprowadzona zmiana elementu roboczego, w tym zmiana wartości klasyfikacji stosu, zostanie utworzona poprawka. Aby dowiedzieć się więcej na temat danych historycznych, zobacz Stosowanie filtrów do danych historycznych.

Przykładowe zapytanie:

Na przykład następujące poprawki składni dla identyfikatora ID=1145 w projekcie Fabrikam Fiber.

https://analytics.dev.azure.com/fabrikam/Fabrikam Fiber/_odata/v1.0/WorkItemRevisions?$select=WorkItemId, Title, State&$expand=Iteration($select=IterationPath)&$filter=(Project/ProjectName eq 'Fabrikam Fiber' AND WorkItemId eq 1145 AND State ne '' AND Revision gt 1)

Przykładowa odpowiedź:

A odpowiedź zwraca dane dla czterech poprawek:

{
   "@odata.context":"https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItemRevisions(WorkItemId,Title,State,Iteration(IterationPath))",
   "value":[
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Future"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Future"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"New",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
         }
      },
      {
         "WorkItemId":1145,
         "Title":"Sprint 2 work added in June",
         "State":"Done",
         "Iteration":{
            "IterationPath":"Fabrikam Fiber\\Release 1\\Sprint 2"
         }
      }
   ]
}