Konstruowanie zapytań OData na potrzeby analizy w usłudze Azure DevOps
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Analiza, platforma raportowania dla usługi Azure DevOps, może odpowiedzieć na pytania ilościowe dotyczące przeszłości lub bieżącego stanu projektów. Analiza obsługuje zapytania OData dotyczące metadanych i danych zestawu jednostek. Korzystając z prostych zapytań z przeglądarki internetowej, możesz zapoznać się z modelem danych i procesem zapytań.
W tym artykule poznasz następujące informacje:
- Jak utworzyć zapytanie OData analizy dla chmury lub środowiska lokalnego
- Jak wykonywać zapytania dotyczące metadanych analizy
- Jak wykonywać zapytania dotyczące analizy OData dla zestawu jednostek
- Które opcje zapytania są obsługiwane i zalecana sekwencja
- Gdy stronicowanie po stronie serwera jest wymuszane
Możesz wykonywać zapytania względem usługi Analytics z dowolnej obsługiwanej przeglądarki internetowej. Aby uzyskać informacje o innych narzędziach, których można użyć do wykonywania zapytań w usłudze Analytics, zobacz Narzędzia zapytań analizy.
Uwaga
OData, protokół na poziomie aplikacji do interakcji z danymi za pośrednictwem interfejsów RESTful (gdzie REST=Representational State Transfer) obsługuje opis modeli danych, a także edytowanie i wykonywanie zapytań dotyczących danych zgodnie z tymi modelami. Model danych jednostki (EDM) lub metadane opisują informacje dostępne z analizy, w tym jednostki, typy jednostek, właściwości, relacje i wyliczenia używane do wykonywania zapytań dotyczących danych w celu tworzenia raportów. Aby zapoznać się z omówieniem usługi OData, zobacz Welcome to OData (Witamy w usłudze OData).
Wymagania wstępne
- Dostęp: być członkiem projektu z co najmniej dostępem podstawowym.
- Uprawnienia: domyślnie członkowie projektu mają uprawnienia do wykonywania zapytań w usłudze Analytics i tworzenia widoków.
- Aby uzyskać więcej informacji na temat innych wymagań 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.
Składniki adresu URL do wykonywania zapytań dotyczących metadanych
Analiza uwidacznia model jednostki pod adresem URL metadanych utworzony przez dołączenie $metadata
go do głównego adresu URL usługi. Analiza udostępnia katalogi głównych usług dla projektu lub całej organizacji w usłudze Azure DevOps.
Możesz wyszukać dowolny z następujących elementów danych, wykonując zapytanie dotyczące metadanych.
- Typy jednostek i zestawy jednostek
- Właściwości i właściwości nawigacji
- Klucze zastępcze
- Wyliczone listy
- EntitySet
- Kontenery
- Funkcje filtru (
Org.OData.Capabilities.V1.FilterFunctions
) - Obsługiwane agregacje (
Org.OData.Aggregation.V1.ApplySupported
) - Obsługa usługi Batch (
Org.OData.Capabilities.V1.BatchSupportType
)
Używany adres URL zależy od tego, czy wykonujesz zapytania dotyczące danych dla usług Azure DevOps Services (w chmurze) czy lokalnego serwera Azure DevOps Server.
Aby wysłać zapytanie o metadane dla organizacji lub projektu hostowanego w chmurze, wprowadź składnię adresu URL, jak pokazano poniżej w przeglądarce internetowej. Zastąp {OrganizationName}
wartości i {ProjectName}
nazwą organizacji oraz nazwą projektu, który chcesz wykonać zapytanie. Aby zwrócić wszystkie metadane organizacji, nie należy określać nazwy projektu.
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/version/$metadata
\______________________________/\______________________________/\______________/\_________/
| | | |
Analytics service root URL Organization/Project OData version return metadata
Uwaga
Najnowsza wersja analizy OData to wersja 4.0-preview. Tej wersji można używać dla wszystkich zapytań względem hostowanej usługi. Aby uzyskać więcej informacji na temat wersji analizy i dostępnych danych, zobacz Model danych dla analizy.
Oto przykład organizacji fabrikam hostowanej w usługach Azure DevOps Services.
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata
Interpretowanie odpowiedzi metadanych
Analiza zwraca plik XML modelu danych. Użyj funkcji wyszukiwania przeglądarki, aby znaleźć informacje specyficzne dla danej jednostki.
Napiwek
W zależności od używanej przeglądarki ten plik może być sformatowany w czytelny sposób. Jeśli nie jest sformatowany, możesz znaleźć bezpłatny formater XML online za pomocą wyszukiwania w przeglądarce internetowej.
Dwa główne schematy zdefiniowane w metadanych analizy to Microsoft.VisualStudio.Services.Analytics.Model
, który definiuje typy jednostek i wyliczane typy oraz ich składowe oraz Default
schemat, który definiuje kontenery jednostek i zestawy jednostek oraz obsługiwane funkcje filtrowania, przekształcania i agregacji niestandardowej OData. Aby uzyskać więcej informacji, zobacz Analytics OData metadata (Metadane OData analizy).
<?xml version="1.0" encoding="UTF-8"?>
<edmx:Edmx xmlns:edmx="http://docs.oasis-open.org/odata/ns/edmx" Version="4.0">
<edmx:DataServices>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Microsoft.VisualStudio.Services.Analytics.Model">
<EntityType Name="Entity Name"/>
</Schema>
<Schema xmlns="http://docs.oasis-open.org/odata/ns/edm" Namespace="Default">
<EntityContainer Name="Container"/>
</Schema>
</edmx:DataServices>
</edmx:Edmx>
Powiązane jednostki i właściwości nawigacji
Wszystkie typy jednostek są skojarzone z właściwościami i właściwościami nawigacji. Zapytania dotyczące zestawów jednostek można filtrować przy użyciu obu tych typów właściwości. Są one wymienione w metadanych w obszarze EntityType
jako lub Property
NavigationalProperty
. Jednostki pokrewne służą do określania dodatkowych filtrów, takich jak ścieżki iteracji, ścieżki obszaru lub teams.
Poniższy fragment kodu zawiera częściowy widok metadanych dla WorkItem
jednostki. Właściwości odpowiadają polu elementu roboczego, a także określonym danym przechwyconym przez analizę, na przykład LeadTimeDays
i CycleTimeDays
. Właściwości nawigacji odpowiadają innym zestawom jednostek lub określonym danym analizy przechwyconym dla typu jednostki, na przykład Revisions
, Links
, Children
i Parent
.
<Key>
<PropertyRef Name="WorkItemId"/>
</Key>
<Property Name="WorkItemId" Type="Edm.Int32" Nullable="false">
<Annotation Term="Ref.ReferenceName" String="System.Id"/>
<Annotation Term="Display.DisplayName" String="Work Item Id"/>
</Property>
<Property Name="InProgressDate" Type="Edm.DateTimeOffset">
<Annotation Term="Display.DisplayName" String="InProgress Date"/>
</Property>
<Property Name="CompletedDate" Type="Edm.DateTimeOffset">
<Annotation Term="Display.DisplayName" String="Completed Date"/>
</Property>
<Property Name="LeadTimeDays" Type="Edm.Double">
<Annotation Term="Display.DisplayName" String="Lead Time Days"/>
</Property>
<Property Name="CycleTimeDays" Type="Edm.Double">
<Annotation Term="Display.DisplayName" String="Cycle Time Days"/>
</Property>
<Property Name="InProgressDateSK" Type="Edm.Int32"/>
<Property Name="CompletedDateSK" Type="Edm.Int32"/>
<Property Name="AnalyticsUpdatedDate" Type="Edm.DateTimeOffset"/>
<Property Name="ProjectSK" Type="Edm.Guid" Nullable="false"/>
<Property Name="WorkItemRevisionSK" Type="Edm.Int32" Nullable="false"/>
...
<NavigationProperty Name="BoardLocations" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.BoardLocation)"/>
<NavigationProperty Name="Teams" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.Team)"/>
<NavigationProperty Name="InProgressOn" Type="Microsoft.VisualStudio.Services.Analytics.Model.CalendarDate">
<ReferentialConstraint Property="InProgressDateSK" ReferencedProperty="DateSK"/>
</NavigationProperty>
<NavigationProperty Name="CompletedOn" Type="Microsoft.VisualStudio.Services.Analytics.Model.CalendarDate">
<ReferentialConstraint Property="CompletedDateSK" ReferencedProperty="DateSK"/>
</NavigationProperty>
<NavigationProperty Name="Revisions" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItemRevision)"/>
<NavigationProperty Name="Links" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItemLink)"/>
<NavigationProperty Name="Children" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItem)"/>
<NavigationProperty Name="Parent" Type="Microsoft.VisualStudio.Services.Analytics.Model.WorkItem">
<ReferentialConstraint Property="ParentWorkItemId" ReferencedProperty="WorkItemId"/>
</NavigationProperty>
<NavigationProperty Name="Processes" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.Process)"/>
<NavigationProperty Name="Descendants" Type="Collection(Microsoft.VisualStudio.Services.Analytics.Model.WorkItem)"/>
<NavigationProperty Name="Project" Type="Microsoft.VisualStudio.Services.Analytics.Model.Project" Nullable="false">
<ReferentialConstraint Property="ProjectSK" ReferencedProperty="ProjectSK"/>
<Annotation Term="Display.DisplayName" String="Project"/>
...
Składniki adresu URL do wykonywania zapytań o jednostki
Aby wykonywać zapytania dotyczące danych usługi Analytics i tworzyć raporty, zazwyczaj wykonujesz zapytania dotyczące zestawu jednostek. Aby zapoznać się z omówieniem obsługiwanych jednostek, zobacz Analytics OData metadata (Metadane OData analizy).
Następujący adres URL służy do wykonywania zapytań względem określonego EntitySet
elementu , takiego jak WorkItems
, WorkItemSnapshot
i PipelineRuns
.
https://analytics.dev.azure.com/OrganizationName/ProjectName/_odata/version/EntityType?{Query-options}
\______________________________/\__________________________/ \____________/\_________/\_____________/
| | | | |
Analytics service root URL Organization/Project OData version Entity Query parts
Oto przykład organizacji fabrikam , która zwraca liczbę elementów roboczych zdefiniowanych dla projektu Fabrikam Fiber.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?%20$apply=aggregate($count%20as%20Count)
Przykład zwraca 1399 elementów roboczych.
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(Count)",
"value": [
{
"@odata.id": null,
"Count": 1399
}
]
}
Uwaga
Jeśli nie dołączysz klauzuli $select
lub $apply
, zostanie wyświetlone ostrzeżenie, takie jak "VS403507: The specified query does not include a $select or $apply clause which is recommended for all queries. Details on recommended query patterns are available here: https://go.microsoft.com/fwlink/?linkid=861060."
Wykonanie instrukcji select w zestawie jednostek i zwrócenie wszystkich kolumn i wszystkich wierszy. Jeśli masz dużą liczbę rekordów, może to potrwać kilka sekund. Jeśli masz więcej niż 10 000 elementów roboczych, wymuszane jest stronicowanie oparte na serwerze.
Aby uniknąć przekroczenia limitów użycia, zawsze należy uwzględnić klauzulę $select
or $apply
.
Aby uzyskać informacje o właściwościach metadanych jednostki i relacji, zobacz następujące artykuły:
- Data kalendarza, projekt i dokumentacja metadanych użytkownika
- Dokumentacja metadanych usługi Azure Boards
- Dokumentacja metadanych dla usługi Azure Pipelines
- Dokumentacja metadanych dla planów testów
Przykład: Wykonywanie zapytań względem określonego zestawu jednostek
Aby wysłać zapytanie do określonego zestawu jednostek, takiego jak WorkItems
, Areas
lub Projects
, dodaj nazwę zestawu jednostek: /WorkItems
, /Areas
lub /Projects
. Aby uzyskać pełną listę zestawów jednostek, zobacz Model danych dla analizy.
Możesz na przykład uzyskać listę projektów zdefiniowanych dla organizacji, wykonując /Projects
zapytanie i wybierając opcję zwrócenia ProjectName
właściwości. W przypadku organizacji firmy fabrikam adres URL jest jak pokazano poniżej.
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/Projects?$select=ProjectName
Analiza zwraca nazwy projektów tych projektów zdefiniowanych dla organizacji fabrikam .
{
@odata.context "https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata#Projects(ProjectName)",
"value": [
{
"ProjectName": "Basic Fabrikam"
},
{
"ProjectName": "Fabrikam Fiber"
},
{
"ProjectName": "MyFirstProject"
},
{
"ProjectName": "Fabrikam Test"
},
{
"ProjectName": "MyPublicProject"
}
]
}
Opcje zapytań
Opcja zapytania to zestaw parametrów ciągu zapytania zastosowanych do zasobu, który może pomóc w kontrolowaniu ilości zwracanych danych dla zasobu w adresie URL.
Opcje zapytania należy określić w kolejności wymienionej w poniższej tabeli.
Opcja kwerendy | Uwagi |
---|---|
$apply |
Zestaw przekształceń, które można zastosować do zapytania, na przykład: filter , , groupby aggregate , , , expand, compute concat Aby zapoznać się z przykładami, zobacz Agregowanie danych śledzenia pracy przy użyciu analizy. |
$compute |
Obsługiwana funkcja OData, którą można określić, aby zdefiniować obliczone właściwości, które mogą być używane w wyrażeniu $select $filter , lub $orderby . |
$filter |
Służy do filtrowania listy zwracanych zasobów. Wyrażenie określone przy $filter użyciu jest obliczane dla każdego zasobu w kolekcji i tylko elementy, w których wyrażenie daje wartość true, są uwzględniane w odpowiedzi. Zasoby, dla których wyrażenie daje wartość false lub null lub które właściwości odwołania są niedostępne z powodu uprawnień, zostaną pominięte w odpowiedzi.Przykłady można znaleźć w temacie Query work tracking data using Analytics (Wykonywanie zapytań dotyczących danych śledzenia pracy przy użyciu usługi Analytics ). |
$orderby |
Użyj polecenia , aby określić sekwencję, w której mają być zwracane rekordy. Aby zapoznać się z przykładami, zobacz Query work tracking data using Analytics (Wykonywanie zapytań dotyczących danych śledzenia pracy przy użyciu analizy). |
$top /$skip |
Użyj polecenia , aby ograniczyć liczbę zwracanych rekordów. Przykłady można znaleźć w temacie Project and organization-scoped queries (Zapytania w zakresie projektu i organizacji). |
$select /$expand |
Użyj $select polecenia , aby określić kolumny potrzebne do skompilowania raportu. Służy $expand do zagnieżdżania innych opcji zapytania. Każda z nich expandItem jest oceniana względem jednostki zawierającej rozszerzaną właściwość nawigacji lub strumienia.Rozdzielana średnikami lista opcji zapytania, ujęta w nawiasy, na nazwę właściwości nawigacji. Dozwolone opcje zapytań systemowych to $filter , , $skip $top $orderby $count $select , , $search i .$expand Aby zapoznać się z przykładami, zobacz Query work tracking data using Analytics (Wykonywanie zapytań dotyczących danych śledzenia pracy przy użyciu analizy). |
$skiptoken |
Użyj polecenia , aby pominąć określoną liczbę rekordów. |
$count lub $count=true |
Wprowadź wartość , $count aby zwrócić tylko liczbę rekordów. Wprowadź wartość $count=true , aby zwrócić zarówno liczbę rekordów, jak i zapytanych danych. Aby zapoznać się z przykładami, zobacz Agregowanie danych śledzenia pracy przy użyciu analizy. |
Napiwek
Unikaj mieszania $apply
i $filter
klauzul w jednym zapytaniu. Aby filtrować zapytanie, masz dwie opcje: (1) użyj klauzuli $filter
lub (2) użyj klauzuli $apply=filter()
kombinacji. Każda z tych opcji działa świetnie samodzielnie, ale połączenie ich razem może prowadzić do nieoczekiwanych wyników.
Wymuszanie stronicowania po stronie serwera
Analiza wymusza stronicowanie, gdy wyniki zapytania przekraczają 10000 rekordów. W takim przypadku uzyskasz pierwszą stronę danych i link, aby wykonać instrukcje, aby uzyskać następną stronę. Link (@odata.nextLink
) można znaleźć na końcu danych wyjściowych JSON. Będzie ona wyglądać podobnie do oryginalnego zapytania, po którym $skip
następuje element lub $skiptoken
. Na przykład:
{
"@odata.context":"https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/$metadata#WorkItems",
"value":[
// 10000 values here
],
"@odata.nextLink":"https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/{version}/WorkItems?$skiptoken=10000"
}
Uwaga
Podczas ściągania danych do narzędzi klienckich, takich jak Program Power BI Desktop lub Excel, narzędzia będą automatycznie śledzić kolejne linki i ładować wszystkie wymagane rekordy.