Erstellen von OData-Abfragen für Analytics in Azure DevOps
Azure DevOps Server | Azure DevOps Server 2022 - Azure DevOps Server 2019
Analytics, die Berichtsplattform für Azure DevOps, kann quantitative Fragen zu der Vergangenheit oder dem aktuellen Status Ihrer Projekte beantworten. Analytics unterstützt OData-Abfragen seiner Metadaten- und Entitätssatzdaten. Wenn Sie einfache Abfragen aus Ihrem Webbrowser ausführen, sind Sie mit dem Datenmodell und dem Abfrageprozess vertraut.
In diesem Artikel lernen Sie Folgendes:
- Erstellen einer Analytics-OData-Abfrage für die Cloud oder lokal
- Abfragen von Analysemetadaten
- Abfragen von Analytics-OData für einen Entitätssatz
- Welche Abfrageoptionen unterstützt werden, und die empfohlene Sequenz
- Wann das serverseitige Paging erzwungen wird
Sie können Analytics von jedem unterstützten Webbrowser abfragen. Weitere Tools, die Sie zum Abfragen von Analytics verwenden können, finden Sie unter Analyseabfragetools.
Hinweis
OData, ein Protokoll auf Anwendungsebene für die Interaktion mit Daten über RESTful(where REST=Representational State Transfer)-Schnittstellen), unterstützt die Beschreibung von Datenmodellen sowie das Bearbeiten und Abfragen von Daten gemäß diesen Modellen. Das Entitätsdatenmodell (Entity Data Model, EDM) oder Metadaten beschreibt die Informationen, die in Analytics verfügbar sind, einschließlich der Entitäten, Entitätstypen, Eigenschaften, Beziehungen und Enumerationen, die Sie zum Abfragen der Daten zum Erstellen von Berichten verwenden. Eine Übersicht über OData finden Sie unter Willkommen bei OData.
Voraussetzungen
Kategorie | Anforderungen |
---|---|
Zugriffsebenen | - Projektmitglied. - Mindestens Basis-Zugriff. |
Berechtigungen | Standardmäßig verfügen Projektmitglieder über die Berechtigung zum Abfragen von Analysen und Erstellen von Ansichten. Weitere Informationen zu anderen Voraussetzungen für die Dienst- und Featureaktivierung sowie allgemeine Datenverfolgungsaktivitäten finden Sie unter Berechtigungen und Voraussetzungen für den Zugriff auf Analytics. |
URL-Komponenten zum Abfragen der Metadaten
Analytics macht das Entitätsmodell an der Metadaten-URL verfügbar, die durch Anfügen $metadata
an die Stamm-URL des Diensts gebildet wird. Analytics bietet Dienststammangaben für ein Projekt oder eine gesamte Organisation in Azure DevOps.
Sie können eines der folgenden Datenelemente nachschlagen, indem Sie die Metadaten abfragen.
- Entitätstypen und Entitätssätze
- Eigenschaften und Navigationseigenschaften
- Ersatzschlüssel
- Aufzählungslisten
- EntitySet
- Container
- Filterfunktionen (
Org.OData.Capabilities.V1.FilterFunctions
) - Unterstützte Aggregationen (
Org.OData.Aggregation.V1.ApplySupported
) - Batch-Support (
Org.OData.Capabilities.V1.BatchSupportType
)
Die verwendete URL hängt davon ab, ob Sie Daten für Azure DevOps Services (Cloud) oder einen lokalen Azure DevOps Server abfragen.
Um die Metadaten für eine Organisation oder ein Projekt abzufragen, die in der Cloud gehostet werden, geben Sie die URL-Syntax ein, wie unten in einem Webbrowser gezeigt. Ersetzen Sie {OrganizationName}
und {ProjectName}
durch den Namen Ihrer Organisation und den Namen des Projekts, die oder das Sie abfragen möchten. Um alle Metadaten für die Organisation zurückzugeben, geben Sie nicht den Projektnamen an.
https://analytics.dev.azure.com/{OrganizationName}/{ProjectName}/_odata/version/$metadata
\______________________________/\______________________________/\______________/\_________/
| | | |
Analytics service root URL Organization/Project OData version return metadata
Hinweis
Die neueste OData-Version von Analytics ist v4.0-preview. Sie können diese Version für alle Abfragen für den gehosteten Dienst verwenden. Weitere Informationen zu Analytics-Versionen und verfügbaren Daten finden Sie unter Datenmodell für Analytics.
Hier ist ein Beispiel für die fabrikam-Organisation, die in Azure DevOps Services gehostet wird.
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/$metadata
Interpretieren der Metadatenantwort
Analytics gibt eine XML-Datei des Datenmodells zurück. Verwenden Sie die Suchfunktion Ihres Browsers, um Informationen zu der Entität zu finden, die Sie interessiert.
Tipp
Je nachdem, welchen Browser Sie verwenden, kann diese Datei in lesbarer Weise formatiert werden. Wenn sie nicht formatiert ist, finden Sie einen kostenlosen Online-XML-Formatierer über eine Webbrowsersuche.
Die beiden in den Analysemetadaten definierten Hauptschemas sind Microsoft.VisualStudio.Services.Analytics.Model
, die Entitätstypen und aufgezählten Typen und deren Member sowie das Default
-Schema, das die Entitätscontainer und Entitätssätze definiert und unterstützte OData-Filter-, Transformations- und benutzerdefinierte Aggregationsfunktionen definiert. Weitere Informationen finden Sie unter Analytics-OData-Metadaten.
<?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>
Zugehörige Entitäten und Navigationseigenschaften
Alle Entitätstypen sind Eigenschaften und Navigationseigenschaften zugeordnet. Sie können Ihre Abfragen von Entitätssätzen mithilfe dieser Eigenschaftentypen filtern. Diese werden in den Metadaten unter der EntityType
als eine Property
oder NavigationalProperty
aufgelistet. Sie verwenden verwandte Entitäten, um zusätzliche Filter anzugeben, z. B. Iterationspfade, Bereichspfade oder Teams.
Der folgende Codeausschnitt stellt eine partielle Ansicht der Metadaten für die WorkItem
-Entität bereit. Eigenschaften entsprechen einem Arbeitsaufgabenfeld sowie bestimmten Daten, die von Analytics erfasst werden, wie LeadTimeDays
und CycleTimeDays
. Navigationseigenschaften entsprechen anderen Entitätssätzen oder bestimmten Analysedaten, die für den Entitätstyp erfasst werden, wie Revisions
, Links
, Children
und 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"/>
...
URL-Komponenten zum Abfragen von Entitäten
Um Analysedaten abzufragen und Berichte zu erstellen, fragen Sie in der Regel einen Entitätssatz ab. Eine Übersicht über unterstützte Entitäten finden Sie unter Analytics-OData-Metadaten.
Die folgende URL wird verwendet, um eine bestimmte EntitySet
abzufragen, wie WorkItems
, WorkItemSnapshot
und PipelineRuns
.
https://analytics.dev.azure.com/OrganizationName/ProjectName/_odata/version/EntityType?{Query-options}
\______________________________/\__________________________/ \____________/\_________/\_____________/
| | | | |
Analytics service root URL Organization/Project OData version Entity Query parts
Hier ist ein Beispiel für die fabrikam-Organisation, die die Anzahl der Arbeitselemente zurückgibt, die für das Fabrikam Fiber-Projekt definiert sind.
https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/WorkItems?%20$apply=aggregate($count%20as%20Count)
Im Beispiel werden 1399 Arbeitselemente zurückgegeben.
{
"@odata.context": "https://analytics.dev.azure.com/fabrikam/Fabrikam%20Fiber/_odata/v4.0-preview/$metadata#WorkItems(Count)",
"value": [
{
"@odata.id": null,
"Count": 1399
}
]
}
Hinweis
Wenn Sie keine $select
oder $apply
-Klausel einschließen, erhalten Sie eine Warnung, wie "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."
. Dies entspricht dem Ausführen einer select-Anweisung für den Entitätssatz und dem Zurückgeben aller Elemente, aller Spalten und aller Zeilen. Wenn Sie über eine große Anzahl von Datensätzen verfügen, kann der Vorgang mehrere Sekunden dauern. Bei mehr als 10.000 Arbeitselemente wird das servergesteuerte Paging erzwungen.
Um zu vermeiden, dass Nutzungsgrenzwerte gelten, schließen Sie immer eine $select
oder $apply
-Klausel ein.
Informationen zu Entitätsmetadaten und Beziehungsinformationen finden Sie in den folgenden Artikeln:
- Kalenderdatum, Projekt und Benutzermetadatenverweis
- Metadatenreferenz für Azure Boards
- Metadatenreferenz für Azure-Pipelines
- Metadatenreferenz für Testpläne
Beispiel: Abfragen eines bestimmten Entitätssatzes
Um einen bestimmten Entitätssatz abzufragen, wie WorkItems
, Areas
oder Projects
fügen Sie den Namen des Entitätssatzes hinzu: /WorkItems
, /Areas
oder /Projects
. Eine vollständige Liste der Entitätssätze finden Sie unter Datenmodell für Analytics.
Sie können beispielsweise eine Liste der für Ihre Organisation definierten Projekte abrufen, indem Sie /Projects
abfragen und auswählen, um die ProjectName
-Eigenschaft zurückzugeben. Für die Fabrikam-Organisation ist die URL wie unten dargestellt.
https://analytics.dev.azure.com/fabrikam/_odata/v4.0-preview/Projects?$select=ProjectName
Analytics gibt die Projektnamen dieser Projekte zurück, die für die fabrikam-Organisation definiert sind.
{
@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"
}
]
}
Abfrageoptionen
Eine Abfrageoption ist ein Satz von Abfragezeichenfolgenparametern, die auf eine Ressource angewendet werden, die helfen kann, die Menge der Daten zu steuern, die für die Ressource in der URL zurückgegeben werden.
Abfrageoptionen sollten in der Reihenfolge angegeben werden, die in der folgenden Tabelle aufgeführt ist.
Abfrageoption | Notizen |
---|---|
$apply |
Gruppe von Transformationen, die Sie auf eine Abfrage anwenden können, z. B.: filter , groupby , aggregate , compute , expand, concat Beispiele finden Sie unter Aggregierte Arbeitsverfolgungsdaten mithilfe von Analytics. |
$compute |
Eine unterstützte OData-Funktion, die Sie angeben können, um berechnete Eigenschaften zu definieren, die in einem $select -, $filter -, oder $orderby -Ausdruck verwendet werden können. |
$filter |
Dient zum Filtern der Liste der zurückgegebenen Ressourcen. Der mit $filter angegebene Ausdruck wird für jede Ressource in der Sammlung ausgewertet, und nur Elemente, bei denen der Ausdruck als wahr bewertet wird, werden in die Antwort aufgenommen. Ressourcen, für die der Ausdruck als „false” oder „null” ausgewertet wird oder welche Referenzeigenschaften aufgrund von Berechtigungen nicht verfügbar sind, werden aus der Antwort weggelassen.Beispiele finden Sie unter Abfragen von Arbeitsverfolgungsdaten mithilfe von Analytics. |
$orderby |
Dient zum Angeben der Reihenfolge, in der Datensätze zurückgegeben werden sollen. Beispiele finden Sie unter Abfragen von Arbeitsverfolgungsdaten mithilfe von Analytics. |
$top /$skip |
Wird verwendet, um die Anzahl der zurückgegebenen Datensätze einzuschränken. Beispiele finden Sie unter Projekt- und organisationsbezogene Abfragen. |
$select /$expand |
Verwenden Sie $select , um die Spalten angeben, die Sie zum Erstellen des Berichts benötigen. Verwenden Sie $expand , um andere Abfrageoptionen zu verschachteln. Jede expandItem wird relativ zur Entität ausgewertet, die die Navigations- oder Datenstromeigenschaft enthält, die erweitert wird.Durch Semikolons getrennte Liste der Abfrageoptionen, die in Klammern eingeschlossen sind, zum Namen der Navigationseigenschaft. Zulässige Systemabfrageoptionen sind $filter , $select , $orderby , $skip , $top , $count , $search und $expand .Beispiele finden Sie unter Abfragen von Arbeitsverfolgungsdaten mithilfe von Analytics. |
$skiptoken |
Wird verwendet, um eine angegebene Anzahl von Datensätzen zu überspringen. |
$count oder $count=true |
Geben Sie $count ein, um nur die Anzahl der Datensätze zurückzugeben. Geben Sie $count=true ein, um sowohl eine Anzahl des Datensatzes als auch die abgefragten Daten zurückzugeben. Beispiele finden Sie unter Aggregierte Arbeitsverfolgungsdaten mithilfe von Analytics. |
Tipp
Vermeiden Sie das Vermischen von $apply
- und $filter
- Klauseln in einer einzelnen Abfrage. Um Ihre Abfrage zu filtern, haben Sie zwei Optionen: (1) Verwenden der $filter
-Klausel oder (2) der $apply=filter()
-Kombinationsklausel. Jede dieser Optionen eignet sich hervorragend, die Kombination dieser Optionen kann jedoch zu unerwarteten Ergebnissen führen.
Serverseitiges Paging erzwingen
Analytics erzwingt das Paging, wenn Abfrageergebnisse 10.000 Datensätze überschreiten. In diesem Fall erhalten Sie die erste Seite mit Daten und einen Link, der sich zur nächste Seite führt. Den Link (@odata.nextLink
) finden Sie am Ende der JSON-Ausgabe. Es sieht wie eine ursprüngliche Abfrage aus, gefolgt von $skip
oder $skiptoken
. Zum Beispiel:
{
"@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"
}
Hinweis
Wenn Sie Daten in Clienttools wie Power BI Desktop oder Excel abrufen, folgen Tools automatisch dem nächsten Link und laden alle erforderlichen Datensätze.