Accueil – Le CFO masqué › Forums › Power BI › QuickSort > ?
- Ce sujet contient 5 réponses, 2 participants et a été mis à jour pour la dernière fois par Kim Leblanc, le il y a 4 années et 11 mois.
-
AuteurArticles
-
9 décembre 2019 à 1 h 47 min #59738LionelParticipant
Bonjour,
Dans Excel, j’utilise cette fonction pour trier par ordre alphabétique les éléments d’une même cellule.Public Function QuickSort(vArray As Variant, inLow As Long, inHi As Long) Dim Pivot As Variant Dim tmpSwap As Variant Dim tmpLow As Long Dim tmpHi As Long tmpLow = inLow tmpHi = inHi Pivot = vArray((inLow + inHi) \ 2) While (tmpLow <= tmpHi) While (vArray(tmpLow) < Pivot And tmpLow < inHi) tmpLow = tmpLow + 1 Wend While (Pivot < vArray(tmpHi) And tmpHi > inLow) tmpHi = tmpHi - 1 Wend If (tmpLow <= tmpHi) Then tmpSwap = vArray(tmpLow) vArray(tmpLow) = vArray(tmpHi) vArray(tmpHi) = tmpSwap tmpLow = tmpLow + 1 tmpHi = tmpHi - 1 End If Wend If (inLow < tmpHi) Then QuickSort vArray, inLow, tmpHi If (tmpLow < inHi) Then QuickSort vArray, tmpLow, inHi End Function
Maintenant que j’ai découvert Power BI, je voudrais migrer tout mon travail depuis Excel. Si certaines formules m’ont déjà pris la tête (ben oui les langages n’étant pas vraiment identiques), je suis maintenant confronté à ce problème.
Pourquoi j’utilise cette fonction ? Y répondre vous donnera peut-être une piste. En fait, je reçois 4 fichiers Excel de 4 intervenants travaillant tous avec des programmes différents et dans lesquels les encodages sont différents. Mon problème se situe au niveau des nom prénom. Parfois, c’est Nom Prénom et parfois Prénom Nom. Sans compter que nous avons beaucoup de noms composés.
Je ne sais pas si c’est assez clair pour me donner une piste mais n’hésitez pas à me solliciter pour que cela soit encore plus limpide pour vous.
9 décembre 2019 à 8 h 22 min #59740Kim LeblancParticipantBonjour,
Est-ce que vous pourriez nous soumettre un fichier avec des données exemples pour chacun des fichiers sources et le résultat que vous souhaitez obtenir.
Si le format est le même à l’intérieur d’un même fichier, il sera possible avec Power Query de transformer l’information pour chacun des fichiers afin qu’elle soit sous le même format pour ensuite les combiner (bout à bout). Avec un exemple, on pourra plus facilement vous démontrer qu’elles étapes utiliser.
Au plaisir,
Kim
9 décembre 2019 à 12 h 27 min #59748LionelParticipantBonjour, Kim. Heureux d’avoir déjà une réaction. c’est de bon augure.
Je joins un fichier avec les données que je reçois. Il y a 5 sources :- PRESTATIONS
- ETP
- PRODUCTIVITEIT
- DIGIFAM
- TAKEN
Évidemment, comme je le disais, il y a :
- parfois NOM + PRÉNOM
- parfois N°AGENT (format texte) + NOM + PRÉNOM
- parfois N°AGENT (format texte) + PRÉNOM + NOM
- parfois N°AGENT (format nombre) + PRÉNOM + NOM
Je reste à disposition pour toute autre question…
Attachments:
You must be logged in to view attached files.9 décembre 2019 à 14 h 34 min #59752Kim LeblancParticipantBonjour,
Comme les données sont dans Excel, j’ai utilisé Power Query dans Excel pour consolider les données. Mais les mêmes étapes peuvent être fait dans Power BI dans la section (menu) Modifier les requêtes.
Donc j’ai importé dans Power Query chacune des sources de données dans Power Query. Ensuite, je les ai transformé une à une pour créer une colonne Prénom et une colonne Nom. Lorsque le prénom était listé en premier, j’ai utilisé la fonction Fractionner avec délimiteur dans le menu transformer en utilisant l’espace pour délimiteur et en cochant la case Délimiteur le plus à gauche.
Dans les cas où le Nom était en premier, j’ai utilisé la fonction Fractionner avec délimiteur dans le menu transformer en utilisant l’espace pour délimiteur et en cochant la case Délimiteur le plus à droite.
Ensuite, j’ai modifié les données du no agent pour qu’ils soient tous numériques et les Taux en %.
J’ai pus alors mettre chacune des requêtes bout à bout pour créer une requête conso en utilisant la fonction ajouter des requêtes comme étant nouvelles.
On pourrait par la suite recréé une colonne avec le nom complet en fusionnant les 2 colonnes Prénom et Nom. voir le résultat dans l’onglet conso.
Je n’étais pas certaine de ce que représentait les numéros dans les données de prestations alors je l’ai laissé tel quel.
Ci-joint le fichier avec les transformations.
Est-ce que ceci répond à votre besoin? Il faudrait tester de votre côté avec l’ensemble des données. Advenant le cas où vous auriez également des prénoms composés avec des espaces également ça risque de poser problème. Mais s’ils sont tous séparés par un trait d’union alors ça devrait fonctionner.
Kim
Attachments:
You must be logged in to view attached files.9 décembre 2019 à 23 h 56 min #59765LionelParticipantUn grand merci, Kim. Cela ressemble effectivement à ce que j’avais fait au départ avec Excel.
Et puis, comme tu le soupçonnes, je suis tombé (aie aie aie) sur les prénoms composés sans trait d’union :
- ANNE LAURENCE OSARES
- JOSE MANUEL CABECOES MACHONG
- SABINE ALEXIA MARTING
C’est donc – après des recherches – que je suis arrivé à la conclusion qu’il fallait trier tous les éléments par ordre alpha. Évidemment, pour un humain, c’est pas facile mais pour la machine, elle ne se pose pas de questions.
Je remets un fichier avec mes données brut et la transformation dans une nouvelle feuille. En fait, je cherche une formule style… Loop mais je n’arrive à rien pour l’instant.
NB : pour info, dans Prestations, ce sont les heures prestées… en minutes.
Un grand merci pour le temps consacré.Attachments:
You must be logged in to view attached files.10 décembre 2019 à 9 h 42 min #59772Kim LeblancParticipantBonjour,
Je trouve ça un peu étrange de mettre chacun des éléments du nom en ordre croissant alphabétique car on peut arriver avec un résultat qui pourrait mélanger le prénom et nom de famille. Comme dans l’exemple ou on aurait Charles Antoine Bibeau qui nous donnerait Antoine Bibeau Charles…
Néanmoins, pour effectuer un loop comme vous mentionnez, on peut utiliser une fonction avec un paramètre dans Power Query.
Je vous en ai fait un exemple avec les prestations.
1 – On créé le requête OrdrePrestation où on va fractionner la colonne de nom à chaque délimiteur (l’espace dans notre cas).
2- On ajouter une colonne d’index.
3- On créé un paramètre (accueil – gérer les paramètres) que j’ai nommé OrdreNom.
4- On créé une référence à la requête OrdrePrestation que l’on aplele OrdrePrestation2.
5- On filtre sur un numéro d’index. Exemple on filtre sur 7. Puis dans le code on change [Index] = 7 pour [Index] = OrdreNom.
6- On supprime la colonne d’index.
7- On transpose les données pour mettre les colonnes en lignes.
8- On tri en ordre croissant
9- On transpose de nouveau et fusionne nos colonnes avec des espaces. Puis on utiliser Supprimer les espaces pour enlever les espaces en double (menu transformer – format).
10 – On clique droit sur la requête OrdrePrestation2 puis sur Créer une fonction
11 – On créé une référence à la requête OrdrePrestation que l’on apelle OrdrePrestation_listeIndex.
12 – On supprime les autres colonne pour garder seulement Index.
13 – On ajoute une colonne Appeler une fonction personnalisée. Où la requête de fonction est OrdrePrestation et OrdreNom notre colonne d’Index.
14 – On Développe la nouvelle colonne et on supprime la colonne Index.Le résultat se trouve dans l’onglet loop.
Vous pouvez voir le tout dans le fichier ci-joint.
Il faudrait adapter le tout pour inclure chacune de vos sources de données. Vous pourriez commencer par fusionner toutes les sources. Puis appliquer les étapes mentionnées ci-haut.Kim
Attachments:
You must be logged in to view attached files. -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.