Construire une table à partir d’autres tables

Accueil – Le CFO masqué Forums Power BI Construire une table à partir d’autres tables

  • This topic has 1 réponse, 2 participants, and was last updated il y a 3 years by Daniel.
2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Articles
  • #99148
    fabien
    Participant

    Bonjour,

    Débutant sur power bi, je viens vers vous avec une problématique de construction d’une nouvelle table à partir d’autres tables.

    J’ai mis un schéma en pièce jointe.

    Je dispose de 3 tables de données qui correspondent à mon flux:
    – étape 1: des prospects demandent des infos sur un ou plusieurs produits (=table demande info internet)
    – étape 2: certains de ces prospects demandent un devis avec un ou plusieurs produits suite à un échange avec un commercial (ce sont pas forcément les mêmes produits que leur demande initiale) (= table devis)
    – étape 3: certains des prospects ayant demandé un devis vont passer commande (il peut encore y avoir un décalage de produits entre le devis et la commande) (=table commande)

    Ce dont j’ai besoin, c’est de reconstruire une table prospect/produit, à l’inverse de mon flux, qui prend:
    – les infos de la table commande s’il y a eu une commande
    SINON:
    – les infos de la table devis s’il y a eu un devis
    SINON:
    – les infos de la table demande info internet.

    Je vois bien comment faire ce genre de chose en programmation, mais avec Power BI, je ne sais pas quelle est la meilleure approche pour obtenir ce résultat.

    merci de votre aide.

    Attachments:
    You must be logged in to view attached files.
    #99184
    Daniel
    Participant

    Bonjour Fabien, Le Forum,

    Voilà ce que je propose comme solution
    1 – Création d’une requête par source de données (Internet, Devis, Commande). Dans chaque requête, ajouter une colonne Origine info ayant pour valeur Internet ou Devis ou Commande en fonction de la source de données.

    let
        Source = Excel.CurrentWorkbook(){[Name="tDevis"]}[Content],
        AjoutColonneOrigineInfo = Table.AddColumn(Source, "Origine info", each "Devis"),
        ModificationTypeDonnees = Table.TransformColumnTypes(AjoutColonneOrigineInfo,{{"Prospect", type text}, {"Produit", type text}, {"Origine info", type text}})
    in
        ModificationTypeDonnees

    2 – Menu Accueil, ajouter des requêtes, ajouter les requêtes comme étant nouvelles et choisir les trois requêtes créées précédemment.
    3 – Sur la nouvelle requête, cliquer sur les colonnes Prospect et Produit en garant la touche Ctrl appuyée et dans le menu Transformer cliquez sur Regrouper par. Dans la fenêtre, donner un nom à la colonne et choisir comme Opération, Toutes les lignes, cela va créer une nouvelle colonne sous forme de table, en cliquant sur une ligne dans la zone blanche on peut voir en bas de l’écran, les différentes valeurs.
    4 – C’est là que cela se complique un peu, vous devez avoir dans la barre de formule, la formule de regroupement que nous allons modifier
    Table.Group(Source, {"Prospect", "Produit"}, {{"Nombre", each _, type table [Prospect=nullable text, Produit=nullable text, Origine info=nullable text]}}) doit devenir = Table.Group(#"Lignes groupées", {"Prospect", "Produit"}, {{"Origine", each Text.Combine([Origine info],", ")}})
    La table est devenue une colonne reprenant les différentes occurrences pour chaque couple Prospect/Produit.
    5 – J’ai préféré garder cette colonne comme telle et en la dupliquant on va pouvoir extraire la dernière occurrence ce qui devrait répondre à votre demande. Cliquez sur la colonne Origine et avec le clic droit choisir Duplication de la colonne
    6 – Cliquez sur la nouvelle colonne, par le menu Transformer et l’option Extraire, texte après le délimiteur, vous allez saisir le délimiteur séparant chaque occurrence (dans mon exemple c’est la virgule) et choisir Options avancées A partir de la fin de l’entrée, vous obtiendrez la dernière occurrence (exemple : Internet, Devis, Commande donnera Commande)
    = Table.TransformColumns(DuplicationColonneOrigine, {{"Origine - Copier", each (Text.AfterDelimiter(_, <strong>", "</strong>, {0, RelativePosition.FromEnd})), type text}})

    Voici le code de la requête :

    let
        Source = Table.Combine({tInternet, tDevis, tCommandes}),
        GrouperLesLignes = Table.Group(Source, {"Prospect", "Produit"}, {{"Origine", each Text.Combine([Origine info],", ")}}),
        DuplicationColonneOrigine = Table.DuplicateColumn(GrouperLesLignes, "Origine", "Origine - Copier"),
        GarderDernièreOccurence = Table.TransformColumns(DuplicationColonneOrigine, {{"Origine - Copier", each (Text.AfterDelimiter(_, ", ", {0, RelativePosition.FromEnd})), type text}}),
        RenommerColonnes = Table.RenameColumns(GarderDernièreOccurence,{{"Origine - Copier", "Origine info"}})
    in
        RenommerColonnes

    Il y a certainement d’autres solutions, mais j’espère vous avoir apporté une solution ou à tout le moins une piste afin de résoudre votre demande
    Cordialement
    Daniel

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