QuickSort > ?

Accueil – Le CFO masqué Forums Power BI QuickSort > ?

6 sujets de 1 à 6 (sur un total de 6)
  • Auteur
    Articles
  • #59738
    questvba
    Participant

    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.

    #59740
    Kim Leblanc
    Participant

    Bonjour,

    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

    #59748
    questvba
    Participant

    Bonjour, 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…

    • Cette réponse a été modifiée le il y a 11 mois et 3 semaines par questvba.
    • Cette réponse a été modifiée le il y a 11 mois et 3 semaines par questvba.
    Attachments:
    You must be logged in to view attached files.
    #59752
    Kim Leblanc
    Participant

    Bonjour,

    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.
    #59765
    questvba
    Participant

    Un 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.
    #59772
    Kim Leblanc
    Participant

    Bonjour,

    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.
6 sujets de 1 à 6 (sur un total de 6)
  • Vous devez être connecté pour répondre à ce sujet.