Toutes mes réponses sur les forums
-
AuteurMessages
-
15 décembre 2023 à 4 h 47 min en réponse à : Comparaison d’un agent avec la moyenne des autres #135555
Xavier Allart
ParticipantBonjour
voici une proposition
en power query
Sélectionner les colonnes année et mois
Dépivoter les autres colonnes
ajouter une colonne date (1er jour du mois) si vous voulezPAsser en Power BI
ajouter la mesure suivante :
Autres =
VAR AgentX = ALLSELECTED(‘Table'[Agent])
Return
CALCULATE(AVERAGE(‘Table'[Valeur]), NOT ‘Table'[Agent] IN AgentX)Pour tester j’ai réalisé les vusiels en 2 zones indépendantes au niveau du filtre dans les segments
Pour la zone bleue on selectionne l’agent que l’on désire comparer aux autres
Pour la zone verte on selectionne les autres. elle ne sert que de tests on pourra la supprimercordialement
Attachments:
You must be logged in to view attached files.15 décembre 2023 à 2 h 53 min en réponse à : Répartir le montant des factures trimestrielles sur 3 mois #135552Xavier Allart
ParticipantBonjour
Je vous propose cette solution
création d’une nouvelle table par réference à la table LigneFacture
la fusionner avec la table EnteteFacture sur le champ IDFacture
developper la colonne DateFacture
la fusionner avec la table Commandes sur le champ IDcommande
developper la colonne Periodicite
J’ai supprimmer les lignes dont le montant est de 0 ou la periodicite est de 0
dans une nouvelle colonne calculer le montant par période
[#” MontantHT “]/[Periodicite]ajouter une colonne pour généner une liste des dates (1 par mois selon la périodicité)
= Table.AddColumn(#”Personnalisée ajoutée”, “List.Dates”, each List.Transform({0..[Periodicite]-1}, (x) =>
Date.AddMonths(Date.StartOfMonth([DateFacture]), x)
))Developper la liste sur plusieures lignes
conserver seulement les colonnes “IDLigne”, “Montant/Période”, “List.Dates”
Cordialement
Attachments:
You must be logged in to view attached files.Xavier Allart
ParticipantBonjour
Il faut dépivoter les colonnes mois en ligne, ajouter une colonne Date, à partir des colonnes Année et Mois, j’ai choisi le 1er jour du mois. Une ligne se transforme en 12 lignes
Index, Annee, Mois, valeur, Datelet
// Étape 1: Extraction des données
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText(“…”)), Compression.Deflate)),// Étape 2: Modification des types de colonnes
#”Type modifié” = Table.TransformColumnTypes(Source,{{“ANNEE”, Int64.Type}, {“Janvier”, type number}, {“Février”, type number}, {“Mars”, type number}, {“Avril”, type number}, {“Mai”, type number}, {“Juin”, type number}, {“Juillet”, type number}, {“Août”, type number}, {“Septembre”, type number}, {“Octobre”, type number}, {“Novembre”, type number}, {“Décembre”, type number}}),// Étape 3: Ajout d’une colonne d’index (pour identifier les 12 mois d’une ligne, si necessiare)
#”Index ajouté” = Table.AddIndexColumn(#”Type modifié”, “Index”, 1, 1, Int64.Type),// Étape 4: Réorganiser les colonnes, pour déplacer Index en 1er
#”Colonnes permutées” = Table.ReorderColumns(#”Index ajouté”,{“Index”, “ANNEE”, “Janvier”, “Février”, “Mars”, “Avril”, “Mai”, “Juin”, “Juillet”, “Août”, “Septembre”, “Octobre”, “Novembre”, “Décembre”}),// Étape 5: Sélectioner les 12 colonnes Mois, dépivotage des colonnes
#”Tableau croisé dynamique des colonnes supprimé” = Table.UnpivotOtherColumns(#”Colonnes permutées”, {“Index”, “ANNEE”}, “Attribut”, “Valeur”),// Étape 6: Renommage de la colonne pivotée Attribut en Mois
#”Colonnes renommées” = Table.RenameColumns(#”Tableau croisé dynamique des colonnes supprimé”,{{“Attribut”, “MOIS”}}),// Étape 7: Ajout d’une colonne de date composé de 01 MOIS ANNEE
#”Colonne fusionnée insérée” = Table.AddColumn(#”Colonnes renommées”, “Date”, each Text.Combine({“01 “, [MOIS], ” “, Text.From([ANNEE], “fr-FR”)}), type text),// Étape 8: Modification du type de la colonne “Date”
#”Type modifié1″ = Table.TransformColumnTypes(#”Colonne fusionnée insérée”,{{“Date”, type date}})
in
#”Type modifié1″Cordialement
Attachments:
You must be logged in to view attached files.Xavier Allart
ParticipantBonjour
Pouvez vous joindre une version simplifiée de votre table au format excel.
Quand vous ecrivez “une colonne “année” et mes mois sont disposés en colonnes, ces deux deux colonnes sont en format texte” Faut-il comprendre qu’il s’agit de nombre au format texte, ou bien ecrit en toutes lettres.
pour les mois : 01, 1, Janv, Janvier, …
pour les année : 23, Z023, Deux mille vingt-trois, …..cordialement
12 décembre 2023 à 23 h 40 min en réponse à : Répartir le montant des factures trimestrielles sur 3 mois #135458Xavier Allart
ParticipantBonjour
Pour vous aider, merci d’envoyer le power bi simplifié ou les tables simplifiées au format Excel. Merci
cordialement
Xavier Allart
ParticipantBonjour
voici une solution, avec la fonction RECHERCHEX
Ajouter une colonne avec la valeur “JF” dans la table des jours fériés
Ajouter 2 colonnes dans la liste des absences :
id = Matricule & Date
“abs”Voici la formule à copier/coller (ne pas l’incrementer à cause des références structurées)
=RECHERCHEX(C$2;Fériés!$B$6:$B$17;Fériés!$C$6:$C$17;SI(C$3>=6;”WE”;RECHERCHEX($B24&”-“&TEXTE(C$2;”AAAAMMJJ”);ListeDates[iD];ListeDates[Abs];””;0));0)Il s’agit de 3 fonctions imbriquées les unes dans les autres
=RECHERCHEX(C$2;Fériés!$B$6:$B$17;Fériés!$C$6:$C$17;”fonction imbriquée”;0)
SI(C$3>=6;”WE”;”fonction imbriquée”)
RECHERCHEX($B24&”-“&TEXTE(C$2;”AAAAMMJJ”);ListeDates[iD];ListeDates[Abs];””;0)
dans cette derniere on peut remplacer “” par C43Cordialement
Attachments:
You must be logged in to view attached files.Xavier Allart
ParticipantBonjour
Sans plus de données, il semblerait qu’il y ai une confusion entre colonne calculée et mesure
Je vous propose 2 liens pour en savoir plus :
https://learn.microsoft.com/fr-fr/dax/best-practices/dax-column-measure-referencesCordialement.
Xavier Allart
ParticipantBonjour
Une solution consite à créer depuis la table des absences une table de liste de dates automatique
Il faudra bien penser à actualiser les données à chaque changement dans la table des absences
Cordialement
Xavier Allart
ParticipantBonjour
Sans connaitre la structure de vos tables.
Je pense qu’il faudrait un seul calendrier avec les colonnes Date.Calendaire et la Date.Fiscale correspondante. A voir en fonction des calculs dont vous avez besoin, La Date.Fiscale pourrait etre la date du lundi, du 1er du mois, etc
Dans l’exemple suivant
Date.Calendaire Année Mois Lundi ficale Année & Mois Fiscale
mercredi 1 janvier 2020 2020 1 lundi 30 décembre 2019 2019 12
samedi 1 février 2020 2020 2 lundi 27 janvier 2020 2020 1
dimanche 1 mars 2020 2020 3 lundi 24 février 2020 2020 2
mercredi 1 avril 2020 2020 4 lundi 30 mars 2020 2020 3
vendredi 1 mai 2020 2020 5 lundi 27 avril 2020 2020 4
lundi 1 juin 2020 2020 6 lundi 1 juin 2020 2020 6
mercredi 1 juillet 2020 2020 7 lundi 29 juin 2020 2020 6
samedi 1 août 2020 2020 8 lundi 27 juillet 2020 2020 7
mardi 1 septembre 2020 2020 9 lundi 31 août 2020 2020 8
jeudi 1 octobre 2020 2020 10 lundi 28 septembre 2020 2020 9
dimanche 1 novembre 20202020 11 lundi 26 octobre 2020 2020 10
mardi 1 décembre 2020 2020 12 lundi 30 novembre 2020 2020 11Pour la colonne Lundi, j’ai utilsé la formule power query suivante
Date.AddDays([date],-Date.DayOfWeek([date],Day.Monday)))Cordialement
Xavier Allart
ParticipantBonjour
Je pense qu’il manque le fichier en piece jointe.
Cordialement
Xavier Allart
ParticipantBonjour
Power Query pour Excel et Power BI, c’est identique.
Pour la table soit vous l’enregistrer dans un classeur Excel, ou un Fichier csv et l’importé dans votre modele Power BI, soit directement la créer dans Power BI : Accueil > Créer une table, copier/coller depuis Excel, nommer la table et la charger.Cordialement
Xavier Allart
Participantbonjour
voici une propositon
J’ai ajouter une table pour avoir par Shift (Type) les heures de Début et de Fin de chaque.
Dans cette table j’ai découpé la nuit en 2
Type H_Début H_Fin
1.Soir 00:00 05:00
2.Matin 05:00 13:00
3.Apres-Midi 13:00 21:00
4.Soir 21:00 23:59Le code
ajoute un N° d’index a chaque action
decompose chaque action en autant de lignes qu’il y a de tranches horaires
Associe à chaque tranche horaire le shift (Type) correspondant
Regroupe les actions, par date et shift, pour calculer le TR correspondantlet
// Étape 1 : Charger les données depuis la feuille Excel appelée “Donnée”
Source = Excel.CurrentWorkbook(){[Name=”Donnée”]}[Content],// Étape 2 : Modifier le type de colonne pour les colonnes “Début” et “Fin” en type datetime
#”Type modifié” = Table.TransformColumnTypes(Source,{{“Début”, type datetime}, {“Fin”, type datetime}}),// Étape 3 : Ajouter une colonne d’index “Id”, pour identifier chaque action
#”Id ajouté” = Table.AddIndexColumn(#”Type modifié”, “Id”, 1, 1, Int64.Type),// Décomposer une action, en autant de lignes qu’elle a de tranches horaires
// Étape 4 : Calcul la durée entre “Début” et “Fin”
#”DaysHours ajoutée” = Table.AddColumn(#”Id ajouté”, “Nb.TranchesHoraires”, each Duration.ToRecord([Fin]-[Début])),// Étape 5 : Étendre la colonne de durée en colonnes distinctes “Days” et “Hours”
#”Nb.tranchesHoraires développé” = Table.ExpandRecordColumn(#”DaysHours ajoutée”, “Nb.TranchesHoraires”, {“Days”, “Hours”}, {“Days”, “Hours”}),// Étape 6 : Calculer le nombre total d’heures en ajoutant les jours convertis en heures et les heures
Nb.TranchesHoraires = Table.AddColumn(#”Nb.tranchesHoraires développé”, “Nb.TranchesHoraires”, each [Days]*24+[Hours]),// Étape 7 : Supprimer les colonnes inutiles
#”Colonnes supprimées” = Table.RemoveColumns(Nb.TranchesHoraires,{“Days”, “Hours”}),// Étape 8 : Extraire l’heure du début au format “hh”
#”Texte inséré entre les délimiteurs” = Table.AddColumn(#”Colonnes supprimées”, “Debut.hh”, each Value.FromText(Text.BetweenDelimiters(Text.From([Début], “fr-FR”), ” “, “:”))),// Étape 9 : Créer une liste de tranches horaires basée sur l’heure de début et le nombre total d’heures
List.TranchesHoraires = Table.AddColumn(#”Texte inséré entre les délimiteurs”, “List.TranchesHoraires”, each List.Durations(#duration(0, [Debut.hh], 0, 0), [Nb.TranchesHoraires], #duration(0, 1, 0, 0))),// Étape 10 : Étendre la liste de tranches horaires en plusieurs lignes
#”List.TranchesHoraires développé” = Table.ExpandListColumn(List.TranchesHoraires, “List.TranchesHoraires”),// Étape 11 : Supprimer la colonne “Debut.hh”
#”Colonnes supprimées1″ = Table.RemoveColumns(#”List.TranchesHoraires développé”,{“Debut.hh”}),// Étape 12 : Ajouter une colonne avec la date du début sans les heures
#”Date insérée” = Table.AddColumn(#”Colonnes supprimées1″, “Debut.Date”, each Date.From([Début]), type date),// Étape 13 : Modifier le type de colonne “Debut.Date” en type datetime
#”Type modifié1″ = Table.TransformColumnTypes(#”Date insérée”,{{“Debut.Date”, type datetime}}),// Étape 14 : Ajouter une colonne avec la date et l’heure de début de chaque tranche
Debut.Tranche = Table.AddColumn(#”Type modifié1″, “Debut.Tranche”, each [Debut.Date]+[List.TranchesHoraires]),// Étape 15 : Sélectionner les colonnes nécessaires
#”Autres colonnes supprimées” = Table.SelectColumns(Debut.Tranche,{“Id”, “Fin”, “Debut.Tranche”}),// Associer chaque tranche horaire à son Shift (Type)
// Étape 16 : Fractionner la colonne “Debut.Tranche” en colonnes “Debut.Date” et “Debut.Heure”
#”Fractionner la colonne par délimiteur” = Table.SplitColumn(Table.TransformColumnTypes(#”Autres colonnes supprimées”, {{“Debut.Tranche”, type text}}, “fr-FR”), “Debut.Tranche”, Splitter.SplitTextByDelimiter(” “, QuoteStyle.Csv), {“Debut.Date”, “Debut.Heure”}),// Étape 17 : Modifier le type des colonnes “Debut.Date” et “Debut.Heure”
#”Type modifié3″ = Table.TransformColumnTypes(#”Fractionner la colonne par délimiteur”,{{“Debut.Date”, type date}, {“Debut.Heure”, type time}}),// Étape 18 : Fusionner les tables en utilisant une jointure affichant toutes les lignes des 2 tables
#”Requêtes fusionnées” = Table.NestedJoin(#”Type modifié3″, {“Debut.Heure”}, Table_Shift, {“H_Début”}, “Table_Shift”, JoinKind.FullOuter),// Étape 19 : Étendre la table résultante
#”Table_Shift développé” = Table.ExpandTableColumn(#”Requêtes fusionnées”, “Table_Shift”, {“Type”, “H_Fin”}, {“Type”, “H_Fin”}),// Étape 20 : Trier les lignes en fonction de l’heure de début
#”Lignes triées” = Table.Sort(#”Table_Shift développé”,{{“Debut.Heure”, Order.Ascending}}),// Étape 21 : Remplir les valeurs manquantes vers le bas pour Type et H_Fin
#”Rempli vers le bas” = Table.FillDown(#”Lignes triées”,{“Type”, “H_Fin”}),// Calculer la durée en secondes par Shift (Type)
// Étape 22 : Ajouter une colonne TR avec la valeur 3600
#”TR ajoutée” = Table.AddColumn(#”Rempli vers le bas”, “TR”, each 3600),// Étape 23 : Ajouter une colonne avec la date et l’heure de fin de la tranche
#”Personnalisée ajoutée” = Table.AddColumn(#”TR ajoutée”, “Personnalisé”, each DateTime.FromText(Date.ToText([Debut.Date])&” “&Time.ToText([H_Fin]))),// Étape 24 : Ajouter une colonne conditionnelle pour déterminer la heure de fin
#”Colonne conditionnelle ajoutée” = Table.AddColumn(#”Personnalisée ajoutée”, “Fin.Date”, each if [Personnalisé] > [Fin] then Time.From([Fin]) else [H_Fin]),// Étape 25 : Regrouper les actons en fonction de leur Id, de la date de début et du type
#”Lignes groupées” = Table.Group(#”Colonne conditionnelle ajoutée”, {“Id”, “Debut.Date”, “Type”}, {{“Debut”, each List.Min([Debut.Heure]), type nullable time}, {“Fin”, each List.Max([Fin.Date]), type any}, {“TR”, each List.Sum([TR]), type number}, {“NB”, each Table.RowCount(_), Int64.Type}}),// Étape 26 : Trier les lignes groupées
#”Lignes triées1″ = Table.Sort(#”Lignes groupées”,{{“Id”, Order.Ascending}, {“Debut.Date”, Order.Ascending}, {“Type”, Order.Ascending}})
in
#”Lignes triées1″cordialement
Attachments:
You must be logged in to view attached files.Xavier Allart
ParticipantBonjour
Le probleme est toujours le meme, il s’agit d’un probleme de relation entre les tables.
Vous voulez afficher SUM(Invoices[IAmount]) par Orders[Order], mais il n’y a pas de relation directe entre ces 2 tables. Vous ne pouvez pas afficher par Order de calculs sur IAmount il faut modifier le contexte de relations. Voici une solution pour ce cas.Cas_X =
VAR CustomerFiltered=TREATAS({“John”}, ‘Customer'[Customer]) RETURN
SUMMARIZECOLUMNS(
Orders[Order],
Orders[OCustomer],
CustomerFiltered,
“OAmount”, SUM(Orders[OAmount]),
“IAmount”, sumx(VALUES(Orders[OCustomer]),SUM(Invoices[IAmount]))
)Cordialement
29 novembre 2023 à 10 h 08 min en réponse à : Incompréhension du visuel Matrice dans Power BI #135008Xavier Allart
ParticipantBonjour
Il s’agit d’un probleme de relation entre table selon le contexte de ligne et de filtre
Invoice n’est pas en relation directe avec OrderPower BI DAX RelatedTable Function: Get the subtable related to the current row
https://www.sqlbi.com/articles/using-related-and-relatedtable-in-dax/
https://www.sqlbi.com/articles/understanding-context-transition-in-dax/Des pistes pour résoudre le probleme
1) Passer la relation entre les tables Invoice et Custumer en double sens
2) Dans l'onglet Filtres du visuel, Modifier le filtre sur somme OrderAmont a different de null
3) MesureInvoice = sumx(VALUES('Order'[Customer]),SUM(Invoice[Invoice_Amount]))
4)Cordialement
Xavier Allart
ParticipantBonjour
Voici 2 solutions, basées sur la création d’une nouvelle table regroupant les heures par projet et par employe, puis ajout d’une colonne “Regroupement” pour regouper tous les projets inférieur à 25% par employé.
Cette table est composée des colonnes suivantes :
Employe, GroupeProjet, Projet, TotalHeures, PourcentageSolution en DAX :
Ajouter une table DAX
DAX-Projets =
ADDCOLUMNS(
SUMMARIZE(‘TimeSheet’, ‘TimeSheet'[Employe], ‘TimeSheet'[Project]),
“TotalHeures”, CALCULATE(SUM(‘TimeSheet'[Time])),
“Pourcentage”, DIVIDE(CALCULATE(SUM(‘TimeSheet'[Time])), CALCULATE(SUM(‘TimeSheet'[Time]), ALLEXCEPT(‘TimeSheet’, ‘TimeSheet'[Employe])))
)Dans cette nouvelle table ajouter une colonne
GroupeProject =
IF (‘DAX-Projets'[Pourcentage] < 0.25, “Other”, ‘DAX-Projets'[Project])Solution en Power Query :
Depuis la table TimeSheet, creer une nouvelle table par réference
Regouper sur Employe et calculer la somme de Time
Nommer cette table PQ-EmployesDepuis la table TimeSheet, creer une nouvelle table par réference
Regouper sur Employe et Project calculer la somme de Time
Nommer cette table PQ-Projets
Fusionner avec la table sur PQ-Employes sur le champ employe
Developper la colonne TotalHeure de la table PQ-Employes
Ajouter une colonne “Pourcentage” = [TotalHeure]/[Employe.TotalHeure]
Ajouter une colonne conditionnelle “GroupeProject” = if [#”Pourcentage”] < 0.25 then “Other” else [Project]Cordialement
Attachments:
You must be logged in to view attached files. -
AuteurMessages