Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Use la opción OData $apply para agregar y agrupar los datos en Microsoft Dataverse. Esta opción de consulta permite realizar cálculos como suma, recuento, promedio y operaciones de agrupación en colecciones de hasta 50 000 registros.
Las funciones de agregado funcionan con una colección de hasta 50 000 registros. Para obtener más información sobre el uso de la funcionalidad de agregado con Dataverse, consulte Agregado de datos mediante FetchXml.
Para obtener más información sobre la agregación de datos de OData, consulte 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
groupbycon valores de fecha y hora no es compatible.$orderbyno es compatible con valores agregados. Esta limitación devuelve el error:The query node SingleValueOpenPropertyAccess is not supported.
Ejemplos
En los ejemplos siguientes se muestra cómo usar funciones de agregado:
- Lista de estados únicos en la consulta
- Recuento por valores de estado
- Suma agregada de ingresos
- Promedio de ingresos según el estado
- Suma de los ingresos según 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 creación del primer registro
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 promedio según 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 ingresos según 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
}
]
}
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 la primera creación del registro
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 $distinct para restringir los resultados a valores únicos. En su lugar, use la opción de consulta del sistema $apply con la transformación groupby. Este método 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
En esta sección se describen las funcionalidades disponibles mediante la agregación con FetchXml que no están disponibles actualmente mediante OData.
Obtenga un número distinto con CountColumn
No se puede obtener un número distinto de valores mediante CountColumn con OData. Obtenga información sobre los valores de columna distintos mediante FetchXml.
Zona horaria al agrupar por fecha
La agrupación por partes de una fecha siempre usa la hora UTC y no hay ninguna manera de especificar que se debe usar la zona horaria del usuario en su lugar. Obtenga información sobre la agrupación por partes de una fecha 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 información sobre los agregados de fila mediante FetchXml.
Límite por consulta
No se puede especificar un límite de agregado configurable. Obtenga información sobre los límites por consulta mediante 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.