Compartir por


Agregar datos mediante FetchXml

FetchXML incluye características de agrupación y agregación que permiten calcular la suma, el promedio, el mínimo, el máximo y el recuento en varias filas de datos.

Para devolver un valor agregado, debe:

  • Establezca el atributo fetch elementaggregate en true.

  • Establezca el alias atributo para cada elemento de atributo.

  • Establezca el aggregate atributo para cada elemento de atributo en una de estas funciones de agregado:

    Función Valor devuelto
    avg Valor medio de los valores de columna con datos.
    count Número de filas.
    countcolumn Número de filas con datos en esa columna.
    max Valor máximo de las filas de esa columna.
    min El valor mínimo de las filas dentro de esa columna.
    sum El valor total de los valores de la columna con datos.

Tenga en cuenta los siguientes puntos:

  • Los valores NULL no se consideran al calcular valores agregados.
  • Puede usar datos de tablas combinadas mediante el elemento link-entity.
  • Puede aplicar filtros para limitar los resultados como con cualquier consulta.

Example

Supongamos que tiene 10 registros de cuenta con los siguientes datos:

Número de empleados Nombre Dirección 1 Ciudad Creadas el
NULO Cuenta de ejemplo NULO 8/25/2023
1,500 Contoso Pharmaceuticals (ejemplo) Sevilla 3/25/2023
2,700 Fabrikam, Inc. (ejemplo) Lynnwood 3/25/2023
2,900 Blue Yonder Airlines (ejemplo) Los Angeles 3/25/2023
2,900 City Power & Light (ejemplo) Sevilla 3/25/2023
3,900 Bodega Coho (muestra) Fénix 3/25/2023
4,300 Adventure Works (ejemplo) Santa Cruz 3/25/2023
4,800 Alpine Ski House (ejemplo) Missoula 3/25/2023
6,000 Litware, Inc. (ejemplo) Dallas 3/25/2023
6,200 A. Datum Corporation (ejemplo) Sevilla 3/25/2023

La consulta siguiente devuelve datos agregados para la numberofemployees columna.

<fetch aggregate='true'>
  <entity name='account'>
    <attribute name='numberofemployees'
      alias='Average'
      aggregate='avg' />
    <attribute name='numberofemployees'
      alias='Count'
      aggregate='count' />
    <attribute name='numberofemployees'
      alias='ColumnCount'
      aggregate='countcolumn' />
    <attribute name='numberofemployees'
      alias='Maximum'
      aggregate='max' />
    <attribute name='numberofemployees'
      alias='Minimum'
      aggregate='min' />
    <attribute name='numberofemployees'
      alias='Sum'
      aggregate='sum' />
  </entity>
</fetch>

Los resultados son una sola fila:

 --------------------------------------------------------------
 | Average | Count | ColumnCount | Maximum | Minimum | Sum    |
 --------------------------------------------------------------
 | 3,911   | 10    | 9           | 6,200   | 1,500   | 35,200 |
 --------------------------------------------------------------

Valores de columna distintos

Al usar la countcolumn función de agregado, puede establecer el distinct atributo para devolver un recuento de valores únicos para la columna.

<attribute name='numberofemployees' 
   alias='ColumnCount' 
   aggregate='countcolumn' 
   distinct='true' />

Al configurarse para la consulta anterior, los resultados muestran 8 en lugar de 9 porque dos filas del conjunto de datos tienen un valor de 2,900 en el número de empleados.

Grouping

Agrupe los resultados de una consulta de agregado agregando un elemento de atributo con el groupby atributo en lugar del aggregate atributo . Al agrupar, debe especificar un elemento de orden con un alias valor establecido en el alias del grupo.

Por ejemplo, la consulta siguiente devuelve la suma de empleados y el recuento por ciudad:

<fetch aggregate='true'>
   <entity name='account'>
      <attribute name='numberofemployees'
         alias='Total'
         aggregate='sum' />
      <attribute name='address1_city'
         alias='Count'
         aggregate='count' />
      <attribute name='address1_city'
         alias='City'
         groupby='true' />
      <order alias='City' />
   </entity>
</fetch>

La consulta agrupa los resultados por valor de la Ciudad, combinando los resultados de las tres filas donde la Ciudad es "Redmond".

Total Total City
0 1 NULO
6,000 1 Dallas
2,900 1 Los Angeles
2,700 1 Lynnwood
4,800 1 Missoula
3,900 1 Fénix
10,600 3 Sevilla
4,300 1 Santa Cruz

Agrupación por partes de una fecha

Puede seleccionar qué parte de la fecha se va a usar al agrupar por fecha. Establezca el atributo attribute elementdategrouping en uno de los siguientes valores:

