Aggregieren von Daten mit OData
Verwenden Sie die $apply
Option, um Ihre Daten zu aggregieren und zu gruppieren.
Die Aggregatfunktionen werden auf eine Sammlung von 50.000 Datensätzen beschränkt. Weitere Informationen zur Verwendung der Aggregatfunktionalität Dataverse finden Sie hier: Daten mit FetchXml aggregieren.
Weitere Informationen über die OData-Datenaggregation finden Sie hier: OData Erweiterung für Datenaggregation Version 4.0. Beachten Sie, dass Dataverse nur eine Teilmenge dieser Aggregatmethoden unterstützt.
Hinweis
groupby
mit Datums-/Uhrzeitwerten wird nicht unterstützt.$orderby
mit aggregierten Werten wird nicht unterstützt. Dies gibt den Fehler zurück:The query node SingleValueOpenPropertyAccess is not supported
.
Beispiele
Im Folgenden finden Sie einige Beispiele:
- 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
- Firmenumsatz nach primärem Kontaktnamen
- Primäre Kontaktnamen für Konten in 'WA'.
- Datum und Uhrzeit für zuletzt erstellten Datensatz
- Datum und Uhrzeit für zuerst erstellten Datensatz
Diese Beispiele zeigen der Kürze halber nicht die vollständige Anfrage und Antwort.
Liste mit eindeutigen 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
}
]
}
Firmenumsatz 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 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"
}
]
}
Datum und Uhrzeit für zuerst erstellten Datensatz
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, um die Ergebnisse auf eindeutige Werte zu beschränken. Verwenden Sie stattdessen die $apply
Systemabfrageoption mit der groupby
Transformation. Dies 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 bei der OData-Aggregation
In diesem Abschnitt werden Funktionen beschrieben, die bei der Aggregation mit FetchXml verfügbar sind, bei Verwendung von OData derzeit jedoch nicht.
Eindeutige Zahlen mit CountColumn erhalten
Mit OData können Sie mit CountColumn keine eindeutige Anzahl von Werten abrufen. Erfahren Sie mehr über eindeutige Spaltenwerte bei Verwendung von FetchXml
Zeitzone beim Gruppieren nach Datum
Beim Gruppieren nach Teilen eines Datums wird immer die UTC-Zeit verwendet. Es kann nicht angegeben werden, dass stattdessen die Zeitzone des Benutzenden verwendet werden soll, was in FetchXml möglich ist
Zeilenaggregat
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 bei Verwendung von FetchXml
Limit pro Abfrage
Es gibt keine Möglichkeit, eine konfigurierbare Aggregationsgrenze festzulegen Erfahren Sie mehr über Grenzen pro Abfrage bei Verwendung 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.
Hinweis
Können Sie uns Ihre Präferenzen für die Dokumentationssprache mitteilen? Nehmen Sie an einer kurzen Umfrage teil. (Beachten Sie, dass diese Umfrage auf Englisch ist.)
Die Umfrage dauert etwa sieben Minuten. Es werden keine personenbezogenen Daten erhoben. (Datenschutzbestimmungen).