Exporter des données Dataverse dans CSV depuis Power Apps

Exporter des données Dataverse dans un fichier CSV depuis Power Apps ne me paraissait, à première vue, pas très compliqué. Mais quand j’ai commencé à regarder, j’ai fait face à de très nombreux problèmes. Du coup, je vous partage toute cette expérience en détail, avec évidemment la solution complète pour résoudre les difficultés rencontrées.

J’ai un besoin simple : exporter mes factures dans un format csv avec pas mal de transformations à y intégrer. J’ai eu beau chercher sur le Web, je n’ai rien trouvé ou presque sur l’export depuis une table Dataverse : https://powerusers.microsoft.com/t5/Microsoft-Dataverse/Export-Dataverse-view-to-Excel-using-Power-Automate/td-p/855522.

Certains ont même proposé l’idée : https://powerusers.microsoft.com/t5/Power-Apps-Ideas/Export-Dataverse-view-to-Excel-using-Power-Automate/idi-p/858333

Alors voici ma solution step by step.

1. Création du Power Automate
2. N’avoir que les colonnes souhaitées
3. Mettre au format csv avec séparateur point-virgule (semi colon)
4. Exporter plus de 5000 lignes
5. Transformations avancées
6. Filtrer par date
7. Gérer les problèmes d’accent
8. Finalisation avec Power Apps
Conclusion

 

Contexte pour la démo :

Nous avons une table Dataverse avec plusieurs types de colonnes (histoire de voir comment les ressortir en CSV) : Texte, Date, Décimal, Rechercher et Option.

 

J’ai ajouté 2 lignes pour notre cas.

 

 

Notre objectif est d’afficher dans un csv avec séparateur point-virgule l’ensemble de ces colonnes.

 

1. Création Power Automate

Créer un flux instantané :

Aller ensuite dans Dataverse > Liste les lignes

Lire les données et pour gagner en efficacité lors de la création, limiter le nombre de lignes à 10 par exemple.

Créer csv (Opérations de données > Créer un tableau CSV)

SharePoint > Créer un fichier
Export SharePoint

Expression pour le nom du fichier :

formatDateTime(utcNow(), 'yyyyMMddhhmmss')

 

Tester et regarder le résultat.

Bon, il faut se l’avouer, ce n’est pas vraiment ce qu’on souhaitait ! Nous pouvons voir des colonnes techniques, impossible à exploiter.

2. Mettre sous format JSON avec « Sélectionner »

Nous allons devoir définir chaque colonne avec nom et contenu. Et pour que cela fonctionne, il nous faudra un fichier JSON. Mais comment faire ? Il faut utiliser l’action suivante : Opérations de données > Sélectionner.

Ensuite, il faut penser à modifier l’étape suivante qui prendre la valeur de sortie de l’étape que nous venons de créer :

 

Voici le résultat :

Bon, le résultat s’améliore mais ce n’est pas encore ça. Le premier point est le séparateur de milliers. Nous verrons ensuite comment faire pour récupérer les bonnes valeurs pour les options et les recherches mais également, nous verrons comment reformater les dates.

3. Remplacer avec étape message

Le problème est que nous avons des virgules. Toutefois, nous ne pouvons pas remplacer juste les virgules par des points-virgules. Vous pouvez tester et voir le résultat ! L’astuce est d’ajouter le caractère pipe « | » (Alt Gr + touche 6) devant et après chaque partie :

Ensuite, il faudra ajouter une nouvelle étape après la création du tableau csv pour transformer « |,| » en « ; » :

replace(body('Créer_un_tableau_CSV'),'|,|',';')

Et terminer en modifiant la création du fichier dans SharePoint qui aura comme contenu la sortie de cette nouvelle étape :

Regardons à présent le résultat :

Pour modifier le contenu, nous pourrions effectuer la mise à jour ligne par ligne et rechercher à ce moment là les liens dans les autres tables. Toutefois, cela pourra prendre beaucoup de temps pour l’utilisateur lors du chargement, surtout s’il y a plusieurs milliers de lignes. Nous verrons donc une autre solution mais avant tout, terminons cette première partie en autorisant un export de plus de 5000 lignes.

4. Limite à 5000 lignes

La manipulation est assez simple. Il faut aller dans l’étape « Lister les lignes » et cliquer sur Paramètres :

Ensuite, il faut activer la pagination et mettre par exemple 100 000.

Désormais, vous ne serez plus limité à 5000 lignes.

5. Faire des transformations au niveau de l’export


