Toutes mes réponses sur les forums
-
AuteurMessages
-
Stéphane Lorin
ParticipantBonjour
Je ne vois pas la différence entre ce que vous cherchez et le n° de la semaine ISO 8601 mais le principal est d’avoir une solution même si elle me semble a priori “bancale” (avez-vous testé le 1er janvier 2022 ? c’est en semaine 52 de 2021 en ISO et non en 1 de 2022)En complément, si vous souhaitez récupérer la semaine au format 2021 S13 il faut modifier la fin de la fonction :
in
Text.From(Date.Year(#”Jeudi Semaine”))&” S”&Text.PadStart(Text.From(#”N° Semaine”),2,”0″)au lieu de
in
#”N° Semaine”Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
La semaine 1 ISO est celle du 1er jeudi de l’année
Le n° de la semaine ISO se calcule donc par l’écart entre le jeudi de la semaine actuelle et ce premier jeudi de l’année (de l’année de jeudi de la semaine, pas l’année de la date elle-même).En PowerQuery, cela peut se traduire par cette fonction personnalisée de ma conception (il y a peut être plus simple)
Je calcule le jeudi de la semaine en partant de la date, en ajoutant 3 et en retirant le n° du jour en commençant par lundi.
Puis je calcule le 1er jeudi de l’année en partant du 7 janvier et en retirant le jour de la semaine du 1er janvier avec le critère que la semaine commence le vendredi (Day.Friday) c’est à dire que si le 1er janvier est un vendredi, le 1er jeudi sera le 7.let
Source = (Date as date) => let
#”Jeudi Semaine” = Date.AddDays(Date,3-Date.DayOfWeek(Date,Day.Monday)),
#”1er Jeudi Année” = #date(Date.Year(#”Jeudi Semaine”),1,7-Date.DayOfWeek(#date(Date.Year(#”Jeudi Semaine”),1,1),Day.Friday)),
#”N° Semaine” = Duration.Days(#”Jeudi Semaine” – #”1er Jeudi Année”)/7+1
in
#”N° Semaine”
in
SourceVous pouvez copier/coller ce code dans une requête vide et l’utiliser dans vos requêtes.
Cordialement
Stéphane
19 mars 2021 à 8 h 43 min en réponse à : Power Query – Insertion ligne « Vide » dans une table « GroupedBy » #88532Stéphane Lorin
ParticipantC’est qu’il faut aussi faire le regroupement par “Type Liste” en plus du champ “Profil”
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],#”Type modifié” = Table.TransformColumnTypes(Source,{{“Repère”, Int64.Type}, {“Type Liste”, type text}, {“Ref Affaire”, type text}, {“Catégorie”, type text}, {“Column5”, type any}, {“Profil”, type text}, {“Qté”, Int64.Type}, {“Qualité”, type text}, {“Long. (mm)”, Int64.Type}, {“Surface (m²)”, type number}, {“Poids (kg)”, type number}, {“Pds Tot (kg)”, type number}, {“Désignation”, type text}}),
#”Lignes groupées” = Table.Group(#”Type modifié”, {“Profil”, “Type Liste”}, {{“GroupByProfil”, each _, type table [Repère=nullable number, Type Liste=nullable text, Ref Affaire=nullable text, Catégorie=nullable text, Column5=text, Profil=nullable text, Qté=nullable number, Qualité=nullable text, #”Long. (mm)”=nullable number, #”Surface (m²)”=nullable number, #”Poids (kg)”=nullable number, #”Pds Tot (kg)”=nullable number, Désignation=nullable text]}}),
Table_profil = Table.AddColumn(#”Lignes groupées”, “Table_Profil”,
each Table.FromRecords({[Profil=_[Profil],#”Type Liste”=_[Type Liste],Catégorie= “ST”]})),Ajout_Table = Table.AddColumn(Table_profil, “Ajout”, each [Table_Profil]&[GroupByProfil]),
#”Colonnes supprimées” = Table.RemoveColumns(Ajout_Table,{“Profil”, “GroupByProfil”, “Table_Profil”, “Type Liste”}),
#”Ajout développé” = Table.ExpandTableColumn(#”Colonnes supprimées”, “Ajout”, {“Profil”, “Repère”, “Type Liste”, “Ref Affaire”, “Catégorie”, “Column5”, “Qté”, “Qualité”, “Long. (mm)”, “Surface (m²)”, “Poids (kg)”, “Pds Tot (kg)”, “Désignation”}, {“Profil.1”, “Repère”, “Type Liste”, “Ref Affaire”, “Catégorie”, “Column5”, “Qté”, “Qualité”, “Long. (mm)”, “Surface (m²)”, “Poids (kg)”, “Pds Tot (kg)”, “Désignation”})
in
#”Ajout développé”Stéphane
Stéphane Lorin
ParticipantBonjour
Personnellement je stockerai les fichiers Excel historique dans des dossiers avec la période (du type 2021_01… pour les mois ou 2021_S01… pour les semaines) et je les traiterai dans PowerBI.
Evidemment c’est fonction de la volumétrie de vos données
Il m’est arrivé de traiter des fichiers historiques de 400 à 600 Mo par mois avec 2 ans d’historique. Dans ce cas, j’avais un fichier Excel réduit à un dizaine de Mo par mois dans lequel je stockais les indicateurs avec un niveau de détail suffisamment fin pour répondre au besoin de comparaison par rapport au mois en cours.Cordialement
Stéphane
19 mars 2021 à 5 h 03 min en réponse à : Power Query – Insertion ligne « Vide » dans une table « GroupedBy » #88528Stéphane Lorin
ParticipantBonjour
Je viens de tester votre code Table.FromRecords({[Profil=_[Profil],#”Type Liste”=_[Type Liste],Catégorie= “ST”]}) sur votre fichier du 15 mars sans problème.
Le champ [Type Liste] prends bien la valeur “Liste A”.Ajoutez une pièce jointe au besoin.
Cordialement
StéphaneStéphane Lorin
ParticipantBonjour
Je vous suggère de lire mon échange il y a quelques jours avec Arnaud dans la rubrique “PowerQuery/Statistiques TCD POWERQUERY”. Ce n’est pas exactement le même contexte mais vous pouvez vous en inspirer.
Stéphane
18 mars 2021 à 10 h 42 min en réponse à : Langage M – Dupliquer des lignes en fonction d’un critère numérique #88490Stéphane Lorin
ParticipantBonjour
bravo pour les premières étapes 🙂
pour la suite, vous faites appel à la fonction personnalisée dans le menu ‘ajouter une colonne’ puis vous définissez la valeur de vos paramètres.La fonction filtre la table initiale en ne retenant que les lignes dont la plage début->fin est incluse entre les paramètres.
Ainsi en appliquant cette fonction à toutes les période de janvier 2019 à mars 2021 et en développant les colonnes, vous obtiendrez le résultat que vous souhaitiez à votre étape :
3- Créer le nombre de ligne correspondant au nombre de moisles dernières étapes
vous sélectionnez les colonnes début mois et début de période de la référence : menu ajout de colonne / Date / la plus récente
puis vous recommencez avec fin de mois et fin de période en choisissant ‘la plus ancienne’enfin vous faites la différence entre les deux valeurs obtenues via ajout de colonne/date/soustraire des jours qui génère un Duration.Days (nb de jour entier) que j’ai modifié enfin par Duration.TotalDays car je voulais avoir aussi la fraction de jour (les heures)
bon courage pour la fin
Stéphane
Stéphane Lorin
ParticipantBonjour
je vous suggère de dépivoter dans Power Query vos colonnes 1, 2 3 pour les mettre en ligne afin d’avoir un champ “mois”
MO 1 25
MO 2 25
MO 3 30
consommable 1 30
consommable 2 40
consommable 3 20
…Stéphane
17 mars 2021 à 5 h 19 min en réponse à : Langage M – Dupliquer des lignes en fonction d’un critère numérique #88447Stéphane Lorin
ParticipantBonjour
Par principe je vous dirai que (presque) toutes les manipulations de données sont réalisables en M.
Vous pouvez trouver un exemple différent, mais assez similaire malgré tout, dans le post “Calculer le délai de travail entre deux dates Power BI (DAX)” (mon fichier en date du 15 janvier)Pour obtenir les étapes que vous listez ci-dessus :
– remplacement des “null” par la date/heure avec DateTime.LocalNow()
– ajout d’une colonne début de mois via le menu ajouter une colonne/ Date/ Mois (avec fonction Date.StrartOfMonth)
– ajout d’une colonne fin de mois sur le même principe (avec fonction Date.EndOfMonth)
– il n’y a pas de fonction de différence de mois comme DATEDIFF(“m”,…) de VBA. Il faut donc passer par la différence des années * 12 + la différence des mois
– puis créer une liste {0…nb_mois} et la développer
– utiliser la fonction Date.AddMonths pour obtenir la liste des mois
– calcul les min des dates de fin et les max des dates de début et faire la différence
Je trouve ça lourd et complexe…Comme régulièrement avec Power Query, il faut raisonner différemment qu’avec Excel ou VBA.
Donc pour ma part je commence par créer 2 paramètres : début et fin (en datetime) et je crée une requête sur vos données en filtrant [date de création] <= fin et [date de clôture]>= début
je transforme cette requête en fonction (par clic droit)Ensuite je crée une liste des mois dans Excel (de janvier 2019 à mars 2021 dans votre cas)
je calcule la fin de mois et j’applique ma fonction
pour chaque mois j’obtiens la table filtrée des éléments présents durant le mois
il ne me reste plus qu’à insérer une colonne ‘la plus récente’ entre le début de mois et la date de création (donc un List.Max)
puis une colonne ‘la plus ancienne’ entre la fin de mois et la clôture (donc un List.Min)
et enfin la différence entre les dates heures obtenues via Duration.TotalDays([Fin retenu] – [Début retenu])j’obtiens ainsi la durée de chaque référence par mois que je synthétise dans 2 TCD.
cordialement
StéphaneAttachments:
You must be logged in to view attached files.Stéphane Lorin
ParticipantBonjour
Si je comprends bien votre besoin, un SOMME.SI doit faire l’affaire (ou un SOMME.SI.ENS si vous avez d’autres critères)
En V4 : SOMME.SI(ColonneM;R4;ColonneN)
soit en version Tableau :
=SOMME.SI(Données_métrés[N° Plan];[@[N° PLAN]];Données_métrés[Poids TS])ou avec SOMME.SI.ENS
=SOMME.SI.ENS(Données_métrés[Poids TS];Données_métrés[N° Plan];[@[N° PLAN]])Stéphane
16 mars 2021 à 8 h 39 min en réponse à : Feuille Excel a extraire avec un nom différent chaque mois #88414Stéphane Lorin
ParticipantBonjour
Si une fois que vous avez effectué votre filtre sur les feuilles contenant les caractères “CP”
la feuille que vous cherchez est toujours la première, vous pouvez modifier votre code
#”Lignes filtrées3″{[Item=”SOLDE CP BS DEC”,Kind=”Sheet”]}[Data]
en
#”Lignes filtrées3″{0}[Data]le 0 désignera la première ligne de la table filtrée et non pas un élément particulier.
Cordialement
Stéphane
15 mars 2021 à 8 h 52 min en réponse à : Power Query – Insertion ligne « Vide » dans une table « GroupedBy » #88367Stéphane Lorin
ParticipantBonjour
Le plus simple pour ajouter une table avec un champ “Profil” égal au profil en cours et un champ “Catégorie” égal à “ST” est un Table.FromRecordsTable_profil = Table.AddColumn(#”Lignes groupées”, “Table_Profil”,
each Table.FromRecords({[Profil=_[Profil],Catégorie=”ST”]}))Stéphane
11 mars 2021 à 3 h 05 min en réponse à : Power Query – Insertion ligne « Vide » dans une table « GroupedBy » #88262Stéphane Lorin
ParticipantBonjour
Après votre regroupement par le colonne “Profil”, je vous propose de créer une colonne personnalisée avec une nouvelle table contenant uniquement la valeur de la colonne “Profil” puis d’ajouter cette nouvelle table à la table regroupée précédemment
Fonction pour la colonne personnalisée : Table.FromList({_[Profil]},null,{“Profil”})
Pour l’ajout des tables : la fonction Table.Combine ou plus simplement le caractère &Code complet
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Lignes groupées” = Table.Group(Source, {“Profil”}, {{“GroupByProfil”, each _, type table}}),
Table_profil = Table.AddColumn(#”Lignes groupées”, “Table_Profil”, each Table.FromList({_[Profil]},null,{“Profil”})),
Ajout_Table = Table.AddColumn(Table_profil, “Ajout”, each [Table_Profil]&[GroupByProfil])
in
Ajout_TableIl ne reste plus qu’à supprimer les colonnes intermédiaires et à développer la table combinée
Vous pourriez même le faire directement dans le Table.Group en ajoutant devant le each _ la fonction Table.FromRecords
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
#”Lignes groupées” = Table.Group(Source, {“Profil”}, {{“Table Profil”, each Table.FromRecords({[Profil =_[Profil]{0}]})&_, type table }})
in
#”Lignes groupées”Cordialement
Stéphane
Stéphane Lorin
ParticipantArnaud
comme vous vous adressiez à un Sébastien et que le message ne semblait pas terminé je pensais que vous reviendriez compléter le texte ou que c’était une erreur
Si les données n’ont pas évolué d’une fois sur l’autre c’est normal qu’elles se superposent.
Le champ Date/Heure permet justement de visualiser les actualisations successives.Cordialement
Stéphane
Stéphane Lorin
ParticipantBonjour
Pour ma part, je créerai une table avec les seuils :
Libellé| Seuil_Min | Seuil_Max
moins18 | 0 | 18
18-24 | 18 | 25
25-29 | 25 | 30
…
A chaque fois le seuil min est inclus et le seuil est max excluPuis j’utiliserai la mesure suivante
COUNTROWS(FILTER(‘TableEmployés’,
[Age]>=SELECTEDVALUE(Seuil[Seuil_Min])&&
[Age]<SELECTEDVALUE(Seuil[Seuil_Max])))cordialement
Stéphane
-
AuteurMessages