Toutes mes réponses sur les forums

15 sujets de 151 à 165 (sur un total de 283)
  • Auteur
    Messages
  • en réponse à : Numéro semaine ISO #88830
    Stéphane Lorin
    Participant

    Bonjour
    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

    en réponse à : Numéro semaine ISO #88828
    Stéphane Lorin
    Participant

    Bonjour

    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
    Source

    Vous pouvez copier/coller ce code dans une requête vide et l’utiliser dans vos requêtes.

    Cordialement

    Stéphane

    Stéphane Lorin
    Participant

    C’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

    en réponse à : Ajout une table historique #88529
    Stéphane Lorin
    Participant

    Bonjour

    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

    Stéphane Lorin
    Participant

    Bonjour

    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éphane

    en réponse à : Ajout une table historique #88491
    Stéphane Lorin
    Participant

    Bonjour

    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

    Stéphane Lorin
    Participant

    Bonjour

    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 mois

    les 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

    en réponse à : somme sur colonne variable #88449
    Stéphane Lorin
    Participant

    Bonjour

    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

    Stéphane Lorin
    Participant

    Bonjour

    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éphane

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Somme combiné à une recherche. #88433
    Stéphane Lorin
    Participant

    Bonjour

    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

    en réponse à : Feuille Excel a extraire avec un nom différent chaque mois #88414
    Stéphane Lorin
    Participant

    Bonjour

    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

    Stéphane Lorin
    Participant

    Bonjour
    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.FromRecords

    Table_profil = Table.AddColumn(#”Lignes groupées”, “Table_Profil”,
    each Table.FromRecords({[Profil=_[Profil],Catégorie=”ST”]}))

    Stéphane

    Stéphane Lorin
    Participant

    Bonjour

    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_Table

    Il 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

    en réponse à : Statistiques TCD POWERQUERY #88216
    Stéphane Lorin
    Participant

    Arnaud

    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

    en réponse à : Grouper les résultats des mesures #88171
    Stéphane Lorin
    Participant

    Bonjour

    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 exclu

    Puis j’utiliserai la mesure suivante

    COUNTROWS(FILTER(‘TableEmployés’,
    [Age]>=SELECTEDVALUE(Seuil[Seuil_Min])&&
    [Age]<SELECTEDVALUE(Seuil[Seuil_Max])))

    cordialement

    Stéphane

15 sujets de 151 à 165 (sur un total de 283)