Accueil – Le CFO masqué › Forums › Power BI › Remplir vers le bas dans certains cas
- Ce sujet contient 16 réponses, 3 participants et a été mis à jour pour la dernière fois par k.musseleck, le il y a 1 année et 10 mois.
-
AuteurArticles
-
8 novembre 2022 à 9 h 46 min #122229k.musseleckParticipant
Bonjour,
Tout d’abord je commence par préciser que je suis nouveau et que peut être ma question est bête mais j’essaie.
J’ai une table dans laquelle j’ai un “nom de client” présent dans une colonne mais se nom de client n’est présent que si dans une autre colonne (qu’on appel line_type) est écrit “Entête production”.
Je souhaiterai “recopier” ce nom de client si dans la colonne line_type est écrit “écriture capacité”.
Le point commun entre “Entête production” et “écriture capacité” et le “prod_order_no”.
Le problème est que dans certain cas je n’ai pas de nom de client, alors la colonne reste vide.Je joins ce que je souhaiterai et ce que j’ai
Attachments:
You must be logged in to view attached files.8 novembre 2022 à 16 h 18 min #122282DanielParticipantBonjour k.musseleck, le Forum,
En première approche, j’utiliserais le tri des données comme suit :
1 – Sélectionner la colonne Prod order no et trier en ordre croissant
2 – Sélectionner la colonne Line type et trier en ordre décroissant (cela placera Ecriture Production en 1er et Ecriture capacité à la suite)
Ensuite, on va dans l’onglet Transformer, on sélectionne la colonne NomClient et avec l’option Remplir vers le bas, cela devrait faire le job.
Cordialement
Daniel9 novembre 2022 à 4 h 37 min #122285k.musseleckParticipantBonjour,
Merci mais comme je le disais plus haut, je ne peux pas utiliser cette fonction car dans mon tableau j’ai des cas ou il n’y a pas de nom de client. Si j’utilise remplir vers le bas, j’aurai un nom de client dans une case ou il ne doit pas en avoir.
9 novembre 2022 à 12 h 42 min #122289DanielParticipantBonjour k.musseleck, le Forum,
OK, mais dans l’exemple donné, je vois des lignes Ecriture capacité sans client et c’est celles qui doivent être remplies avec les données Client de Ecriture production si j’ai bien compris.
Ma 1ère approche fonctionne et donne le résultat voulu (voir requête ci-dessous) et dans fichier excel (requête Data)
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau3″]}[Content],
#”Type modifié” = Table.TransformColumnTypes(Source,{{“EntryNo”, Int64.Type}, {“Line_type”, type text}, {“Prod_Order No”, Int64.Type}, {“Item_No”, type text}, {“Statut”, type number}, {“NomClient”, type text}, {“NoCommande”, type text}}),
#”Lignes triées” = Table.Sort(#”Type modifié”,{{“Prod_Order No”, Order.Ascending}, {“Line_type”, Order.Descending}}),
#”Rempli vers le bas” = Table.FillDown(#”Lignes triées”,{“NomClient”})
in
#”Rempli vers le bas”
Autrement, via une autre approche mais plus d’étapes, voir requête ci-dessous
let
Source = Excel.CurrentWorkbook(){[Name=”Tableau3″]}[Content],
GroupAllRows = Table.Group(Source, {“Prod_Order No”}, {{“AllRows”, each _, type table [EntryNo=number, Line_type=text, Prod_Order No=number, Item_No=text, Statut=nullable number, NomClient=nullable text, NoCommande=nullable text]}}),
SelectionEcrituresProduction = Table.AddColumn(GroupAllRows, “Personnalisé”, each Table.SelectRows(
[AllRows],
(TableNosDonnees) => TableNosDonnees[Line_type] = “Entête production”)[NomClient]),
DevelopperListeEcritureProduction = Table.ExpandListColumn(SelectionEcrituresProduction, “Personnalisé”),
DevelopperAllRows = Table.ExpandTableColumn(DevelopperListeEcritureProduction, “AllRows”, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}),
ColonneNomClient = Table.RenameColumns(DevelopperAllRows,{{“Personnalisé”, “Nom Client”}})
in
ColonneNomClient
Il est possible que d’autres solutions existent mais je n’en vois pas d’autres pour l’instant. Si cela est conforme au résultat souhaité, merci de le faire savoir et que cela réglera ton problème.
Cordialement
Daniel9 novembre 2022 à 12 h 47 min #122290DanielParticipantBonjour k.musseleck, le Forum,
Juste oublié de joindre le fichier excel contenant les deux requêtes, désolé.
Cordialement
DanielAttachments:
You must be logged in to view attached files.10 novembre 2022 à 2 h 21 min #122307Stéphane LorinParticipantBonjour
une autre possibilité en deux étapes.
– une première requête pour filtrer la table sur le champ Line_type = “Entête production”
vous obtenez ainsi le NomClient de chaque Prod_Order_No
– une seconde pour fusionner la table initiale avec cette table filtrée sur le champ Prod_Order_No pour ramener le NomClient.Stéphane
10 novembre 2022 à 6 h 48 min #122309k.musseleckParticipantBonjour,
Merci beaucoup, mais le je ne comprends plus du tout. J’écris ce code dans une nouvelle colonne de ma table power bi?
Je voudrais tester le second.10 novembre 2022 à 11 h 07 min #122313DanielParticipantBonjour k.musseleck, le Forum,
Si ton dernier message correspond à mon dernier envoi, il faut écrire la requête dans Power query sous Power BI. Cela permet de créer la table que tu utiliseras dans Power BI avec des visuels.
Cordialement
Daniel14 novembre 2022 à 10 h 12 min #122344k.musseleckParticipantBonjour,
Oui mon dernier message est sur la seconde partie et comment l’exploiter.
Donc si je comprends bien, j’écris cela dans l’état dans power query:let
Source = Excel.CurrentWorkbook(){[Name=”Tableau3″]}[Content],
GroupAllRows = Table.Group(Source, {“Prod_Order No”}, {{“AllRows”, each _, type table [EntryNo=number, Line_type=text, Prod_Order No=number, Item_No=text, Statut=nullable number, NomClient=nullable text, NoCommande=nullable text]}}),
SelectionEcrituresProduction = Table.AddColumn(GroupAllRows, “Personnalisé”, each Table.SelectRows(
[AllRows],
(TableNosDonnees) => TableNosDonnees[Line_type] = “Entête production”)[NomClient]),
DevelopperListeEcritureProduction = Table.ExpandListColumn(SelectionEcrituresProduction, “Personnalisé”),
DevelopperAllRows = Table.ExpandTableColumn(DevelopperListeEcritureProduction, “AllRows”, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}),
ColonneNomClient = Table.RenameColumns(DevelopperAllRows,{{“Personnalisé”, “Nom Client”}})
in
ColonneNomClientEst ce bien cela?
- Cette réponse a été modifiée le il y a 1 année et 10 mois par k.musseleck.
14 novembre 2022 à 11 h 30 min #122347DanielParticipantBonjour k.musseleck, le Forum,
Oui, il faut créer ta requête dans Power Query. Tu peux t’inspirer des étapes que je t’ai montré, mais avec des adaptations sur la source de données (dans mon exemple c’est Tableau3, tableau structuré dans Excel, ce peut être un nom différent dans ton cas voir un autre type de source comme un fichier CSV ou une base SQL), les colonnes sont celles repris dans ton exemple (en espérant que je les ai orthographiées comme toi, à vérifier). En prenant en compte ces différentes remarques, cela devrait fonctionner comme dans l’exemple fourni dans le fichier excel.
Cordialement
Daniel15 novembre 2022 à 6 h 11 min #122421k.musseleckParticipantBonjour,
J’ai créé 2 étapes, une première source et une seconde navigation. Puis dans une troisième étape personnalisée j’ai mis:= GroupAllRows = Table.Group(Source, {“Prod_Order No”}, {{“AllRows”, each _, type table [EntryNo=number, Line_type=text, Prod_Order No=number, Item_No=text, Statut=nullable number, NomClient=nullable text, NoCommande=nullable text]}}),
SelectionEcrituresProduction = Table.AddColumn(GroupAllRows, “Personnalisé”, each Table.SelectRows(
[AllRows],
(TableNosDonnees) => TableNosDonnees[Line_type] = “Entête production”)[NomClient]),
DevelopperListeEcritureProduction = Table.ExpandListColumn(SelectionEcrituresProduction, “Personnalisé”),
DevelopperAllRows = Table.ExpandTableColumn(DevelopperListeEcritureProduction, “AllRows”, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}, {“EntryNo”, “Line_type”, “Item_No”, “Statut”, “NoCommande”}),
ColonneNomClient = Table.RenameColumns(DevelopperAllRows,{{“Personnalisé”, “Nom Client”}})
in
ColonneNomClientCela me renvoi l’erreur:
” Expression.syntaxerror:Jeton Eof attendu”15 novembre 2022 à 9 h 48 min #122425k.musseleckParticipantBonjour,
Dans l’idéal ce que je cherche à faire c’est stocker la valeur de No commande si line type est de type “Entête production” et de retourner cette valeur dans No commande si prod order No de la variable est la même que celui d’une colonne donnée.
Est ce possible sous power BI? Comment pourrait on écrire cela?
15 novembre 2022 à 10 h 03 min #122426Stéphane LorinParticipantBonjour
il me semble que c’est ce que je proposais dans mon post #122307 du 10 novembre.
Vous commencez par filtrer votre table sur la colonne line type
puis vous fusionnez vote table initiale avec cette table filtrée sur le prod order NoStéphane
15 novembre 2022 à 10 h 16 min #122428k.musseleckParticipantBonjour Stéphane,
Oui désolé je n’avais pas compris cela ainsi.
Quel serait les codes à mettre en place?
Merci- Cette réponse a été modifiée le il y a 1 année et 10 mois par k.musseleck.
15 novembre 2022 à 21 h 55 min #122446DanielParticipantBonjour k.musseleck, le Forum,
En premier lieu, tu créer les deux étapes comme tu l’as fait (une première source et une seconde navigation)
Ensuite, il faut créer d’autres étapes comme suit :
1 – Sélectionner la colonne Prod Order No, puis aller dans le menu Accueil, choisir Regrouper par et dans la boite de dialogue, nommer la colonne AllRows (par exemple), et choisir comme Opération Toutes les lignes, cliquez sur OK pour valider.
2 – Aller dans le menu Ajouter une colonne, cliquez sur colonne personnalisée et dans la boite de dialogue, donnez comme nom de colonne “Nom Client” et tapez ou copiez ce qui suit dans la partie Formule:
Table.SelectRows(
[AllRows],
(TableNosDonnees) => TableNosDonnees[Line_type] = “Entête production”)[NomClient]
En cliquant dans la partie blanche de la première ligne, vous verrez le résultat de la fonction ci-dessus.
3 – Cliquez sur les deux flèches situées à droite du nom de la colonne (Nom Client) pour développer les données de cette colonne.
4 – Cliquez sur les deux flèches situées à droite du nom de la colonne (AllRows) pour développer les données de cette colonne. Désélectionner les cases Prod_Order no et NomClient sans oublier de décocher la case Utiliser le nom de la colonne d’origine comme préfixe.
5 – Vous devriez obtenir le résultat souhaité.
En espérant vous avoir aidé à résoudre votre problème
Cordialement
Daniel -
AuteurArticles
- Vous devez être connecté pour répondre à ce sujet.