Trier les lignes à l’aide d’OData
Utilisez l’option de requête pour spécifier l’ordre dans lequel les éléments sont renvoyés. $orderby
... Utilisez le suffixe asc
ou desc
pour spécifier l’ordre croissant ou décroissant respectivement. L’ordre par défaut est croissant. L’exemple suivant présente la récupération des propriétés name
et revenue
des comptes contrôlées par le revenue
croissant et par le name
décroissant.
GET [Organization URI]/api/data/v9.2/accounts?$select=name,revenue
&$orderby=revenue asc,name desc
&$filter=revenue ne null
Tri des colonnes de recherche et de choix
Les données contenues dans la plupart des types de colonnes sont relativement simples et vous pouvez effectuer des opérations de tri pertinentes. Les colonnes de recherche et de choix sont plus complexes, car les données stockées dans la base de données n’ont pas de sens hors contexte.
Colonnes de recherche
Lorsque vous effectuez un tri à l’aide des colonnes de recherche, les résultats sont triés en utilisant le champ du nom principal de la table associée. La base de données stocke une valeur GUID. La valeur formatée renvoyée est le champ du nom principal correspondant.
Choisir des colonnes
Lorsque vous commandez à l’aide de colonnes de choix, les résultats sont classés à l’aide de la valeur entière du choix.
Notes
Ceci est différent de la manière dont les valeurs de choix sont triées à l’aide de FetchXml ou QueryExpression. Dans ces cas, les résultats sont triés par l’étiquette localisée du choix.
Pour trier les résultats par libellés de choix avec Dataverse l’API Web, vous devez utiliser FetchXml pour composer la requête.
Tri et pagination
La façon dont une page est triée fait une grande différence lors de la pagination des données. Si les informations de tri des résultats sont ambiguës, Dataverse ne peut pas renvoyer de manière cohérente ou efficace les données paginées.
Spécifiez un ordre pour votre requête. Avec FetchXml, si vous n’ajoutez aucun élément de commande à votre requête, Dataverse ajoute une commande basée sur la clé primaire de la table. Cependant QueryExpression ne le fait pas, et lorsque votre requête spécifie distinct
des résultats, aucune valeur de clé primaire n’est renvoyée, donc Dataverse peut pas ajouter cet ordre par défaut. Vous devez spécifier un ordre de pagination. Sans aucun ordre spécifié, les résultats de la requête distinct
peuvent être renvoyés dans un ordre aléatoire. OData ne propose aucune option pour renvoyer des résultats distincts, mais vous devez toujours appliquer un ordre lors de la récupération des résultats paginés.
La pagination est dynamique. Chaque requête est évaluée de manière indépendante au fur et à mesure qu’elle est reçue. Un cookie de pagination indique à Dataverse la page précédente. Avec ces données de cookie de pagination, Dataverse peut commencer par l’enregistrement suivant après le dernier de la page précédente.
La pagination fonctionnera mieux à l’avenir. Si vous revenez en arrière et récupérez une page que vous avez précédemment récupérée, les résultats peuvent être différents car des enregistrements peuvent être ajoutés, supprimés ou modifiés depuis la dernière récupération de la page. En d’autres termes, si la taille de votre page est de 50 et que vous revenez en arrière, vous obtenez 50 enregistrements, mais ce ne sont peut-être pas les mêmes 50 enregistrements. Si vous continuez à avancer dans les pages d’un jeu de données, vous pouvez vous attendre à ce que tous les enregistrements soient renvoyés dans un ordre cohérent.
Le tri déterministe est important
Le tri déterministe signifie qu’il existe un moyen de calculer un ordre de manière cohérente. Avec un ensemble d’enregistrements donné, les enregistrements sont toujours renvoyés dans le même ordre. Si vous avez besoin d’ordres et de pagination cohérents, vous devez inclure des valeurs uniques ou une combinaison de valeurs de colonne et spécifier un ordre pour qu’elles soient évaluées.
Exemple non déterministe
Examinons un exemple qui est non déterministe. Ce jeu de données contient uniquement des informations sur l’État et le Statut et est filtré pour renvoyer uniquement les enregistrements dans un État ouvert. Les résultats sont classés par Statut. Les trois premières pages sont demandées. Les résultats ressemblent à ce qui suit :
État | Statut | Page |
---|---|---|
Ouvert | Actif | 1. Début |
Ouvert | Actif | 1 |
Ouvert | Actif | 1 Fin |
Ouvert | Actif | |
Ouvert | Actif | |
Ouvert | Inactif | |
Ouvert | Inactif |
Le cookie de pagination enregistre les informations sur le dernier enregistrement de la page. Lorsque la page suivante est demandée, le dernier enregistrement de la première page n’est pas inclus. Cependant, compte tenu des données non déterministes, rien ne garantit que les deux autres enregistrements de la première page ne soient pas inclus dans la deuxième page.
Pour obtenir un tri déterministe, ajoutez des ordres aux colonnes contenant des valeurs uniques ou des valeurs semi-uniques.
Exemple déterministe
Cette requête est similaire à la requête non déterministe, mais elle inclut la colonne ID de cas qui inclut des valeurs uniques. Il est également trié par Statut, mais également par ID de cas. Les résultats ressemblent à ce qui suit :
État | Statut | ID d’incident | Page |
---|---|---|---|
Ouvert | Actif | Incident-0010 | 1. Début |
Ouvert | Actif | Incident-0021 | 1 |
Ouvert | Actif | Incident-0032 | 1 Fin |
Ouvert | Actif | Incident-0034 | |
Ouvert | Actif | Incident-0070 | |
Ouvert | Inactif | Incident-0015 | |
Ouvert | Inactif | Incident-0047 |
Dans la page suivante, le cookie aura Case-0032
stocké comme dernier enregistrement de la première page ; par conséquent, la page deux commencera avec l’enregistrement suivant après cet enregistrement. Les résultats ressemblent à ce qui suit :
État | Statut | ID d’incident | Page |
---|---|---|---|
Ouvert | Actif | Incident-0010 | 1. Début |
Ouvert | Actif | Incident-0021 | 1 |
Ouvert | Actif | Incident-0032 | 1 Fin |
Ouvert | Actif | Incident-0034 | 2. Début |
Ouvert | Actif | Incident-0070 | 2 |
Ouvert | Inactif | Incident-0015 | 2 Fin |
Ouvert | Inactif | Incident-0047 |
Étant donné que cette requête tri les valeurs de colonne uniques, l’ordre est cohérent.
Pratiques recommandées pour les tris lors de la pagination des données
Notes
Lorsque cela est possible, les requêtes doivent être triées en fonction de la clé primaire de la table, car Dataverse est optimisé par défaut pour le tri sur la clé primaire. Le tri en fonction de champs non uniques ou complexes entraîne une surcharge excessive et des requêtes plus lentes.
Lorsque vous récupérez un ensemble limité de données à afficher dans une application, ou si vous devez renvoyer plus de 5 000 lignes de données, vous devez paginer les résultats. Les choix effectués pour déterminer l’ordre des résultats peuvent déterminer si les lignes de chaque page de données que vous récupérez chevauchent d’autres pages. Sans un tri approprié, le même enregistrement peut apparaître sur plusieurs pages.
Pour éviter que le même enregistrement apparaisse sur plusieurs pages, appliquez les pratiques recommandées suivantes :
Il est préférable d’inclure une colonne possédant un identificateur unique. Par exemple :
- Colonnes de clé primaire de la table
- Colonnes de numérotation automatique
- ID utilisateur/contact
Si vous ne pouvez pas inclure une colonne avec un identificateur unique, incluez plusieurs champs qui généreront très probablement des combinaisons uniques. Par exemple :
- Prénom + nom + adresse e-mail
- Nom complet + adresse e-mail
- Adresse e-mail + nom de l’entreprise
Anti-modèles pour les tris lors de la pagination des données
Les choix de tri suivants doivent être évités :
Les tris qui n’incluent pas d’identificateurs uniques
Les tris sur des champs calculés
Tris avec un ou plusieurs champs qui ne fournissent probablement pas un caractère unique, tels que :
- Statut et état
- Choix ou Oui/Non
- Nommez les valeurs par elles-mêmes. Par exemple
name
,firstname
,lastname
- Champs de texte comme les titres, les descriptions et le texte sur plusieurs lignes
- Champs de nombres non uniques
Étapes suivantes
Découvrez comment filtrer 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é).