Agréger des données à l’aide de FetchXml
FetchXML inclut les fonctionnalités de regroupement et d’agrégation qui vous permettent de calculer une somme, une moyenne, un nombre minimal et maximal entre différentes lignes de données.
Pour renvoyer une valeur d’agrégation, vous devez :
Définir l’attribut
aggregate
de l’élément fetch sur true.Définir l’attribut
alias
pour chaque élément attribute.Définir l’attribut
aggregate
pour chaque élément attribute sur l’une de ces fonctions d’agrégation :Fonction Valeur renvoyée avg
La valeur moyenne des valeurs de la colonne avec des données. count
Le nombre de lignes. countcolumn
Le nombre de lignes avec des données dans cette colonne. max
La valeur maximale des lignes dans cette colonne. min
La valeur minimale des lignes dans cette colonne. sum
La valeur totale des valeurs de la colonne avec des données.
Notez les points suivants :
- Les valeurs nulles ne sont pas prises en compte lors du calcul des valeurs d’agrégation.
- Vous pouvez utiliser les données des tables jointes à l’aide de l’élément link-entity.
- Vous pouvez appliquer des filtres pour limiter les résultats comme pour toute requête.
Exemple
Supposons que vous disposiez de 10 enregistrements de compte avec les données suivantes :
Nombre d’employés | Nom | Adresse 1 Ville | Date de création |
---|---|---|---|
NULL | Exemple de compte | NULL | 25/08/2023 |
1 500 | Contoso Pharmaceuticals (exemple) | Colombes | 25/03/2023 |
2 700 | Fabrikam, Inc. (exemple) | Lynnwood | 25/03/2023 |
2 900 | Blue Yonder Airlines (exemple) | Los Angeles | 25/03/2023 |
2 900 | City Power & Light (exemple) | Colombes | 25/03/2023 |
3 900 | Coho Winery (exemple) | Phoenix | 25/03/2023 |
4 300 | Adventure Works (exemple) | Santa Cruz | 25/03/2023 |
4 800 | Alpine Ski House (exemple) | Missoula | 25/03/2023 |
6 000 | Litware, Inc. (exemple) | Dallas | 25/03/2023 |
6 200 | A. Datum Corporation (exemple) | Colombes | 25/03/2023 |
La requête suivante renvoie des données d’agrégation pour la colonne numberofemployees
.
<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>
Les résultats sont une seule ligne :
--------------------------------------------------------------
| Average | Count | ColumnCount | Maximum | Minimum | Sum |
--------------------------------------------------------------
| 3,911 | 10 | 9 | 6,200 | 1,500 | 35,200 |
--------------------------------------------------------------
Valeurs de colonne distinctes
Lors de l’utilisation de la fonction d’agrégation countcolumn
, vous pouvez définir l’attribut distinct
pour renvoyer un nombre de valeurs uniques pour la colonne.
<attribute name='numberofemployees'
alias='ColumnCount'
aggregate='countcolumn'
distinct='true' />
Lorsqu’ils sont définis pour la requête précédente, les résultats renvoient 8 au lieu de 9 car deux lignes du jeu de données ont 2 900 comme valeur du nombre d’employés.
Regroupement
Regroupez les résultats d’une requête d’agrégation en ajoutant un élément attribute avec l’attribut groupby
au lieu de l’attribut aggregate
. Lors du regroupement, vous devez spécifier un élément order avec une valeur alias
définie sur l’alias
du groupe.
Par exemple, la requête suivante renvoie la somme des employés et le nombre par ville :
<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 requête regroupe les résultats selon la valeur Ville, en combinant les résultats des trois lignes où la ville est « Redmond ».
Total | Nombre | Ville |
---|---|---|
0 | 1 | NULL |
6 000 | 1 | Dallas |
2 900 | 1 | Los Angeles |
2 700 | 1 | Lynnwood |
4 800 | 1 | Missoula |
3 900 | 1 | Phoenix |
10 600 | 3 | Colombes |
4 300 | 1 | Santa Cruz |
Regroupement par parties d’une date
Vous pouvez sélectionner la partie de la date à utiliser lors du regroupement par date. Définissez l’attribut dategrouping
de l’élément attribute sur l’une des valeurs suivantes :
active | Description |
---|---|
day |
Regrouper par jour du mois |
week |
Regrouper par semaine de l’année |
month |
Regrouper par mois de l’année |
quarter |
Regrouper par trimestre de l’exercice |
year |
Regrouper par année |
fiscal-period |
Regrouper par période de l’exercice |
fiscal-year |
Regrouper par exercice |
En savoir plus sur les paramètres de l’exercice
Par défaut, les regroupements de dates utilisent le fuseau horaire de l’utilisateur. Définissez l’attribut élément d’attribut usertimezone
sur "false"
pour spécifier que le fuseau horaire UTC doit être utilisé à la place.
La requête suivante regroupe les enregistrements de compte indiquant le nombre d’employés selon la date de création des enregistrements :
<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>
Le tableau suivant montre le résultat en utilisant l’exemple de jeu de données mentionné précédemment :
-----------------------------------------------------------------------
| 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 |
-----------------------------------------------------------------------
Exemple de regroupement de dates par période fiscale
L’exemple suivant montre une expression d’agrégation FetchXML qui totalise le nombre des commandes exécutées et classe le résultat par semestre fiscal et exercice.
<fetch aggregate="true">
<entity name="order">
<attribute name="totalamount"
aggregate="sum"
alias="total" />
<attribute name="datefulfilled"
groupby="true"
dategrouping="fiscal-period" />
</entity>
</fetch>
Agrégation de lignes
Lorsqu’une table a une relation hiérarchique définie, vous pouvez renvoyer un agrégat de lignes sur la colonne de recherche pour la relation hiérarchique.
L’exemple suivant renvoie le nombre de comptes associés dans une colonne nommée CountChildren
lorsque la colonne parentaccountid
des enregistrements de compte enfants est égale à la colonne accountid
du compte actuel.
<fetch top='5'>
<entity name='account'>
<attribute name='name' />
<attribute name='accountid'
alias='numberOfChildren'
rowaggregate='CountChildren' />
<order attribute='accountid'
descending='true' />
</entity>
</fetch>
Limitations
Les requêtes qui renvoient des valeurs agrégées sont limitées à 50 000 enregistrements. Cette limite aide à gérer les performances et la fiabilité du système. Si les critères de filtre de votre requête renvoient plus de 50 000 enregistrements, vous obtenez le message d’erreur suivant :
Nombre :
-2147164125
Code :8004E023
Message :AggregateQueryRecordLimit exceeded. Cannot perform this operation.
Message d’erreur client : La limite d’enregistrement maximale est dépassée. Réduisez le nombre d’enregistrements.
Pour éviter cette erreur, ajoutez des filtres appropriés à votre requête pour garantir qu’elle n’évalue pas plus de 50 000 enregistrements. Ensuite, exécutez votre requête plusieurs fois et combinez les résultats. Les filtres appropriés dépendent de la nature de vos données, mais il peut s’agir d’une plage de dates ou d’un sous-ensemble de valeurs dans une colonne de choix.
Limite par requête
Même en appliquant la limite par défaut pour les requêtes d’agrégation, l’exécution de la requête peut prendre un certain temps. Vous pouvez utiliser l’attribut aggregatelimit
dans une requête pour appliquer une limite inférieure personnalisée qui renvoie l’erreur AggregateQueryRecordLimit exceeded
si les résultats sont supérieurs à votre limite personnalisée.
Dans cet exemple, la limite de lignes maximale personnalisée est de 10 :
<fetch aggregate='true'
aggregatelimit = '10'>
<entity name='opportunity'>
<attribute name='name'
alias='opportunity_count'
aggregate='count' />
</entity>
</fetch>
La limite par requête ne peut pas dépasser la limite d’agrégation par défaut.
Étapes suivantes
Découvrez comment compter des lignes.
Notes
Pouvez-vous nous indiquer vos préférences de langue pour la documentation ? Répondez à un court questionnaire. (veuillez noter que ce questionnaire est en anglais)
Le questionnaire vous prendra environ sept minutes. Aucune donnée personnelle n’est collectée (déclaration de confidentialité).