Remplir vers le bas dans certains cas

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 5 mois.
15 sujets de 1 à 15 (sur un total de 17)
  • Auteur
    Articles
  • #122229
    k.musseleck
    Participant

    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.
    #122282
    Daniel
    Participant

    Bonjour 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
    Daniel

    #122285
    k.musseleck
    Participant

    Bonjour,

    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.

    #122289
    Daniel
    Participant

    Bonjour 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
    Daniel

    #122290
    Daniel
    Participant

    Bonjour k.musseleck, le Forum,
    Juste oublié de joindre le fichier excel contenant les deux requêtes, désolé.
    Cordialement
    Daniel

    Attachments:
    You must be logged in to view attached files.
    #122307
    Stéphane Lorin
    Participant

    Bonjour

    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

    #122309
    k.musseleck
    Participant

    Bonjour,

    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.

    #122313
    Daniel
    Participant

    Bonjour 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
    Daniel

    #122344
    k.musseleck
    Participant

    Bonjour,
    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
    ColonneNomClient

    Est ce bien cela?

    • Cette réponse a été modifiée le il y a 1 année et 5 mois par k.musseleck.
    #122347
    Daniel
    Participant

    Bonjour 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
    Daniel

    #122421
    k.musseleck
    Participant

    Bonjour,
    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
    ColonneNomClient

    Cela me renvoi l’erreur:
    ” Expression.syntaxerror:Jeton Eof attendu”

    #122425
    k.musseleck
    Participant

    Bonjour,

    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?

    #122426
    Stéphane Lorin
    Participant

    Bonjour
    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 No

    Stéphane

    #122428
    k.musseleck
    Participant

    Bonjour 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 5 mois par k.musseleck.
    #122446
    Daniel
    Participant

    Bonjour 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

15 sujets de 1 à 15 (sur un total de 17)
  • Vous devez être connecté pour répondre à ce sujet.