Filtrer des colonnes de choix Dataverse avec des formules Power Fx

Effectué

Lorsque vous disposez d’une table Dataverse avec des colonnes de choix, vous souhaitez souvent filtrer les données à l’aide d’une colonne de ce type. Les scénarios de filtrage les plus courants sont :

  • Filtrer les lignes de la table à afficher dans une galerie.

  • Avoir un menu déroulant ou un contrôle de zone de liste déroulante avec la liste des valeurs de choix, puis laissez l’utilisateur en sélectionner une ou plusieurs. Ensuite, vous pouvez utiliser les valeurs sélectionnées pour filtrer les lignes de la table que vous affichez dans la galerie.

Par exemple, si vous aviez un champ de choix Catégorie dans la table Accounts, vous pouvez utiliser la logique suivante pour filtrer uniquement les clients favoris :

Filter(
  Accounts,
  Category = 'Category (Accounts)'.'Preferred Customer'
)

Veillez à ne pas utiliser uniquement la chaîne ’Preferred Customer’ (comme illustré dans l’image ci-dessous), car il s’agit d’une comparaison non valide. L’erreur « Types incompatibles pour la comparaison » s’affiche alors. Comme la ’Category’ (catégorie) est une table (ou un groupe d’options) elle-même, vous ne pouvez pas comparer la valeur de table avec une valeur de texte. Par conséquent, vous devez utiliser la référence complète : 'Category (Accounts)'.'Preferred Customer' (s’affichant également comme [@Category].'Preferred Customer').

Il est souvent judicieux d’utiliser un menu déroulant ou une zone de liste déroulante afin que les utilisateurs puissent déterminer les valeurs filtrées pour la galerie. Dans l’exemple suivant, une zone de liste déroulante est utilisée pour autoriser les sélections multiples de catégories de comptes à afficher.

Tout d’abord, ajoutez une zone de liste déroulante à l’écran, puis définissez la propriété Items à l’aide de la fonction Choices.

La fonction Choices() prépare une liste de valeurs parmi lesquelles votre utilisateur peut effectuer une sélection en utilisant les métadonnées de la colonne de choix Accounts.Category.

Ensuite, vous allez modifier la formule Items pour la galerie à inclure à l’aide de la propriété SelectedItems de zone de liste déroulante.

Filter(Accounts, Category in ComboBoxCategory.SelectedItems)

L’opérateur in permet à la formule de filtrer sur l’une des catégories sélectionnées.

Cette formule n’affichera les lignes dans la galerie que lorsqu’au moins une catégorie est sélectionnée. Si vous souhaitez afficher toutes les lignes lorsqu’aucune catégorie n’est sélectionnée, vous pouvez ajouter une vérification IsEmpty à votre formule.

Filter(
  Accounts, Category in ComboBoxCategory.SelectedItems
  || IsEmpty(ComboBoxCategory.SelectedItems)
)

Filtrer les colonnes de choix

Le filtrage des lignes de table sur une colonne de choix est compliqué par la façon dont les données sont stockées dans Dataverse sous forme de liste séparée par des virgules. Par conséquent, tout filtre que vous composez et qui implique une colonne de choix recevra un avertissement de délégation, comme illustré dans l’exemple suivant.

Une approche que vous pouvez adopter consiste à créer une vue de table Dataverse qui filtre les valeurs des choix, puis à l’utiliser dans les critères de votre fonction Filter(). Cette approche vous aiderait à éviter le défi de la délégation, mais elle ne permettra pas à l’utilisateur de l’application de fournir les valeurs des critères de filtre. La capture d’écran suivante montre un exemple de filtre de vue Dataverse pour la colonne de choix Livraison préférée.

Vous pouvez utiliser cette vue Dataverse nommée Monday Delivery en utilisant la fonction Filter() suivante :

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery'
)

De plus, vous pouvez toujours inclure des critères saisis par l’utilisateur pour d’autres colonnes que la vue. Par exemple, la fonction Filter() suivante montre l’ajout de la colonne de choix Catégorie, qui est filtrée sur la valeur que l’utilisateur a sélectionnée dans la liste déroulante.

Filter(
  Accounts,
  'Accounts (Views)'.'Monday Delivery',
  Category = Dropdown1.Selected.Value
)

En raison de leur liste de valeurs standardisée, les colonnes de choix sont utiles pour fournir des moyens cohérents de filtrer les lignes de table.