Datos agregados mediante OData
Utilice la opción $apply
para agregar y agrupar sus datos.
Las funciones agregadas están limitados a una colección de 50.000 registros. Puede encontrar más información sobre el uso de la funcionalidad de agregación con Dataverse aquí: Datos agregados usando FetchXml.
Puede encontrar más información sobre la agregación de datos de OData aquí: Extensión de OData para la versión 4.0 de agregación de datos. Dataverse solo admite un subconjunto de estos métodos agregados.
Nota
No se admite
groupby
con los valores datetime.No se admite
$orderby
con valores agregados. Esto devolverá el error:The query node SingleValueOpenPropertyAccess is not supported
.
Ejemplos
Estos son algunos ejemplos:
- Lista de estados únicos en la consulta
- Recuento por valores de estado
- Suma agregada de ingresos
- Ingresos medios basados en el estado
- Suma de los ingresos basados en el estado
- Recuento total de ingresos por nombre de contacto principal
- Nombres de contacto primario para cuentas de “WA”
- Fecha y hora de registro creado por última vez
- Fecha y hora de registro creado por primera vez
Estos ejemplos no muestran la solicitud y la respuesta completas por motivos de brevedad.
Lista de estados únicos en la consulta
GET accounts?$apply=groupby((statuscode))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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
}
]
}
Recuento por valores de estado
GET accounts?$apply=groupby((statuscode),aggregate($count as count))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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
}
]
}
Suma agregada de ingresos
GET accounts?$apply=aggregate(revenue with sum as total)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@odata.context": "[Organization URI]/api/data/v9.2/$metadata#accounts",
"value": [
{
"total@OData.Community.Display.V1.FormattedValue": "$440,000.00",
"total": 440000.000000000
}
]
}
Ingresos medios basados en el estado
GET accounts?$apply=groupby((statuscode),aggregate(revenue with average as averagevalue))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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
}
]
}
Suma de los ingresos basados en el estado
GET accounts?$apply=groupby((statuscode),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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
}
]
}
Recuento total de ingresos por nombre de contacto principal
GET accounts?$apply=groupby((primarycontactid/fullname),aggregate(revenue with sum as total))
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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>
]
}
Nombres de contacto primario para cuentas de “WA”
GET accounts?$apply=filter(address1_stateorprovince eq 'WA')/groupby((primarycontactid/fullname))
Cuerpo de respuesta
{
"@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)"
}
]
}
Fecha y hora de registro creado por última vez
GET accounts?$apply=aggregate(createdon with max as lastCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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"
}
]
}
Fecha y hora de registro creado por primera vez
GET accounts?$apply=aggregate(createdon with min as firstCreate)
Prefer: odata.include-annotations="OData.Community.Display.V1.FormattedValue"
Cuerpo de respuesta
{
"@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"
}
]
}
Valores de columna distintos
OData no tiene una opción de consulta para restringir los resultados a valores únicos. $distinct
En su lugar, utilice la opción de consulta del sistema $apply
con la transformación groupby
. Esto devuelve valores distintos para cada propiedad.
Solicitud:
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"
Respuesta:
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
}
]
}
Limitaciones de agregación de OData
Esta sección describe las capacidades que están disponibles mediante la agregación con FetchXml y que actualmente no están disponibles mediante OData.
Obtenga un número distinto con CountColumn
No se puede obtener un número específico de valores utilizando CountColumn con OData. Obtenga más información sobre los distintos valores de las columnas utilizando FetchXml
Zona horaria al agrupar por fecha
La agrupación por partes de una fecha siempre usa la hora UTC y no hay forma de especificar que se debe usar la zona horaria del usuario en su lugar disponible en FetchXml
Agregación de filas
Cuando una tabla tiene una relación jerárquica definida, no puede devolver un agregado de filas en la columna de búsqueda para la relación jerárquica. Obtenga más información sobre los agregados de filas utilizando FetchXml
Límite por consulta
No hay forma de especificar un límite agregado configurable. Obtenga más información sobre los límites por consulta utilizando FetchXml
Limitaciones
Las consultas que devuelven valores agregados están limitadas a 50.000 registros. Este límite ayuda a mantener el rendimiento y confiabilidad del sistema. Si el criterio de filtra en su consulta devuelve más de 50.000 registros se mostrará el error siguiente:
Número:
-2147164125
Código:8004E023
Mensaje:AggregateQueryRecordLimit exceeded. Cannot perform this operation.
Mensaje de error al cliente: Se supera el límite de registros máximos. Reduzca el número de registros.
Para evitar este error, agregue filtros adecuados a la consulta para asegurarse de que no evaluará más de 50.000 registros. Después, ejecute su consulta varias veces y combine los resultados. Los filtros adecuados dependen de la naturaleza de sus datos, pero podrían ser un rango de fechas o un subconjunto de valores en una columna de elección.
Pasos siguientes
Aprenda a contar las filas.
Nota
¿Puede indicarnos sus preferencias de idioma de documentación? Realice una breve encuesta. (tenga en cuenta que esta encuesta está en inglés)
La encuesta durará unos siete minutos. No se recopilan datos personales (declaración de privacidad).