Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
FetchXML inclut des fonctionnalités de regroupement et d’agrégation qui vous permettent de calculer la somme, la moyenne, la min, la valeur maximale et le nombre sur plusieurs lignes de données.
Pour retourner une valeur d’agrégation, vous devez :
Définir l’attribut de l’élément fetch
aggregatesur true.Définissez l’attribut
aggregatepour chaque élément d’attribut sur l’une des fonctions d’agrégation suivantes :Fonction Valeur retournée avgValeur moyenne des valeurs de colonne avec des données. countNombre de lignes. countcolumnNombre de lignes avec des données dans cette colonne. maxValeur maximale des lignes de cette colonne. minValeur minimale des lignes de cette colonne. sumValeur totale des valeurs de colonne avec des données.
Notez les points suivants :
- Les valeurs Null ne sont pas prises en compte lors du calcul des valeurs d’agrégation.
- Vous pouvez utiliser des données de tables jointes à l’aide de l’élément link-entity.
- Vous pouvez appliquer des filtres pour limiter les résultats comme avec n’importe quelle requête.
Example
Supposons que vous disposez de 10 enregistrements de compte avec les données suivantes :
| Nombre d’employés | Nom | Adresse 1 Ville | Création le |
|---|---|---|---|
| ZÉRO | Exemple de compte | ZÉRO | 25/08/2023 |
| 1,500 | Contoso Pharmaceuticals (exemple) | Colombes | 3/25/2023 |
| 2,700 | Fabrikam, Inc. (exemple) | Lynnwood | 3/25/2023 |
| 2,900 | Blue Yonder Airlines (exemple) | Los Angeles | 3/25/2023 |
| 2,900 | City Power &Light (exemple) | Colombes | 3/25/2023 |
| 3,900 | Coho Winery (échantillon) | Phénix | 3/25/2023 |
| 4,300 | Adventure Works (exemple) | Santa Cruz | 3/25/2023 |
| 4,800 | Alpine Ski House (échantillon) | Missoula | 3/25/2023 |
| 6 000 | Litware, Inc. (exemple) | Dallas | 3/25/2023 |
| 6,200 | R. Datum Corporation (exemple) | Colombes | 3/25/2023 |
La requête suivante retourne des données d’agrégation pour la numberofemployees colonne.
<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
Lorsque vous utilisez la countcolumn fonction d’agrégation, vous pouvez définir l’attribut distinct pour retourner un nombre de valeurs uniques pour la colonne.
<attribute name='numberofemployees'
alias='ColumnCount'
aggregate='countcolumn'
distinct='true' />
Pour la requête précédente, les résultats retournent 8 au lieu de 9, car deux lignes du jeu de données ont pour valeur 2 900 en tant que nombre d’employés.
Grouping
Regroupez les résultats d’une requête d’agrégation en ajoutant un élément d’attribut avec l’attribut groupby plutôt que l’attribut aggregate . Lors du regroupement, vous devez spécifier un élément de tri avec une alias valeur définie pour le alias groupe.
Par exemple, la requête suivante retourne 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 par valeur City, en combinant les résultats pour les trois lignes où la ville est « Redmond ».
| Total | Nombre | Ville |
|---|---|---|
| 0 | 1 | ZÉRO |
| 6 000 | 1 | Dallas |
| 2,900 | 1 | Los Angeles |
| 2,700 | 1 | Lynnwood |
| 4,800 | 1 | Missoula |
| 3,900 | 1 | Phénix |
| 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'élément d'attributdategrouping à l'une des valeurs suivantes :
| Valeur | Descriptif |
|---|---|
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 année fiscale |
En savoir plus sur les paramètres de l’exercice fiscal
Par défaut, les regroupements de dates utilisent le fuseau horaire de l’utilisateur. Définissez l'attribut de l'élément usertimezone à "false" pour spécifier que le fuseau horaire UTC doit être utilisé à la place.
La requête suivante groupe les enregistrements de compte qui montrent le nombre d'employés par date de création.
<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 à l’aide de 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 de période fiscale
L’exemple suivant montre une expression d’agrégation FetchXML qui additionne le nombre total de commandes remplies et regroupe le résultat par semestre fiscal et année fiscale.
<fetch aggregate="true">
<entity name="order">
<attribute name="totalamount"
aggregate="sum"
alias="total" />
<attribute name="datefulfilled"
groupby="true"
dategrouping="fiscal-period" />
</entity>
</fetch>
Agrégat de lignes
Lorsqu’une table a une relation hiérarchique définie, vous pouvez retourner 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 comptes 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>
Limites
Les requêtes qui retournent des valeurs d’agrégation sont limitées à 50 000 enregistrements. Cette limite permet de maintenir les performances et la fiabilité du système. Si les critères de filtre dans votre requête retournent plus de 50 000 enregistrements, vous obtenez l’erreur suivante :
Nombre :
-2147164125
Code :8004E023
Message :AggregateQueryRecordLimit exceeded. Cannot perform this operation.
Message d’erreur du client : la limite maximale d’enregistrement est dépassée. Réduisez le nombre d’enregistrements.
Pour éviter cette erreur, ajoutez des filtres appropriés à votre requête pour vous assurer qu’elle n’évalue pas plus de 50 000 enregistrements. Exécutez ensuite votre requête plusieurs fois et combinez les résultats. Les filtres appropriés dépendent de la nature de vos données, mais ils peuvent être une plage de dates ou un sous-ensemble de valeurs dans une colonne de choix.
Par limite de requête
Même avec la limite par défaut pour les requêtes agrégées appliquées, 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.
Si l’attribut aggregatelimit est spécifié, la requête ne retourne pas non plus d’erreur AggregateQueryRecordLimit exceeded si la limite est atteinte, et au lieu de cela, la requête agrège au-dessus de la plupart limit + 1 des lignes arbitraires des données.
La limite par requête ne peut pas dépasser la limite d’agrégation par défaut.
Example
Dans cet exemple, la limite de lignes maximales personnalisée est de 5 :
<fetch aggregate='true'
aggregatelimit = '5'>
<entity name='account'>
<attribute name='name'
alias='account_count'
aggregate='count' />
</entity>
</fetch>
Les résultats sont une seule ligne agrégeant jusqu’à six des enregistrements :
-----------------
| account_count |
-----------------
| 6 |
-----------------
Étapes suivantes
Découvrez comment compter des lignes.