Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
voici une proposition avec Power Query :
vous utilisez la fonction Table.Split pour regrouper vos données par groupe de 6 lignes
puis vous comparez les colonnes “Capteur” et “Etat” de chaque table de 6 lignes avec votre cycle de base.Voir PJ
Cordialement
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Merci du retourContrairement à ce que j’écrivais hier, il n’y a même pas besoin du #shared :
Expression.Evaluate(“1*3600+23*60+32”) renverra 5012
puis #duration(0,0,0,5012) pour obtenir la durée 0.01:23:32 (soit 0 jour, 1 heure, 23 minutes et 32 secondes)
StéphaneStéphane Lorin
ParticipantBonjour
j’ai une autre propositionvous remplacez
– ” heure” par *3600 avec un espace devant le mot mais sans le “s” final s’il y a plusieurs heures
– ” minute” par *60
– ” seconde” par rien “”
– “s” par rien “” (pour gérer les pluriels)
– les espaces restants ” ” par “+”vous avez ainsi “1 heure 23 minutes 32 secondes” qui est transformé en “1*3600+23*60+32”
vous évaluez cette chaine de caractère avec Expression.Evaluate(…,#shared) pour obtenir le nombre de secondes (voir un de mes précédents message sur cette fonction peu connue)
Enfin pour avoir la valeur en hh:mm:ss vous utilisez #duration(0,0,0,nb_secondes)C’est plus simple que ma solution précédente avec fractionnement, pivot, fractionnement, fusion et regroupement
Stéphane
Attachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
voir en PJ une proposition de solution.
l’idée est d’avoir une table de correspondance qui donne le nb de secondes et la durée de chaque “mot” : heures, heure, minutes, minute, secondes, seconde.avec vos données à transformer :
j’ajoute un index et je duplique la colonne
je fractionne les données suivant la transition espace/chiffre. j’ai donc choisi la transition non chiffre/chiffre et j’ai modifié manuellement la formule pour remplacer la fonction avec “not Text.Contains” par {” “} mais ceci n’est pas obligatoire.
puis je “dépivote” les colonnes ainsi créées pour avoir en ligne les heures, les minutes, les secondes.
je fractionne de nouveau cette colonne pour avoir d’un coté le nombre et de l’autre le nom (heure, minute, seconde) et je fusionne avec la table que j’évoquais au début pour récupérer les durées (3600 et 1:00:00 pour les heures)
il ne me reste plus qu’à multiplier les nombres d’heures, minutes et secondes par ces durées, puis à ajouter l’ensemble suivant l’index avec un regroupement.J’espère que ces explications et le fichier joint vous permettront de répondre à votre problème
Stéphane
Attachments:
You must be logged in to view attached files.24 juillet 2021 à 12 h 35 min en réponse à : CSV non-identique d’un dossier à convertir en table #93261Stéphane Lorin
ParticipantBonjour
commencez par créer un paramètre avec votre chemin “P:\Auditeur analyste\_Projets\20210716 – Export”
puis affectez ce paramètre à l’étape “Source”Source = Folder.Files(NomDuParamètre),
ensuite lors de la seconde étape, la référence au dossier peut être inutile s’il n’y a pas de sous-dossier contenant les mêmes noms et donc que vos 3 fichiers csv sont uniques.
dans ce cas, la partie en gras peut être supprimée
#”P:\Auditeur analyste\_Projets\20210716 – Export\_Users csv1″ = Source{[#”Folder Path”=”P:\Auditeur analyste\_Projets\20210716 – Export\”,Name=”Users.csv”]}[Content],de plus le nom de l’étape en italique qui a été créée automatiquement par Power Query peut être modifié en un nom plus clair.
Ce nom sera ensuite repris à la troisième étape. En effet, le chemin d’accès que vous lisez lors de cette étape #”CSV importé” est le nom de l’étape précédente et non un nouvel appel au chemin d’accès.Au final
let
Source = Folder.Files(NomDuParamètre),
Contenu = Source{[Name=”Users.csv”]}[Content],
#”CSV importé” = Csv.Document(Contenu,[Delimiter=”,”, Columns=33, Encoding=65001, QuoteStyle=QuoteStyle.None]),
…Stéphane
Stéphane Lorin
ParticipantMerci pour le retour
En effet pour le nombre d’année qui va augmenter
Par contre, celui du nombre de trimestres dans une année ne devrait pas évoluer. On doit pouvoir considérer sans risque qu’il y aura toujours 4 trimestres dans une année !
Bonne continuation sur ce projet
StéphaneStéphane Lorin
ParticipantEncore moi avec une formule Excel plus courte et plus simple
=SOMME(B4:E7*
(INDEX(B3:E3;SEQUENCE(;4))&INDEX(A4:A7;SEQUENCE(4))>=B11&C11)*
(INDEX(B3:E3;SEQUENCE(;4))&INDEX(A4:A7;SEQUENCE(4))<=B12&D12))INDEX(B3:E3;SEQUENCE(;4))&INDEX(A4:A7;SEQUENCE(4)) crée une matrice
2017Q1 | 2018Q1 | 2019Q1 …
2017Q2 | 2018Q2 | 2019Q2 …
…que l’on compare avec le min = 2017Q2 et le max 2019Q3 avant de multiplier l’ensemble par la plage de départ
Stéphane
Stéphane Lorin
ParticipantRe-bonjour
je complète ma réponse précédente en précisant que votre problématique justifierai un passage par Power Query pour transformer votre tableau en base de données exploitable ensuite par TCD, formule…
Vous transformez votre plage de données en tableau “structuré”, que vous importez dans Power Query via le menu “Données/Récupérer et transformer”. Vous sélectionnez votre 1ere colonne et dépivotez les autres.
A voir suivant votre besoin réel et pas uniquement cet exemple.
Stéphane15 juillet 2021 à 5 h 19 min en réponse à : Transformation date fichier d’origine en chiffre sur power query #93024Stéphane Lorin
ParticipantBonjour
Dans Power Query, quel est le type de votre champ ?
Si c’est “any” (avec ABC123 en haut à gauche), ça renvoie ensuite un nombre et non une date jj/mm/aaaa
Changez le type en “date” ou “datetime”Cordialement
Stéphane Lorin
ParticipantBonjour
Voici une fonction Excel qui répond à votre besoin
=SOMME(B4:E7*
(TRANSPOSE(SEQUENCE(4;4))>=INDEX(TRANSPOSE(SEQUENCE(4;4));EQUIV(C11;A4:A7;0);EQUIV(B11;B3:E3;0)))*
(TRANSPOSE(SEQUENCE(4;4))<=INDEX(TRANSPOSE(SEQUENCE(4;4));EQUIV(D12;A4:A7;0);EQUIV(B12;B3:E3;0))))TRANSPOSE(SEQUENCE(4;4)) pour créer une matrice de 1 à 16 avec les périodes dans l’ordre (1, 2, 3, 4 en 1ere colonne; 5, 6, 7, 8 en 2eme…)
puis un INDEX pour déterminer la position du min
un autre pour celle du max
on multiplie la plage de départ par celle des périodes >= mix et par celle <= au max pour obtenir le résultatStéphane
Stéphane Lorin
Participant“null” représente l’absence de données, le produit 36 n’a pas de Soja.
StéphaneStéphane Lorin
ParticipantBonjour
Lors de l’opération de pivot, il faut ouvrir “options avancées” et choisir “ne pas agréger”
Stéphane
Stéphane Lorin
ParticipantLorsque vous faites le regroupement par “OF” dans Power Query, vous choisissez la nouvelle colonne en indiquant l’opération “Somme” de la colonne “Statut”
Cette somme renvoie une erreur car vous essayez de sommer du texte.
Dans la barre de formule vous visualisez la formule
… each List.Sum([statut])…
que vous remplacez par
… each Text.Combine(List.Distinct([statut]),”;”) …List.Distinct pour supprimer les statuts en double
Text.Combine pour concaténer les statuts sans doublon les uns avec les autres.au final, ceux que vous cherchez sont uniquement “Clos”.
Stéphane
Stéphane Lorin
ParticipantBonjour
Voir une piste dans mon message du 4 avril 2021 à 16 h 33 min en réponse à : regrouper puis étendre en colonnes.
Vous regroupez par OF et vous faites un agrégat sur les statuts.
Evidemment, la somme ne donnera rien vu que c’est du texte, par contre vous pouvez utiliser Text.Combine pour concaténer tous les statuts de chaque OF + List.Distinct pour supprimer les statuts en double.Le code suivant vous permet donc d’obtenir la liste de tous les statuts de vos OF
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Lignes groupées” = Table.Group(Source, {“OF”}, {{“Statut”, each Text.Combine(List.Distinct([statut]),”;”), type nullable text}})
in
#”Lignes groupées”ceux qui sont entièrement clos sont ainsi faciles à identifier
OF Statut
OF02692204 rt;clos
OF02799277 RT;clos
OF02501537 clos
OF02978602 En coursStéphane
Stéphane Lorin
ParticipantBonjour
Votre état final est-il le dernier de la table ?
Si oui, ajoutez un index, regroupez les OF en remontant le “maximum” de cet index, puis fusionnez ce regroupement avec votre table initiale sur les champs “OF” + “index”Autre piste en filtrant d’abord les “clos” vu que seuls ces OF vous intéressent, puis inversez les lignes et supprimez les doublons. De cette façon, le dernier OF sera retenu.
Par ailleurs, il ne me semble pas nécessaire de poser une même question sur plusieurs forums simultanément. Commencez par un, en l’absence de réponse au bout d’un jour ou deux, essayez sur un autre. En tout cas, n’oubliez pas de prévenir tous les forums que vous avez votre réponse.
Stéphane
-
AuteurMessages