Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Verwenden Sie die OData-Option $apply , um Ihre Daten in Microsoft Dataverse zu aggregieren und zu gruppieren. Mit dieser Abfrageoption können Sie Berechnungen wie Summe, Anzahl, Mittelwert und Gruppierungsvorgänge für Sammlungen von bis zu 50.000 Datensätzen ausführen.
Die Aggregatfunktionen funktionieren mit einer Sammlung von bis zu 50.000 Datensätzen. Weitere Informationen zur Verwendung von Aggregatfunktionen mit Dataverse finden Sie unter "Aggregierte Daten mithilfe von FetchXml".
Weitere Informationen zur OData-Datenaggregation finden Sie in der OData-Erweiterung für die Datenaggregation, Version 4.0. Beachten Sie, dass Dataverse nur eine Teilmenge dieser Aggregatmethoden unterstützt.
Anmerkung
groupbymit Datum/Uhrzeit-Werten wird nicht unterstützt.$orderbymit Aggregatwerten wird nicht unterstützt. Diese Einschränkung gibt den Fehler zurück:The query node SingleValueOpenPropertyAccess is not supported.
Beispiele
Die folgenden Beispiele zeigen, wie Aggregatfunktionen verwendet werden:
- Liste mit eindeutigen Status in der Abfrage
- Anzahl nach Statuswerten
- Summe der aggregierten Einnahmen
- Durchschnittlicher Umsatz basierend auf dem Status
- Durchschnittlicher Umsatz basierend auf dem Status
- Gesamtumsatz nach primärem Kontaktnamen
- Primäre Kontaktnamen für Konten in 'WA'.
- Datum und Uhrzeit für zuletzt erstellten Datensatz
- Erstellungsdatum und Uhrzeit des ersten Datensatzes
Diese Beispiele zeigen der Kürze halber nicht die vollständige Anfrage und Antwort.
Liste der einzigartigen Status in der Abfrage
GET accounts?$apply=groupby((statuscode))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2
}
]
}
Anzahl nach Statuswerten
GET accounts?$apply=groupby((statuscode),aggregate($count as count))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"count@OData.Community.Display.V1.FormattedValue": "8",
"count": 8
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"count@OData.Community.Display.V1.FormattedValue": "1",
"count": 1
}
]
}
Summe der aggregierten Einnahmen
GET accounts?$apply=aggregate(revenue with sum as total)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"total@OData.Community.Display.V1.FormattedValue": "$440,000.00",
"total": 440000.000000000
}
]
}
Durchschnittlicher Umsatz basierend auf dem Status
GET accounts?$apply=groupby((statuscode),aggregate(revenue with average as averagevalue))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"averagevalue@OData.Community.Display.V1.FormattedValue": "$53,750.00",
"averagevalue": 53750.000000000
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"averagevalue@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"averagevalue": 10000.000000000
}
]
}
Durchschnittlicher Umsatz basierend auf dem Status
GET accounts?$apply=groupby((statuscode),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Active",
"statuscode": 1,
"total@OData.Community.Display.V1.FormattedValue": "$430,000.00",
"total": 430000.000000000
},
{
"statuscode@OData.Community.Display.V1.FormattedValue": "Inactive",
"statuscode": 2,
"total@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"total": 10000.000000000
}
]
}
Gesamter Kontoumsatz nach primärem Kontaktnamen
GET accounts?$apply=groupby((primarycontactid/fullname),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"total@OData.Community.Display.V1.FormattedValue": "$10,000.00",
"total": 10000.000000000,
"contact_fullname": "Jim Glynn (sample)"
},
{
"total@OData.Community.Display.V1.FormattedValue": "$80,000.00",
"total": 80000.000000000,
"contact_fullname": "Maria Campbell (sample)"
},
... <truncated for brevity>
]
}
Primäre Kontaktnamen für Konten in 'WA'.
GET accounts?$apply=filter(address1_stateorprovince eq 'WA')/groupby((primarycontactid/fullname))
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"contact_fullname": "Rene Valdes (sample)"
},
{
"contact_fullname": "Robert Lyon (sample)"
},
{
"contact_fullname": "Scott Konersmann (sample)"
}
]
}
Datum und Uhrzeit für den zuletzt erstellten Datensatz
GET accounts?$apply=aggregate(createdon with max as lastCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"lastCreate@OData.Community.Display.V1.FormattedValue": "3/25/2023 10:42 AM",
"lastCreate": "2023-03-25T17:42:47Z"
}
]
}
Erstellungsdatum und -uhrzeit des ersten Datensatzes
GET accounts?$apply=aggregate(createdon with min as firstCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antworttext
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"firstCreate@OData.Community.Display.V1.FormattedValue": "3/25/2023 10:42 AM",
"firstCreate": "2023-03-25T17:42:46Z"
}
]
}
Bestimmte Spaltenwerte
OData verfügt nicht über eine $distinct Abfrageoption, mit der Ergebnisse auf eindeutige Werte beschränkt werden können. Verwenden Sie stattdessen die $apply Systemabfrageoption mit der groupby Transformation. Diese Methode gibt für jede Eigenschaft unterschiedliche Werte zurück.
Anforderung:
GET [Organization URI]/api/data/v9.2/accounts?$apply=groupby((statecode,statuscode,accountcategorycode))
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Antwort:
HTTP/1.1 200 OK
Content-Type: application/json; odata.metadata=minimal
OData-Version: 4.0
Preference-Applied: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"statuscode": 1,
"statecode": 0
},
{
"statuscode": 1,
"statecode": 0,
"accountcategorycode": 1
},
{
"statuscode": 1,
"statecode": 0,
"accountcategorycode": 2
},
{
"statuscode": 2,
"statecode": 1
}
]
}
Einschränkungen der OData-Aggregation
In diesem Abschnitt werden Funktionen beschrieben, die mithilfe der Aggregation mit FetchXml verfügbar sind, die derzeit nicht mit OData verfügbar sind.
Eindeutige Zahlen mit CountColumn erhalten
Sie können keine unterschiedliche Anzahl von Werten abrufen, indem Sie CountColumn mit OData verwenden. Erfahren Sie mehr über unterschiedliche Spaltenwerte mithilfe von FetchXml.
Zeitzone beim Gruppieren nach Datum
Die Gruppierung nach Teilen eines Datums verwendet immer UTC-Zeit, und es gibt keine Möglichkeit anzugeben, dass stattdessen die Zeitzone des Benutzers verwendet werden soll. Informationen zum Gruppieren nach Teilen eines Datums in FetchXml.
Zeilenaggregation
Wenn für eine Tabelle eine hierarchische Beziehung festgelegt ist, können Sie für die hierarchische Beziehung kein Zeilenaggregat in der Suchspalte zurückgeben. Erfahren Sie mehr über Zeilenaggregate mithilfe von FetchXml.
Limit pro Abfrage
Sie können kein konfigurierbares Aggregatlimit angeben. Erfahren Sie mehr über abfragespezifische Grenzwerte mithilfe von FetchXml.
Einschränkungen
Abfragen, doe aggregierte Werte zurückgeben, sind auf 50.000 Datensätze beschränkt. Diese Beschränkung hilft dabei, die Systemleistung und Zuverlässigkeit zu erhalten. Wenn die Filterkriterien in Ihrer Abfrage mehr als 50.000 Datensätze enthalten, wird die folgende Fehlermeldung angezeigt:
Nummer:
-2147164125
Code:8004E023
Meldung:AggregateQueryRecordLimit exceeded. Cannot perform this operation.
Client-Fehlermeldung: Die maximale Datensatzgrenze wird überschritten. Reduzieren Sie die Anzahl der Datensätze.
Um diesen Fehler zu vermeiden, fügen Sie entsprechende Filter zu Ihrer Abfrage hinzu, um sicherzustellen, dass nicht mehr als 50.000 Datensätzen ausgewertet werden. Führen Sie Ihre Abfrage dann mehrmals aus und kombinieren Sie die Ergebnisse. Geeignete Filter hängen von der Art Ihrer Daten ab, es kann sich jedoch auch um einen Datumsbereich oder eine Teilmenge von Werten in einer Auswahlspalte handeln.
Nächste Schritte,
Erfahren Sie, wie Sie Zeilen zählen.