Toutes mes réponses sur les forums

15 sujets de 31 à 45 (sur un total de 121)
  • Auteur
    Messages
  • en réponse à : Mesures qui ne sont pas utilisées #134935
    Daniel
    Participant

    Bonjour Jblan, le Forum,

    Nativement, je ne pense pas que cela soit possible, par contre il existe 2 outils externes qui permettent de réaliser ce que vous demander, il s’agit de :
    Measure Killer
    et
    Power BI Cleaner
    Des tutos existent sur YouTube vous montrant les fonctionnalités de ce outils externes.

    D’autre part, il est aussi possible d’utiliser DAX Studio (qui est aussi un outil externe) mais cela me semble plus complexe

    En espérant que cela vous aidera.
    Cordialement
    Daniel

    en réponse à : Calcul sur critères multiples #134820
    Daniel
    Participant

    Bonjour maitre_rahl, le Forum,

    Pour répondre à ta demande, je procéderai comme suit

    let
    Source = Excel.CurrentWorkbook(){[Name=”Tableau1″]}[Content],
    ModificationTypeDonnees = Table.TransformColumnTypes(Source,{{“Equipment”, type text}, {“carte”, Int64.Type}, {“Addition”, Int64.Type}}),
    TriSurEquipementEtCarte = Table.Sort(ModificationTypeDonnees,{{“Equipment”, Order.Ascending}, {“carte”, Order.Ascending}}),
    AjoutPréfixeColCarte = Table.TransformColumns(TriSurEquipementEtCarte, {{“carte”, each “Carte ” & Text.From(_, “fr-FR”), type text}}),
    PivotColonneCarte = Table.Pivot(AjoutPréfixeColCarte, List.Distinct(AjoutPréfixeColCarte[carte]), “carte”, “Addition”),
    Carte1vsCarte2 = Table.AddColumn(PivotColonneCarte, “Carte 1 vs Carte 2”, each [Carte 1] – [Carte 2])
    in
    Carte1vsCarte2
    Cela donne le résultat escompté directement voir le fichier ci-joint.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Power Query – Colonne au format Texte en Date(mois) #133014
    Daniel
    Participant

    Bonjour Mathieu, le Forum,

    1ère Solution
    1 – Avoir une table, avec les noms des mois comme orthographiés dans tes données (colonne Attribut) et en 2ème colonne, le numéro des mois (1 à 12), chargr cette table dans Power Query
    2 – Charger tes données dans Power Query et faire une jointure entre les deux tables sur base du nom du mois, on développera la nouvelle table ainsi obtenue en ne gardant que le numéro du mois et en décochant la case “Utiliser le nom de la colonne d’orgine….”)
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabRequete2″]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“Attribut”, type text}}),
    #”Requêtes fusionnées” = Table.NestedJoin(#”Type modifié”, {“Attribut”}, tblListeMois, {“Mois”}, “tblListeMois”, JoinKind.LeftOuter),
    DevelopperNumMois = Table.ExpandTableColumn(#”Requêtes fusionnées”, “tblListeMois”, {“Num_Mois”}, {“Num_Mois”}),
    AjoutDateDebutMois = Table.AddColumn(DevelopperNumMois, “Date”, each Date.FromText(“01/”& Number.ToText([Num_Mois]) & “/2023”)),
    ModificationTypeDonnees = Table.TransformColumnTypes(AjoutDateDebutMois,{{“Date”, type date}})
    in
    ModificationTypeDonnees

    Solution 2
    Les noms de mois dans tes données sont écrits en entier (Janvier, Février,….), si c’est le cas alors la requête ci-après fera le job
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabRequete1″]}[Content],
    NumeroDuMois = Table.AddColumn(Source, “N_Mois”, each Date.Month(Date.FromText([Attribut]&”1″))),
    RenommerColonnes = Table.RenameColumns(NumeroDuMois,{{“Attribut”, “Nom_Mois”}}),
    AjoutDateDebutMois = Table.AddColumn(RenommerColonnes, “Date”, each Date.FromText(“01/”& Number.ToText([N_Mois]) & “/2023”)),
    ModificationTypeDonnees = Table.TransformColumnTypes(AjoutDateDebutMois,{{“Date”, type date}})
    in
    ModificationTypeDonnees
    En espérant avoir pu t’aider.
    Cordialement
    Daniel

    Daniel
    Participant

    Bonjour cyprien, le Forum,

    Cela fonctionne, la table Nomenclature doit avoir le même type de données (Article) que la table des Besoins. Comme les articles étaient numériques, le type de données était entier dans la table des Besoins et dans la table Nomenclature était en type Text. Il a donc suffit de les mettre au même type (j’ai choisi Entier pour les deux tables) et cela donne le résultat attendu.
    Je met en pièce jointe ton fichier avec le résultat.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : colonne conditionnelle #132771
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    En pièce jointe, un fichier excel avec deux méthodes possibles (d’autres existent surement)

    1ère requête
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabData”]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“SITESLOT”, Int64.Type}, {“Resultat Mas”, Int64.Type}}),
    #”Colonne conditionnelle ajoutée” = Table.AddColumn(#”Type modifié”, “resultat MAS 1″, each if [SITESLOT] = 140 then [Resultat Mas]*10 else if [SITESLOT] = 141 then [Resultat Mas]*10 else if [SITESLOT] = 175 then [Resultat Mas]*10 else if [SITESLOT] = 176 then [Resultat Mas]*10 else if [SITESLOT] = 193 then [Resultat Mas]*10 else if [SITESLOT] = 194 then [Resultat Mas] else [Resultat Mas]*10)
    in
    #”Colonne conditionnelle ajoutée”
    Bien que je ne comprenne pas pourquoi tout ce qui n’est pas égal aux valeurs spécifiées doivent être multiplié par 10 sauf le SITESLOT 194. Cela fonctionne parfaitement dans mon exemple.

    2ème requête
    Petit préalable, il faut créer une table des SITESLOT qui devront être multiplié par 10 et charger cette table dans Power query (ce sera une requête supplémentaire) et la transformer en Liste pur utilisation ultérieure.
    Ensuite on charge les données, puis on ajoute une colonne avec la formule suivante :
    #”Personnalisée ajoutée” = Table.AddColumn(#”Type modifié”, “Resultat Mas 1″, each if List.Contains(tblSitesLot,[SITESLOT])= true then [Resultat Mas] * 10 else [Resultat Mas])

    Ce qui donne la requête suivante
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabData”]}[Content],
    #”Type modifié” = Table.TransformColumnTypes(Source,{{“SITESLOT”, Int64.Type}, {“Resultat Mas”, Int64.Type}}),
    #”Personnalisée ajoutée” = Table.AddColumn(#”Type modifié”, “Resultat Mas 1″, each if List.Contains(tblSitesLot,[SITESLOT])= true then [Resultat Mas] * 10 else [Resultat Mas])
    in
    #”Personnalisée ajoutée”
    Tous les SITESLOT contenus dans la liste des SITESLOTS seront alors multiplié par 10, les autres garderont leurs valeurs d’origine.
    En espérant avoir pu vous aider à résoudre votre problématique
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : colonne conditionnelle #132660
    Daniel
    Participant

    Bonjour hboisteau, le Forum,

    Voyons voir, si j’ai bien compris dès que le SITELOT est égal à 140, on prend le RESULTAT MAS que l’on multiplie par 10 et sinon on prend le RESULTAT MAS (pour tous les autres cas)
    ce qui donne
    #”Colonne conditionnelle ajoutée” = Table.AddColumn(#”Personnalisée ajoutée5″, ” resultat MAS 1″, each if [SITESLOT] = 140 then [Resultat Mas] * 10 else [Resultat Mas]).
    Les autres SITESLOT n’étant pas à multiplier, pas besoin de les prendre dans le if (sauf instructions contraires non précisées dans l’énnoncé)
    AjoutResultatMasCorrigé = Table.AddColumn(ModificationTypeDonnees, “ResultatMAS_C”, each if [SITESLOT] = 140 then [RESULTAT MAS] – 10 else if [SITESLOT] = 141 then [RESULTAT MAS] – 25 else [RESULTAT MAS])
    Cordialement
    Daniel

    en réponse à : soustraction dans une colonne #132652
    Daniel
    Participant

    Bonjour hboisteau, Nicolas, le Forum,

    Je peux proposer cette solution, elle aussi sur base d’un index.
    Il suffit de changer le nom des intitulés de colonnes car non fourni dans le petit exemple.

    Début de la requête
    let
    Source = Excel.CurrentWorkbook(){[Name=”tabData”]}[Content],
    ModificationTypeDonnees = Table.TransformColumnTypes(Source,{{“ID”, Int64.Type}, {“Date”, type date}, {“Heure”, type time}, {“Montant”, Int64.Type}}),
    GroupLignesID = Table.Group(#”Type modifié”, {“ID”}, {{“FullTable”, each _, type table [Date=nullable datetime, #”ID”=nullable number, Valeur=nullable number]}}),
    IndexFullTable = Table.TransformColumns(GroupLignesID,{{“FullTable”, each Table.AddIndexColumn(_,”Index”,0,1)}}),
    AddColumnDifference = Table.AddColumn(IndexFullTable, “CalculPrevValue”, each let
    AllDataTable = [FullTable],
    PrevRowValue = Table.AddColumn(
    AllDataTable,”Dif”,
    each try AllDataTable[Montant] {[Index]} – AllDataTable[Montant] {[Index]-1} otherwise null)
    in PrevRowValue),
    DevelopperDifference = Table.ExpandTableColumn(AddColumnDifference, “CalculPrevValue”, {“Date”, “Heure”, “Montant”, “Dif”}, {“Date”, “Heure”, “Montant”, “Dif”}),
    ModificationTypeDonneesFinal = Table.TransformColumnTypes(DevelopperDifference,{{“Heure”, type time}, {“Date”, type date}, {“Montant”, Int64.Type}, {“Dif”, Int64.Type}, {“ID”, type text}}),
    SuppressionColonnes = Table.RemoveColumns(ModificationTypeDonneesFinal,{“FullTable”})

    in
    SuppressionColonnes
    Fin de la requête
    Cordialement
    Daniel

    Daniel
    Participant

    Bonjour cyprien, le Forum,

    J’ai essayé de reproduire sur base de la nomenclature et des données fournies, j’arrive au résultat du tableau “Nomenclature de production multiniveaux”, à toi de vérifier si cela te semble correct et rapide par rapport à l’ensemble de ton jeu de données.
    Je pense que d’autres membres auront aussi des solutions à te proposer.

    Voici le code de ma requête (charger au préalable la table Nomenclature dans une requête)
    let
    Source = Excel.CurrentWorkbook(){[Name=”Qte_Tot”]}[Content],
    ModificationTypeDonnées = Table.TransformColumnTypes(Source,{{“Article”, Int64.Type}, {“Qté totale”, Int64.Type}}),
    AjoutTblNomenclature =
    let
    Step1 = Table.AddColumn(ModificationTypeDonnées, “TblNomenclature”, each Nomenclature),
    Step2 = Table.AddColumn(Step1, “tblNomenclature”, each let Article = [Article] in Table.SelectRows(Nomenclature, each [Article] = Article)),
    Step3 = Table.ColumnNames(Table.Combine(Step2[tblNomenclature])),
    Step4 = Table.SelectColumns(Step2,{“Article”,”Qté totale”,”tblNomenclature”})
    in Step4,
    DeveloppementTblNomenclature = Table.ExpandTableColumn(AjoutTblNomenclature, “tblNomenclature”, {“Composant”, “Quantity”}, {“Composant”, “Quantity”}),
    AjoutQteFinale = Table.AddColumn(DeveloppementTblNomenclature, “Qté finale”, each [Qté totale]*[Quantity]),
    PermutationColonnes = Table.ReorderColumns(AjoutQteFinale,{“Article”, “Composant”, “Qté finale”, “Qté totale”, “Quantity”})
    in
    PermutationColonnes

    fin du code de la requête
    Cordialement

    en réponse à : Graphique des présents par mois #132154
    Daniel
    Participant

    Bonjour j.brochard, le Forum,

    Pour pouvoir compter le nombre d’employés présents entre les dates de début et les dates de fin, je procéderais de la façon suivante :
    1 – Création d’une fonction en langage M (power query). Celle-ci va créer une date (début du mois) pour chaque mois contenu entre la date de début et la date de fin.
    Nom de la fonction : fxRépartitionDateDébutMoisEntreDeuxDates
    let
    Source = (DateDebut as date, DateFin as date) =>

    let
    NoOfIntervals = (Date.Year(DateFin)*12+Date.Month(DateFin))-(Date.Year(DateDebut)*12+Date.Month(DateDebut)),
    Result = List.Transform({0..NoOfIntervals}, each Date.AddMonths(From, _))
    in Result
    in
    Source
    2 – Ensuite dans ma table contenant les données, on va créer une nouvelle colonne dans laquelle on indiquera le nom de la fonction avec deux paramètres date de début et date de fin
    = Table.AddColumn(tabData_Table, “Date Présence”, each fxRépartitionDateDébutMoisEntreDeuxDates([Date début],[Date fin]))
    3 – Dans Power BI, il pourrait être utile de travailler avec une table Calendrier, dans ce cas, il faudra créer une relation sur la date de la table Calendrier et la date de présence à l’effectif. Ensuite dans un visuel, on indiquera le champ de la table Calendrier MoisAnnée sous la forme (Janvier 2021 par exemple) et une mesure NbEmployes (“calculate(count(tabData[Prénom]))”).
    Avec un slicer (segment) sur les années et un graphique en barres, cela devrait faire l’affaire.
    Cordialement
    Daniel

    en réponse à : Prix moyen pondéré par le volume de vente #132115
    Daniel
    Participant

    Bonjour pierre.defechereux1, le Forum,

    Je me demande pourquoi ajouter le prix pondéré dans la table Articles, car avec des mesures et des visuels on peux parfaitement le calculer et le représenter par articles ou par commandes ou par client voir d’autres données
    Je joins un exemple pour illustrer ma réponse qui ne répond pas complétement à votre demande.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : Retrancher une mesure en % #131988
    Daniel
    Participant

    Bonjour Raoduk, le Forum,

    En essayant comme ceci :
    2346 – (2346 * 5.37%) cela donne 2220,0198 donc il faudra arrondi au nombre entier pour avoir 2220.
    Cordialement
    Daniel

    en réponse à : somme des commandes par magasin par tranche de nombre de commandes. #131983
    Daniel
    Participant

    Bonjour andremarie, Xavier, le Forum,

    Autre possibilité en POWER BI avec deux mesures.
    1 ère mesure : compter le nombre de commandes
    CommandesNb = calculate(countx(tabData,tabData[Commande_no]))
    2ème mesure : créer les différentes plages pour le nombre de commandes
    CommandesGroup = SWITCH(TRUE(),
    [CommandesNb]<= 4, “entre 0 et 4 commandes”,
    [CommandesNb]<= 6, “entre 5 et 6 commandes”,
    [CommandesNb]> 6, “plus de 6 commandes”)

    Ensuite, créer un visuel et inclure les magasins et la mesure CommandesGroup et éventuellement les quantités vendue ou autres.
    Cela donne les résultat suivant (voir pièce jointe), je n’ai pas réussi à joindre une image dans cette partie.
    En espérant avoir pu vous aider.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    en réponse à : cumul journalier avec un critere #130983
    Daniel
    Participant

    Bonjour h.boisteau, le Forum,

    Je reprends ta requête en la modifiant comme cela, normalement cela devrait fonctionner

    Début de la Requête
    let
    Source = Excel.Workbook(File.Contents(“C:\Users\hbois\OneDrive\2020\Bureau\dossier de test Aout 23\5-DataBase Resultat Mas.xlsx”), null, true),
    TBLResultatMas_Table = Source{[Item=”TBLResultatMas”,Kind=”Table”]}[Data],
    #”Type modifié” = Table.TransformColumnTypes(TBLResultatMas_Table,{{“Date Exploit.”, type date}, {“Salle”, type text}, {“Machine”, Int64.Type}, {“Socle”, Int64.Type}, {“Déno.”, type text}, {“Marque”, type text}, {“Version”, type text}, {“Type”, type text}, {“Programme”, type text}, {“%”, type number}, {“Prog.”, Int64.Type}, {“Progressif”, type text}, {“Date config”, type date}, {“Dt. fin cfg”, type date}, {“Modèle”, type text}, {“Mise max#(lf)(montant)”, Int64.Type}, {“Nb#(lf)lignes”, Int64.Type}, {“Nb jours”, Int64.Type}, {“Inc Entrées”, Int64.Type}, {“Inc Sorties”, Int64.Type}, {“Inc Jackpots”, Int64.Type}, {“Inc CC”, Int64.Type}, {“Inc Billets”, Int64.Type}, {“Inc Entrées AFT Promos non restreints”, Int64.Type}, {“Inc Sorties AFT#(lf)Promos Non restreints”, Int64.Type}, {“Nb. Jeux “, Int64.Type}, {“Net Win”, Int64.Type}, {“Réel”, type number}, {“Théo”, type number}, {“Taux #(lf)occupation”, type number}}),
    #”Fractionner la colonne par délimiteur” = Table.SplitColumn(#”Type modifié”, “Progressif”, Splitter.SplitTextByDelimiter(“,”, QuoteStyle.Csv), {“Progressif.1”, “Progressif.2”, “Progressif.3”, “Progressif.4″}),
    #”Type modifié1″ = Table.TransformColumnTypes(#”Fractionner la colonne par délimiteur”,{{“Progressif.1”, type text}, {“Progressif.2”, type text}, {“Progressif.3”, type text}, {“Progressif.4″, type text}}),
    #”Colonnes supprimées” = Table.RemoveColumns(#”Type modifié1″,{“Salle”, “Machine”, “Socle”, “Déno.”, “Marque”, “Version”, “Type”, “Programme”, “%”, “Prog.”, “Progressif.3”, “Progressif.4”, “Date config”, “Dt. fin cfg”, “Modèle”, “Mise max#(lf)(montant)”, “Nb#(lf)lignes”, “Nb jours”, “Inc Sorties”, “Inc Jackpots”, “Inc CC”, “Inc Billets”, “Inc Entrées AFT Promos non restreints”, “Inc Sorties AFT#(lf)Promos Non restreints”, “Nb. Jeux “, “Net Win”, “Réel”, “Théo”, “Taux #(lf)occupation”}),
    #”Lignes filtrées” = Table.SelectRows(#”Colonnes supprimées”, each ([Progressif.1] <> null)),
    #”Valeur remplacée” = Table.ReplaceValue(#”Lignes filtrées”,null,”0″,Replacer.ReplaceValue,{“Progressif.2″}),
    #”Tableau croisé dynamique des colonnes supprimé” = Table.UnpivotOtherColumns(#”Valeur remplacée”, {“Date Exploit.”, “Inc Entrées”}, “Attribut”, “Valeur”),
    #”Lignes triées” = Table.Sort(#”Tableau croisé dynamique des colonnes supprimé”,{{“Date Exploit.”, Order.Ascending}}),
    #”Lignes groupées” = Table.Group(#”Lignes triées”, {“Date Exploit.”, “Valeur”}, {{“Coin In”, each List.Sum([Inc Entrées]), type nullable number}}),
    #”Index ajouté” = Table.AddIndexColumn(#”Lignes groupées”, “Index”, 1, 1, Int64.Type),
    TriSurIndex_1 = Table.Sort(#”Index ajouté”,{{“Index”, Order.Ascending}}),
    #”Personnalisée ajoutée” = Table.AddColumn(TriSurIndex_1, “Cumul Coin In”, each
    List.Sum(
    Table.SelectRows(
    TriSurIndex_1,
    (InTable) => InTable[Index] <= [Index]
    and
    InTable[Valeur] = [Valeur])[Coin In]
    )
    ),
    #”Lignes filtrées1″ = Table.SelectRows(#”Personnalisée ajoutée”, each ([Valeur] <> “0”))
    in
    #”Lignes filtrées1″

    Fin de la requête
    En espérant que cela te permettra de résoudre le problème rencontré
    Cordialement
    Daniel

    en réponse à : cumul journalier avec un critere #130816
    Daniel
    Participant

    Bonjour h.boisteau, le Forum,

    Alors en fonction de ta requête et des données s’y afférant, pour régler le problème il suffit de supprimer (Output) => de la ligne

    #”Personnalisée ajoutée” = Table.AddColumn(TriSurIndex_1, “Cumul Coin In”, each
    (OutTable) =>
    List.Sum(
    Table.SelectRows(
    TriSurIndex_1,
    (InTable) => InTable[Index] <= OutTable[Index]
    and
    InTable[Valeur] = OutTable[Valeur])[Coin In]
    )
    )
    sans oublier les autres mentions Output ( OutTable[Index] devient [Index] et OutTable[Valeur] devient [Valeur]) et ce devrait être bon.
    Désolé du temps de réponse.
    Cordialement
    Daniel

    en réponse à : cumul journalier avec un critere #130779
    Daniel
    Participant

    Bonjour h.boisteau, le Forum,

    Donc si j’ai bien compris, tu n’as pris qu’une partie de ce que je t’ai envoyé. Il est normal que tu ais une fonction et pas le résultat car pour obtenir celui-ci il faut qu’il soit inclus dans la fonction Powerquery Table.addcolumn comme suit :
    Table.AddColumn(
    TriSurIndex_1,
    “Machine Running Total”,
    (OutTable) =>
    List.Sum(
    Table.SelectRows(
    TriSurIndex_1,
    (InTable) => InTable[Index] <= OutTable[Index]
    and
    InTable[machine] = OutTable[machine])[données]
    )
    )
    Néanmoins, il est aussi impératif d’avoir créer au préalable la colonne Index commençant à 1 et éventuellement de faire un tri dessus (à vérifier)
    Serait-il possible que tu poste le code de ta requête ?
    Cordialement
    Daniel

15 sujets de 31 à 45 (sur un total de 121)