Forum Replies Created
-
AuthorPosts
-
ludo.regnier
ParticipantBonjour
Pourrais-tu joindre un exemple des données dont tu disposes et un autre du résultat attendu ?ludo.regnier
ParticipantSinon il y a L’attitude Provence avec 2 t et latitude Provence avec un seul t
ludo.regnier
Participantbonsoir
j’ai posé la question à ChapGPT, voici sa réponseAttachments:
You must be logged in to view attached files.3 November 2024 at 7 h 10 min in reply to: Optimiser les performance d’une requête Query de propagation avec dérogation #147853ludo.regnier
ParticipantErratum : voici le bon fichier (avec les requêtes !)
Attachments:
You must be logged in to view attached files.ludo.regnier
ParticipantErratum : tu l’auras compris, il faut filtrer sur la colonne “date de sortie” bien sur et pas directement sur “sortie” qui est la colonne du resultat
ludo.regnier
ParticipantBonjour
Je ne connais pas bien power query mais si cela peut t’aider à avancer (je vois que tu n’as pas encore reçu d’autres réponses), voici comment je procéderai : si ton fichier est exactement celui que tu présentes je ferai simplement un “remplir” “vers le haut” dans la colonne sortie (ou après avoir dupliqué la colonne sortie). Si ton fichier peut se présenter différemment et pour éviter les problèmes potentiels d’homonymie des salarié je conseillerai d’ajouter dans la table de départ un numéro d’identifiant unique par salarié (même identifiant quelque soit le contrat). Ensuite je créerai une requête à partir de la table source, supprimerai les colonnes autres que identifiant et sortie, puis filtrerai sur Sortie différent de vide. Ensuite je fusionnera la table source et la nouvelle table créée avec identifiant comme clé.
mais il existe sans doute des solutions encore plus simples. Bon courageludo.regnier
ParticipantOui globalement en changeant d’approche (en évitant de pivoter dépivoter) je suis passé d’un temps de réponse de 19 minutes !!) à 6 minutes max. Ça devient opérationnel !
ludo.regnier
ParticipantBonjour
Merci Stéphane pour cette nouvelle réponse. J’avais effectivement commencé par dépivoter mes colonnes pour travailler avec Attribut et Valeur, mais comme j’ai de nombreuses colonnes à dépivoter puis re-pivoter et environ 10000 lignes dans ma table source je me retrouvais avec des performances très mauvaises. C’est pourquoi je cherchais une solution qui m’évite de dépivoter (pensant que c’est la raison principale des mauvaises performances). Un collègue m’a aidé à adapter la formule Table.ReplaceValue en l’intégrant dans une “List.Accumulate”. Voici le résultat avec une condition si null : “si valeur en colonne A est null, remplacer par la valeur en colonne A. 1, si valeur en colonne B est null, remplacer par la valeur en colonne B. 1” etc.
Les colonnes contenant les valeurs à remplacer sont identifiées dans la liste col_a_remplacer de la fonction, et toutes les colonnes contenant les valeurs de remplacement sont nommées comme les colonnes à remplacer plus le suffixe “. 1”.
La formule permet de complexifier la condition en utilisant la variable b par exemple.List.Accumulate( col_a_remplacer, ma_table_source, (state, current) => Table.ReplaceValue=(state,0, each Record.Field(_,current & “. 1”), (a, b, c) as number => if a = null then c else a, {current}))
Il serait également possible de remplacer la condition
if a = null then c else a
par
a?? c
Je n’ai pas essayé
bonne journéeludo.regnier
ParticipantBonjour
Merci encore à Stéphane pour sa réponse. Je cherche maintenant à complexifier un peu ma requête :est-ce possible de rendre la colonne [M] paramétrable également ? En effet j’ai deux listes de colonnes qui fonctionnent par paire ([A] et [A. 1], [B] et [B. 1]) etc. et je souhaite faire un remplacement conditionnel : si valeur en colonne [A] <x alors [A] sinon [A] *[A. 1], si [B] <x alors [B] sinon [B] *[B. 1], si [C] <x alors [C] sinon [C] *[C. 1] etc pour l’ensemble des valeurs de la liste à transformer.Un grand merci par avance si vous pouvez m’aider.
ludo.regnier
ParticipantMERCI !! C’est exactement ce que je cherchais. Et c’est effectivement plus “léger” que les each liste de liste de Table. Transform Columns. 😁 Merci encore et bonne journée
ludo.regnier
ParticipantBonjour
Je suis débutant ++sur power query mais la solution à laquelle je pense serait de créer une seconde table avec deux colonnes, la première contenant les jours de la semaine et la seconde les jours ouvrés correspondant (par exemple à jeudi correspond mardi ouvré ), puis croiser les deux tables pour récupérer la valeur de la seconde colonne de la seconde table.
Sinon (et c’est pas bien de tricher !) j’ai posé votre question à ChatGPT et voici le code M proposé :let
startDate = #table({“Date de départ”},{{“01/01/2021”}}),
dateList = List.Dates(startDate[Date de départ], 3, #duration(1,0,0,0)),
workDays = List.Select(dateList, each Date.IsWorkday( _ )),
endDate = List.Last(workDays)
in
endDate
Bon courage6 May 2022 at 17 h 02 min in reply to: Promouvoir ligne en en-tête autre que la ligne 1 et + #103814ludo.regnier
ParticipantBonjour
Est-ce que c’est toujours la troisième ligne qui doit être promue comme en-tête ? Est ce que la seconde ligne peut être supprimée ? Si oui pourquoi ne pas supprimer la seconde ligne puis promouvoir la première ligne en en-tête. Il existe des menus qui font cela directement.ludo.regnier
ParticipantBonjour
Je viens de résoudre mon problème. Il me fallait créer une liste de valeurs correspondant aux occurences possibles du champ choisi en colonne, à laquelle j’associe la fonction List.Sum
Puis passer cette liste en argument de la fonction Table.AggregateTableColumn.Avec les données fournies dans l’exemple la requête query ne présente pas d’intérêt : on pourrait directement utiliser la source de données pour créer un TCD qui présenterait les résultats de la même manière. En réalité mon fichier de données n’est pas homogène sur les colonnes de Niveaux. Certaines branches de l’arborescence s’arrêtent au niveau 2, d’autres vont jusqu’au niveau 8. Dans ce cas un TCD présentera des lignes “(vide)” du niveau 3 jusqu’au niveau 8 ce qui ne présente pas d’intérêt et alourdit la lecture. Si je masque les champs “(vide)” à partir du niveau 3, je ne vois plus les détails pour les cas où je dois descendre au niveau 8.
La requête Query évite donc ce pb.Si cela intéresse qqn, éventuellement pour optimiser les requêtes voici le fichier opérationnel.
Merci et bonne journéeAttachments:
You must be logged in to view attached files.ludo.regnier
ParticipantBonjour Christian et merci pour ta réponse.
Je suis conscient que ma question n’est pas limpide. Je ne peux pas livrer le fichier pour des questions de confidentialité, mais j’ai reproduit le principe recherché, dans le fichier joint.
L’utilisateur doit choisir dans une liste déroulante (onglet Paramètres) un champ qui sera affiché en colonne et un autre qui sera consolidé.
Le résultat attendu doit être présenté conformément à ce qui figure dans l’onglet Résultat, c’est à dire de manière arborescente.
Je boque à l’étape Nombre Agrégé de l arequête Résultat, parce que je ne sais pas écrire le code avec des champs variables (si l’utilisateur fait un autre choix de champs que ceux que j’ai utilisés pour paramétrer la requête actuellement).
Merci beaucoup si qqn peut m’aider.
Bien à vousAttachments:
You must be logged in to view attached files. -
AuthorPosts