Importancia Description
day Agrupar por día del mes
week Agrupar por semana del año
month Agrupar por mes del año
quarter Agrupar por trimestre del año fiscal
year Agrupar por año
fiscal-period Agrupar por período del año fiscal
fiscal-year Agrupar por año fiscal

Más información sobre la configuración del año fiscal

De forma predeterminada, las agrupaciones de fechas usan la zona horaria del usuario. Establezca el elemento de atributousertimezone en "false" para especificar que se use la zona horaria UTC en su lugar.

La siguiente consulta agrupa los registros de cuenta mostrando el número de empleados según cuándo se crearon los registros.

<fetch aggregate='true'>
   <entity name='account'>
      <attribute name='numberofemployees'
         alias='Total'
         aggregate='sum' />
      <attribute name='createdon'
         alias='Day'
         groupby='true'
         dategrouping='day' />
      <attribute name='createdon'
         alias='Week'
         groupby='true'
         dategrouping='week' />
      <attribute name='createdon'
         alias='Month'
         groupby='true'
         dategrouping='month' />
      <attribute name='createdon'
         alias='Year'
         groupby='true'
         dategrouping='year' />
      <attribute name='createdon'
         alias='FiscalPeriod'
         groupby='true'
         dategrouping='fiscal-period' />
      <attribute name='createdon'
         alias='FiscalYear'
         groupby='true'
         dategrouping='fiscal-year' />
      <order alias='Month' />
   </entity>
</fetch>

En la tabla siguiente se muestra el resultado mediante el conjunto de datos de ejemplo mencionado anteriormente:

 -----------------------------------------------------------------------
 | Total  | Day | Week | Month | Year  | FiscalPeriod     | FiscalYear |
 -----------------------------------------------------------------------
 | 35,200 | 25  | 12   | 3     | 2,023 | Quarter 1 FY2023 | FY2023     |
 -----------------------------------------------------------------------
 | 0      | 27  | 35   | 8     | 2,023 | Quarter 3 FY2023 | FY2023     |
 -----------------------------------------------------------------------

Ejemplo de agrupación de fechas de período fiscal

En el ejemplo siguiente se muestra una expresión de agregación FetchXML que suma el número total de pedidos cumplidos y agrupa el resultado por semestre fiscal y año fiscal.

<fetch aggregate="true">
   <entity name="order">
      <attribute name="totalamount"
         aggregate="sum"
         alias="total" />
      <attribute name="datefulfilled"
         groupby="true"
         dategrouping="fiscal-period" />
   </entity>
</fetch>

Agregación de filas

Cuando una tabla tiene definida una relación jerárquica, puede devolver un agregado de fila en la columna de búsqueda de la relación jerárquica.

En el ejemplo siguiente se devuelve el número de cuentas relacionadas en una columna llamada CountChildren cuando la columna parentaccountid de registros de cuenta secundaria es igual a la columna actual de cuenta accountid.

<fetch top='5'>
   <entity name='account'>
      <attribute name='name' />
      <attribute name='accountid'
         alias='numberOfChildren'
         rowaggregate='CountChildren' />
      <order attribute='accountid'
         descending='true' />
   </entity>
</fetch>

Limitaciones

Las consultas que devuelven valores agregados están limitadas a 50 000 registros. Este límite ayuda a mantener el rendimiento y la confiabilidad del sistema. Si los criterios de filtro de la consulta devuelven más de 50 000 registros, obtendrá el siguiente error:

Número: -2147164125
Código: 8004E023
Mensaje: AggregateQueryRecordLimit exceeded. Cannot perform this operation.
Mensaje de error del cliente: se supera el límite máximo de registros. Reduzca el número de registros.

Para evitar este error, agregue filtros adecuados a la consulta para asegurarse de que no evalúa más de 50 000 registros. A continuación, ejecute la consulta varias veces y combine los resultados. Los filtros adecuados dependen de la naturaleza de los datos, pero podrían ser un intervalo de fechas o un subconjunto de valores en una columna de elección.

Límite por consulta

Incluso con el límite predeterminado para las consultas agregadas aplicadas, la consulta puede tardar algún tiempo en completarse. Puede usar el aggregatelimit atributo en una consulta para aplicar un límite inferior personalizado que devuelva el AggregateQueryRecordLimit exceeded error si los resultados son mayores que el límite personalizado.

En este ejemplo, el límite máximo de filas personalizado es 10:

<fetch aggregate='true'
   aggregatelimit = '10'>
   <entity name='opportunity'>
      <attribute name='name'
         alias='opportunity_count'
         aggregate='count' />
   </entity>
</fetch>

El límite por consulta no puede superar el límite de agregado predeterminado.

Pasos siguientes

Obtenga información sobre cómo contar filas.