Accueil – Le CFO masqué › Forums › Power Query › Créer un tableau croisé dynamique spécial
- Ce sujet contient 4 réponses, 3 participants et a été mis à jour pour la dernière fois par victor.vergnory-mion, le il y a 3 années et 4 mois.
-
AuteurArticles
-
9 juin 2021 à 6 h 15 min #92030victor.vergnory-mionParticipant
Bonjour à tous!
Dans le cadre d’un projet je dois transformer la disposition de donnés du tableau ci-joint.
l’idée serait de n’avoir qu’une seule ligne pour chaque numéro du matériel et avoir comme colonne la date d’avertissement, le nb de km restants et le statut de l’intervention pour chacun des types d’opération (90-170-670), en soit un TCD.Mais je n’arrive pas a trouver de méthode pour cela. Des idées?
Attachments:
You must be logged in to view attached files.9 juin 2021 à 6 h 22 min #92032Christian MalteseParticipantBonjour,
un “unpivot” devrait faire l’affaire …
Christian
9 juin 2021 à 6 h 36 min #92033victor.vergnory-mionParticipantMalheureusement après avoir longuement essayé de dépivoter (et pivoter) les colonnes je n’y arrive toujours pas…
9 juin 2021 à 8 h 05 min #92034Kim LeblancParticipantBonjour,
Si vous nous fournissiez un exemple dans un fichier Excel avec un extrait de données et le résultat souhaité, ce serait plus facile de vous aider.
Aussi je m’interroge sur la nécessité de faire cette transformation dans Power Query… Vos données sont dans un format idéal pour être utilisé par la suite dans Power Pivot/Power BI ou simplement dans un TCD.
Kim
9 juin 2021 à 8 h 54 min #92036victor.vergnory-mionParticipantBonjour Kim et merci pour votre intérêt,
Effectivement pour réaliser des visualisations sur Power BI il ne m’est pas nécessaire d’avoir un tableau croisé dynamique.
Dans le cas présent je souhaite réaliser une application sur power apps. Pour que celle-ci fonctionne il me faut disposer sur une ligne de tous les critères correspondant à chaque matériel.
J’ai réussi à trouver une solution (assez fastidieuse certes mais fonctionnelle) que je vais essayer d’expliquer ici:-D’abord j’ai pivoté la colonne correspondant aux types d’opérations et en prenant les valeurs des dates d’avertissement pour obtenir le tableau en PJ. On y observera le nombre conséquents de “null”.
-Ensuite j’ai crée des colonnes conditionnelles des Km restants et du statu d’intervention associées aux colonnes 670k, 170k et 90k qui possèdent une valeur autre que nul seulement si la colone type d’opération en possède une. On obtient un second tableau joint.
-La dernière étape consiste à grouper les lignes pour éliminer les valeurs “null”. Pour cela j’ai utilisé le regroupement pour chaque materiel par somme qui ne marche cependant que pour les dates (qui sont des valeurs). Pour les deux autres colonnes j’ai du ruser et altérer le code m en utilisant la fonction List.RemoveNulls (qui supprime les null de la liste) précédé de List.Median qui est en quelque sorte un hack pour transformer la liste en valeur. Sur ce point il y a peut être plus simple.
Ci joint le tableau-résultat et le code` #”Colonne dynamique” = Table.Pivot(#”Colonnes supprimées”, List.Distinct(#”Colonnes supprimées”[Typeoperation]), “Typeoperation”, “Date d’avertissement”),
#”Colonne conditionnelle ajoutée” = Table.AddColumn(#”Colonne dynamique”, “170k km restants”, each if [170k] <> null then [Km restants] else null),
#”Colonne conditionnelle ajoutée1″ = Table.AddColumn(#”Colonne conditionnelle ajoutée”, “170k Statut de l’intervention”, each if [170k] <> null then [#”Statut de l’intervention”] else null),
#”Colonnes permutées1″ = Table.ReorderColumns(#”Colonne conditionnelle ajoutée1″,{“N° EF du matériel (EF)”, “Km restants”, “Statut de l’intervention”, “670k”, “170k”, “170k Statut de l’intervention”, “170k km restants”, “90k”}),
#”Colonne conditionnelle ajoutée2″ = Table.AddColumn(#”Colonnes permutées1″, “670k km restants”, each if [670k] <> null then [Km restants] else null),
#”Colonnes permutées2″ = Table.ReorderColumns(#”Colonne conditionnelle ajoutée2″,{“N° EF du matériel (EF)”, “Km restants”, “Statut de l’intervention”, “670k”, “670k km restants”, “170k”, “170k Statut de l’intervention”, “170k km restants”, “90k”}),
#”Colonne conditionnelle ajoutée3″ = Table.AddColumn(#”Colonnes permutées2″, “670k Statut de l’intervention”, each if [670k] <> null then [#”Statut de l’intervention”] else null),
#”Colonnes permutées3″ = Table.ReorderColumns(#”Colonne conditionnelle ajoutée3″,{“N° EF du matériel (EF)”, “Km restants”, “Statut de l’intervention”, “670k”, “670k km restants”, “670k Statut de l’intervention”, “170k”, “170k Statut de l’intervention”, “170k km restants”, “90k”}),
#”Colonne conditionnelle ajoutée4″ = Table.AddColumn(#”Colonnes permutées3″, “90k km restants”, each if [90k] <> null then [Km restants] else null),
#”Colonne conditionnelle ajoutée5″ = Table.AddColumn(#”Colonne conditionnelle ajoutée4″, “90k Statut de l’intervention”, each if [90k] <> null then [#”Statut de l’intervention”] else null),
#”Colonnes supprimées1″ = Table.RemoveColumns(#”Colonne conditionnelle ajoutée5″,{“Km restants”, “Statut de l’intervention”}),
#”Lignes groupées1″ = Table.Group(#”Colonnes supprimées1″, {“N° EF du matériel (EF)”}, {
{“670k”, each List.Sum([670k]), type nullable date}, {“670k km restants”, each List.Median(List.RemoveNulls([670k km restants])), type nullable text}, {“670k Statut de l’intervention”, each List.Median(List.RemoveNulls([#”670k Statut de l’intervention”])), type nullable text},
{“170k”, each List.Sum([170k]), type nullable date}, {“170k km restants”, each List.Median(List.RemoveNulls([#”170k Statut de l’intervention”])), type nullable text}, {“170k Statut de l’intervention”, each List.Median(List.RemoveNulls([170k km restants])), type nullable text},
{“90k”, each List.Sum([90k]), type nullable date}, {“90k km restants”, each List.Median(List.RemoveNulls([90k km restants])), type nullable text}, {“90k Statut de l’intervention”, each List.Median(List.RemoveNulls([#”90k Statut de l’intervention”])), type nullable text}})
in
#”Lignes groupées1″Bien cordialement,
Attachments:
You must be logged in to view attached files. -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.