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.
Utilisez FetchXML pour agréger des données dans Microsoft Dataverse en calculant la somme, la moyenne, la min, la valeur maximale et le nombre sur plusieurs lignes. Les fonctionnalités de regroupement et d’agrégation FetchXML vous permettent de résumer efficacement les jeux de données volumineux afin de créer des rapports et des analyses significatifs.
Pour retourner une valeur d’agrégation, vous devez :
Définissez l’élément fetch
aggregatesurtrue.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.
Tenez compte des points suivants :
- Le calcul des valeurs d’agrégation exclut les valeurs Null.
- Vous pouvez utiliser des données à partir 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 avez 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, définissez l’attribut distinct pour retourner un nombre de valeurs uniques pour la colonne.
<attribute name='numberofemployees'
alias='ColumnCount'
aggregate='countcolumn'
distinct='true' />
Lorsque vous définissez cet attribut pour la requête précédente, les résultats retournent 8 plutôt que 9, car deux lignes du jeu de données ont 2 900 comme valeur d’employé.
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, spécifiez un élément de commande avec une valeur alias fixée à celle du 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 de ville, 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’attribut d’élémentdategrouping sur 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 vous spécifiez l’attribut aggregatelimit , la requête ne retourne pas d’erreur AggregateQueryRecordLimit exceeded si la limite est atteinte. Au lieu de cela, la requête agrège au plus limit + 1 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.