Il est très difficile de faire beaucoup de transformations dans Power Automate surtout si on souhaite éviter la mise à jour ligne par ligne qui serait beaucoup trop longue pour l’utilisateur.
Une solution est donc d’utiliser Power Query. Seul SQL Server le permet au niveau de Power Automate. https://flow.microsoft.com/fr-fr/blog/powerquery-flow/

Et que dire des liens entre les tables, utiliser des relations devient compliqué. Comment récupérer les valeurs des options ou du contact sans utiliser l’analyse ligne par ligne qui serait longue et fastidieuse ?

Il faudrait donc transformer des données Dataverse et les enregistrer quelque part. Pourquoi ne pas créer une table Dataverse et les enregistrer directement dans un format texte pour une meilleure récupération ? C’est ce que nous allons faire à travers les prochaines étapes.

Création de la table

Nous devons donc créer une table qui aura principalement des champs texte et un champ date pour la partie filtre si on souhaite filtrer par date. Pour cette table, nous allons créer une clé (ici avec le numéro de commande) afin de gérer au mieux l’import avec Dataflow (Nous supprimerons les lignes qui n’existent plus et nous modifierons automatiquement les lignes qui existent).

Astuce : lors de la création de la table, pour simplifier la gestion des dates, je crée 2 colonnes : une au format date utilisée pour Le filtre et une au format texte pour l’affichage dans l’export. Ainsi, je vais bien avoir l’affichage que je souhaite.

Voici la structure de la nouvelle table :

 

Et la clé :

Pour alimenter cette table, nous allons le faire en deux parties. Tout d’abord, sur Power BI puis sur le Dataflow Power Platform.

 

Transformation partie 1

Il faut donc créer un Dataflow Power Platform. Mais petit souci, nous ne pouvons pas lire des données depuis le Dataverse, pas de connecteur disponible au moment où j’écris ces lignes.

Du coup, nous allons devoir combiner le dataflow power bi avec le dataflow power platform. Oui, il faut une licence Power BI Pro (pas besoin de premium).

Création du Dataflow Power BI. Il faut aller sur https://app.powerbi.com/

Ensuite il faut aller dans un espace de travail (ou en créer un) et faire nouveau flux de données (New Dataflow) :

Choisir

Vous pouvez voir que le choix de source de données est plus important. Il faudra ici choisir « Common Data Service » (Dataverse n’a pas été renommé ici).

