Toutes mes réponses sur les forums
-
AuteurMessages
-
Daniel
ParticipantBonjour 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
DanielDaniel
ParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.2 octobre 2023 à 17 h 32 min en réponse à : Power Query – Colonne au format Texte en Date(mois) #133014Daniel
ParticipantBonjour 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
ModificationTypeDonneesSolution 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
Daniel27 septembre 2023 à 11 h 09 min en réponse à : Eclater une nomenclature multiniveaux (enfants avec multi-parents) Power BI #132827Daniel
ParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour 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
DanielDaniel
ParticipantBonjour 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
Daniel22 septembre 2023 à 12 h 50 min en réponse à : Eclater une nomenclature multiniveaux (enfants avec multi-parents) Power BI #132640Daniel
ParticipantBonjour 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
PermutationColonnesfin du code de la requête
CordialementDaniel
ParticipantBonjour 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
DanielDaniel
ParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour 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
Daniel1 septembre 2023 à 12 h 20 min en réponse à : somme des commandes par magasin par tranche de nombre de commandes. #131983Daniel
ParticipantBonjour 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
DanielAttachments:
You must be logged in to view attached files.Daniel
ParticipantBonjour 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
DanielDaniel
ParticipantBonjour 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
DanielDaniel
ParticipantBonjour 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 -
AuteurMessages