Remplir avec le nom de connexion (à récupérer sur le centre d’administration Power Platform https://admin.powerplatform.microsoft.com/ ) :

Choisir les tables dont vous avez besoin. Ici :

Puis Transformer les données
Voici quelques transformations à appliquer :

Pour la table CSV :

  • Choisir les colonnes : nous gardons uniquement les colonnes dont nous avons besoin :
  • Faire la fusion avec la table contact pour récupérer le nom complet. Il faut penser à désactiver le chargement de la table contact (sinon, il faut un compte premium) et à aller dans Accueil > Options > Option du projet > cocher « Autoriser la combinaison… »
  • Supprimer la colonne cr43a_contact
  • Mettre le format date à la colonne date
  • Dupliquer la colonne date et la nommer Date_format_texte
  • Renommer les colonnes

Pour l’actualisation, cela va dépendre de votre cas. Dans le mien, une fois par jour est suffisant. Je le fais dans la nuit.

 

Création du Dataflow

A présent que nous avons actualisé les données du Dataflow Power BI, nous allons pouvoir créer le Dataflow Dataverse.

Donnons un nom à notre Dataflow et cliquons sur suivant. Ensuite, il faut choisir la source « Dataflows Power Platform », se connecter et cliquer sur Suivant afin de sélectionner le Dataflow que nous avons créé à l’étape précédente :

Puis il faut cliquer sur « Transformer les données ».

Toutes les données sont déjà prêtes, il suffit de cliquer sur Suivant à nouveau :

Dans l’écran suivant, il va falloir bien remplir l’ensemble des informations comme présenté ci-dessous :

1 : Sélectionner « Charger sur la table existante »

2 : Choisir la table d’export « ExportCSV »

3 : Cocher la case « Supprimer les lignes qui n’existent plus dans la sortie de requête ». Cette fonction mettra à jour en fonction de la clé définie au niveau de la table, c’est-à-dire NumCommande.

4 : Réaliser le mapping

5 : Passer à l’étape suivante

 

Il est possible ensuite de définir l’actualisation automatique. Attention, il faut que cette actualisation soit après celle de l’autre Dataflow.

 

Nous finissons en cliquant sur « Créer ».

Afin de vérifier que tout est OK, allons voir le résultat de la table ExportCSV :

 

Modifier la table dans Power Automate pour s’adapter à la nouvelle table créée.

Revenons à présent dans Power Automate pour faire la mise à jour :

A présent, nous pouvons tester :

Nous nous rapprochons de l’objectif. Il ne reste que deux points :

  • Filtrer en fonction de dates (l’idée est de pouvoir filtrer par n’importe quel champs)
  • Enlever les problèmes d’accents.

6. Filtrer par date

Pour filtrer, il faudra passer des paramètres lorsque nous appellerons le flux depuis Power Apps. Nous allons donc ajouter deux paramètres d’entrée : DateDebut et DateFin.

Ensuite, nous devons initialiser deux variables qui correspondent afin de les transformer en date par la suite.

Ajouter deux étapes message (compose) pour transformer chaque variable en format date. Nous appliquerons respectivement les formules suivantes :

 

formatDateTime(concat(split(variables('varDateDebut'),'/')[1], '/', split(variables('varDateDebut'),'/')[0], '/', split(variables('varDateDebut'),'/')[2]), 'MM/dd/yyyy')

formatDateTime(concat(split(variables('varDateFin'),'/')[1], '/', split(variables('varDateFin'),'/')[0], '/', split(variables('varDateFin'),'/')[2]), 'MM/dd/yyyy')

Ajouter le filtre dans l’étape « lister les lignes ».

Observons le résultat à nouveau. Attention, il faut tester manuellement car nous venons d’ajouter deux paramètres de date :

Contenu du fichier :

ous avons bien qu’une seule ligne, celle qui correspond aux critères de date.

 

7. Problème des accents

Dans Power Automate, il est impossible aujourd’hui d’utiliser de l’UTF-8 en sortie. Du coup, j’ai eu de nombreux problèmes d’accents. Pour y remédier, j’ai dû supprimer tous les accents grâce à Power Query dans le Dataflow Power BI. Voici le code M à ajouter. Il faudra juste remplacer les valeurs en orange par vos champs.
J’aurais aimé le faire en R mais cela ne fonctionne pas encore sur Dataflow Power BI.

 

// Remplacer les accents
Remplace01 = Table.ReplaceValue(EtapePrecedente, "Â", "A", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace02 = Table.ReplaceValue(Remplace01, "â", "a", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace03 = Table.ReplaceValue(Remplace02, "Ê", "E", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace04 = Table.ReplaceValue(Remplace03, "Î", "I", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace05 = Table.ReplaceValue(Remplace04, "Ô", "O", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace06 = Table.ReplaceValue(Remplace05, "Û", "U", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace07 = Table.ReplaceValue(Remplace06, "Ä", "A", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace08 = Table.ReplaceValue(Remplace07, "Ë", "E", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace09 = Table.ReplaceValue(Remplace08, "Ï", "I", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace10 = Table.ReplaceValue(Remplace09, "Ö", "O", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace11 = Table.ReplaceValue(Remplace10, "Ü", "U", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace12 = Table.ReplaceValue(Remplace11, "Ù", "U", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace13 = Table.ReplaceValue(Remplace12, "Æ", "AE", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace14 = Table.ReplaceValue(Remplace13, "æ", "ae", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace15 = Table.ReplaceValue(Remplace14, "Ç", "C", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace16 = Table.ReplaceValue(Remplace15, "É", "E", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace17 = Table.ReplaceValue(Remplace16, "È", "E", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace18 = Table.ReplaceValue(Remplace17, "Œ", "OE", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace19 = Table.ReplaceValue(Remplace18, "œ", "oe", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace20 = Table.ReplaceValue(Remplace19, "ê", "e", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace21 = Table.ReplaceValue(Remplace20, "î", "i", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace22 = Table.ReplaceValue(Remplace21, "ô", "o", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace23 = Table.ReplaceValue(Remplace22, "û", "u", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace24 = Table.ReplaceValue(Remplace23, "ä", "a", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace25 = Table.ReplaceValue(Remplace24, "ë", "e", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace26 = Table.ReplaceValue(Remplace25, "ï", "i", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace27 = Table.ReplaceValue(Remplace26, "ö", "o", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace28 = Table.ReplaceValue(Remplace27, "ü", "u", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace29 = Table.ReplaceValue(Remplace28, "ù", "u", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace30 = Table.ReplaceValue(Remplace29, "ç", "c", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace31 = Table.ReplaceValue(Remplace30, "é", "e", Replacer.ReplaceText, {"colonne1", "colonne2"}),
Remplace32 = Table.ReplaceValue(Remplace31, "è", "e", Replacer.ReplaceText, {"colonne1", "colonne2"})
in
Remplace32

 1 : ne pas oublier la virgule à la fin de la ligne

2 : renommer pour avoir le même nom pour les deux étapes.

 

Nous pouvons sauvegarder, actualiser le dataflow. Ensuite, revenir au Dataflow Dataverse et l’actualiser. Les accents ont bien été supprimés :

Tout est conforme à ce que nous souhaitions. Il ne faut pas oublier de planifier les actualisations automatiques des deux Dataflows et modifier l’application pour appeler le flux.

 

 

8. Incorporer cela dans Power Apps

 

Pour incorporer le flux dans Power Apps,  je me suis inspiré du très bon article de Matthew Devaney :https://matthewdevaney.com/power-apps-export-to-excel-as-a-csv-file/

Il faudra de notre côté bien adapter le Power Automate au niveau du déclencheur et ajouter une étape de fin au niveau du retour à Power Apps.

 

Conclusion

Power Platform est vraiment très puissant car même si la solution n’est pas native (peut-être prochainement), nous avons la possibilité de combiner les différentes briques pour résoudre une problématique.
Ici, nous avons quand même utilisé Power Apps, Power Automate, Dataverse, Dataflow Dataverse et Dataflow Power BI. Et pour avoir mis en place cette solution chez des clients, cela fonctionne parfaitement. Nous aurions aussi pu utiliser une application pilotée par les modèles mais nous devions transformer fortement les données avant d’exporter en csv.
Bien sûr, il faudra adapter en fonction de chaque besoin.

 

Et voilà !

Vous savez maintenant exporter des données Dataverse vers CSV ! N’hésitez pas nous contacter si vous avez des questions !

Auteur

Jérémy Laplaine

Jérémy Laplaine

Expert Power Platform

Plus d’articles Microsoft Power Platform

▶ Power Saturday 2020 – Réaliser un site web Microsoft Power Platform

Retour d’expérience de Jérémy Laplaine et Gilles Pommier

Creation d’un portail web Power Apps Portal avec des connexions tiers (Google, Facebook…) en utilisant pleinement les fonctionnalités de Microsoft Power Platform

Afficher un document dans le PdfViewer Power Apps

Afficher un document dans le PdfViewer de Power AppsLimitations techniques du composant : L’architecture de sécurité de Power Apps nécessite que le contrôle PDF Viewer soit compatible uniquement avec les liens HTTPS, pas HTTP. La propriété Document doit être liée...

Power Apps for Teams : Importer et exporter des solutions

Power Apps for Teams : Importer et exporter des solutions Lorsque je crée une application Power Apps For Teams, j’aimerais d’abord le faire dans une équipe (environnement) dédié au développement pour ensuite la déplacer en Recette puis en Production. Avec Power Apps,...

Model Driven App : Graphique dans un formulaire

Model Driven App : Graphique dans un formulaire« Une image vaut mieux que mille mots ». Et une représentation graphique est plus souvent parlante qu’une description. Mais comment intégrer un graphique dans un formulaire d’application de type Model Driven App ?Un...

Power BI : changer d’indicateur facilement grâce aux segments

Comment afficher un visuel sous plusieurs angles différents ?
Par exemple, comment passer d’un montant à un volume ?

En utilisant les segments de Microsoft Power BI et la fonction Switch, ce tutoriel vous accompagne pas à pas pour réaliser un visuel avec un affichage alternatif.

▶ Power Apps Portal + CDS + Power BI : le combo gagnant !

Conférence de Jérémy Laplaine et Gilles Pommier – Retour d’expérience Power Apps Portal au Global Microsoft 365 Developer Bootcamp

▶ Vidéo Power BI – Mapping of things

Mettez en place du mapping of things Synoptic Panel sur Power BI avec Jérémy Laplaine, expert Power Platform.

Regrouper et organiser des mesures Power BI

Dans Power BI, beaucoup de mesures autonomes peuvent être créées. Elles ne sont rattachées à aucune table en particulier. De ce fait, il peut être très compliqué de les retrouver.
Alors, comment les organiser pour les utiliser plus facilement ?

Intégrer un rapport Power BI dans Power Apps Portal

Comment intégrer un rapport Power BI embedded dans Power Apps Portal ? Intégrer un rapport Power BI sur un site Internet comme Power Apps Portal paraît souvent complexe et nécessitant de très nombreuses compétences techniques. Avec Power Apps Portal, c’est beaucoup...