Conserver la valeur de la dernière ligne

Accueil – Le CFO masqué Forums Power BI Conserver la valeur de la dernière ligne

  • Ce sujet contient 13 réponses, 4 participants et a été mis à jour pour la dernière fois par Fabrice Martin, le il y a 1 année et 4 mois.
14 sujets de 1 à 14 (sur un total de 14)
  • Auteur
    Articles
  • #123707
    Fabrice Martin
    Participant

    Bonjour,

    Très récent utilisateur de Power BI je me retrouve bloqué sur un pb qui parait simple mais dont je ne me sors pas.
    En effet, j’essai de trouver une solution pour que la dernière valeur existante (Cours Quotidien) pour une date soit conservée pour la date suivante puisque pas de valeur “native”, pas possible de fusionner les tables car les dates sans valeurs associées proviennent de la table auto créé en DAX et donc pas accessible dans Power Query.

    En plus d’afficher ces données je voudrais également pouvoir m’en servir d’en d’autres calculs.

    J’ai essayer de manipuler LASTNONBLANK dans tous les sens mais impossible d’obtenir mon résultat.

    Je vous joins mon fichier PBX simplifié ainsi qu’un Excel.

    Merci par avance pour votre aide !
    NB : c’est ma 1ere demande d’aide sur Forum j’espère qu’elle est correctement formulée. 🙂

    Attachments:
    You must be logged in to view attached files.
    #123712
    konanothnielr1
    Participant

    L’expression de ton besoins est un peu confus pour moi par endroits ensuite selon tes sources il manque un fichier : Table Code ISIN.xlsx à moins qu’on est pas besoin de cette table pour travailler.

    J’attends donc confirmation avant de réfléchir sur ton problème.

    Bien à toi !

    #123713
    Fabrice Martin
    Participant

    Hello,

    Merci pour la prise en main de mon pb.

    En effet pas besoin d’avoir la source initiale de la table ISIN c’est juste la dimension client pas besoin d’update.

    Je tente une reformulation pour essayer de rendre plus clair mon pb :

    J’ai une table avec des dates et des valeurs (Table cours quotidien), les dates ne sont pas ttes présentes car weekend et certain jours fériés abscent.
    Ma table de date (calendrier) que j’ai créé en Dax elle par définition contient ttes les dates possibles et c’est bien mon besoin.
    Donc qd je créé un tableau avec mes dates en provenance du calendrier et les valeurs de la mesure “Cours quotidien” qui représente la somme du champ “Dernier Cours” et que je demande d’afficher ttes les dates (y compris sans valeur) j’ai donc logiquement des vides dans la colonne de la mesure sur les dates de weekend et fériés.
    Et moi je voudrais qu’a la place de ces vides le tableau affiche la dernière valeur connue (celle du vendredi dans mon exemple de weekend mais ca pourrait être un autre jour avec un férié) .
    De plus cette valeur je voudrais pouvoir m’en servir pour d’autre calcul bien sur.

    Voila j’espère que c’est un peu plus clair même si un peu long 🙂

    #123781
    Olivier Cucuat
    Participant

    Bonjour Fabrice,

    Il me semble que la méthode la plus adaptée à votre besoin serait d’utiliser “Remplir vers le bas” dans Power Query.
    Le premier prérequis est de trier chronologiquement les dates de votre table où sont les cours quotidiens.

    Puis sous Query, vous sélectionnez la colonne où se trouvent les cours. Vous faites un clic droit sur l’en-tête de colonne puis “remplir” > “vers le bas”.

    Comment cette fonction opère : L’opération de remplissage prend une colonne et traverse les valeurs qu’elle contient pour remplir toutes les valeurs null / vides dans les lignes suivantes jusqu’à ce qu’elle trouve une nouvelle valeur.

    Exemple : Vous avez une valeur de cours jusqu’au jeudi, si le vendredi est férié vous n’avez rien. “Remplir vers le bas” va répliquer la valeur du jeudi sur le vendredi. Dès qu’une nouvelle valeur est détectée, par exemple du lundi au vendredi, la fonction va passer dessus et garder en mémoire celle du vendredi pour la renseigner sur samedi et dimanche qui sont vides, etc …

    J’espère que cela répondra à votre besoin

    Bonne journée

    Olivier

    #123782
    Fabrice Martin
    Participant

    Bonjour,

    Merci pour cet élément de réponse mais malheureusement c’est bien ce qui me paraissait la plus simple mais la table de date (Calendrier) faisant référence étant créé en DAX elle n’est pas disponible (en tout cas je ne la vois pas) coté Power Query je ne peux donc pas appliqué cette solution.

    #123783
    Olivier Cucuat
    Participant

    Mais vous devez avoir des dates dans votre table de cours sinon comment liez-vous votre table calendrier à votre table cours ?

    #123784
    Fabrice Martin
    Participant

    Oui il y a bien des dates dans la table de cours et j’ai une valeur “Dernier Cours” pour chaque date donc pas possible (enfin pas utile) de faire un recopie vers le bas, par contre elles ne sont pas ttes présentes (weekend et jours fériés).

    Table Cours[Date] Table Cours[Dernier Cours]
    06/01/2022 101
    07/01/2022 102
    10/01/2022 103

    Le lien entre la table Calendrier et la table des cours est fait par une relation sur le champ date des 2 tables cela donne le tableau ci-dessous une fois qu’on affiche les valeurs dans un tableau (et que l’on active les dates sans valeur) :

    Table Calendrier[Date] Table Cours[Dernier Cours]
    06/01/2022 101
    07/01/2022 102
    08/01/2022 Vide
    09/01/2022 Vide
    10/01/2022 103

    Moi je voudrais que les 2 vides soit remplacé par la valeur 102

    #123786
    Olivier Cucuat
    Participant

    Merci Fabrice, je comprends mieux.
    Dans ce cas, vous pouvez fusionner vos tables dates et cours sur le champ date depuis la table calendrier, comme une nouvelle requête.
    Vous nommez cette nouvelle table comme vous le souhaitez, vous ne gardez que les colonnes qui vous servent (Dans mon exemple date et dernier cours), puis vous remplissez vers le bas sur la colonne dernier cours.

    Voir en pièce-jointe

    Olivier

    Attachments:
    You must be logged in to view attached files.
    #123799
    Fabrice Martin
    Participant

    Je suis désolé mais Il doit me manquer un élément de compréhension ou de connaissance car pour moi la fusion c’est uniquement dans power query et ma table date n’existe pas dans power query.

    Donc
    soit on peut fusionner dans Power BI mais je ne connais pas la fonction (la fct UNION oblige à avoir des tables identiques en nb de colonne)

    Soit on peut faire apparaitre la table date crée dans power BI dans Power Query mais je ne sais pas comment.

    Soit on crée la table des dates dans Power Query mais idem je sais pas trop comment et si c’est une bonne pratique.

    Merci pour votre support 🙂

    #123908
    Xavier Allart
    Participant

    Bonjour
    Si c’est possible je vous propose de remplacer la table « calendrier » DAX, par une table « calendrier » automatique en query, puis de la fusionner avec votre table « Table Cours Quotidien» et de remplir vers le bas les valeurs manquantes.
    En Power query,
    Pour l’exemple je renomme la requête « Table Cours Quotidien » en « Cours »
    • Créer une requête vide et de saisir la formule = List.Min(Cours[Date])
    • Convertir en table
    • Renommer « Column1» en « Debut »
    • Ajouter une colonne personnalisée « Fin » = List.Max(Cours[Date])
    • Ajouter une colonne personnalisée « Date » = {Number.From([Debut])..Number.From([Fin])}
    • Développer la colonne « Date »
    • Modifier son type en Date
    • Supprimer les colonnes « Debut » et « Fin »
    • Fusionner avec la table « Cours » sur les champs « dates »
    • Développer la nouvelle colonne
    • Remplir vers le bas

    Code éditeur avancé:
    let
    Source = List.Min(Cours[Date]),
    #”Converti en table” = #table(1, {{Source}}),
    #”Colonnes renommées” = Table.RenameColumns(#”Converti en table”,{{“Column1”, “Debut”}}),
    #”Personnalisée ajoutée” = Table.AddColumn(#”Colonnes renommées”, “Fin”, each List.Max(Cours[Date])),
    #”Personnalisée ajoutée1″ = Table.AddColumn(#”Personnalisée ajoutée”, “Date”, each {Number.From([Debut])..Number.From([Fin])}),
    #”Date développé” = Table.ExpandListColumn(#”Personnalisée ajoutée1″, “Date”),
    #”Type modifié” = Table.TransformColumnTypes(#”Date développé”,{{“Date”, type date}}),
    #”Colonnes supprimées” = Table.RemoveColumns(#”Type modifié”,{“Debut”, “Fin”}),
    #”Requêtes fusionnées” = Table.NestedJoin(#”Colonnes supprimées”, {“Date”}, Cours, {“Date”}, “Cours”, JoinKind.LeftOuter),
    #”Cours développé” = Table.ExpandTableColumn(#”Requêtes fusionnées”, “Cours”, {“Cours Quotidien”}, {“Cours”}),
    #”Rempli vers le bas” = Table.FillDown(#”Cours développé”,{“Cours”})
    in
    #”Rempli vers le bas”

    Cordialement

    #123909
    Fabrice Martin
    Participant

    Hello

    Top c’est bien l’élément qui me manquait, la création de la table Calendrier dans Power Query.

    Un grand merci à vous tous je vais pouvoir résoudre mon pb.

    #123910
    Fabrice Martin
    Participant

    ha mince j’ai crié victoire trop vite, car une fois la fusion effectuée, ttes les combinaisons ne sont pas présentes.

    En effet pour 1 même date j’ai 123 code ISIN or avec cette méthode pour chaque date manquante je me retrouve avec un vide sur la valeur mais aussi sur le code ISIN donc j’aurai un pb dans Power BI pour obtenir ce que je veux.

    Désolé c’est peut être mon exemple simplifié pour faire comprendre le concept amené en cours de discussion qui à biaisé le pb mais j’ai bien une dimension additionnelle entre la date et la valeur qui doit “suivre” cette logique.

    J’ai mis un snapshot ou l’on visualise bien le pb je pense.

    Attachments:
    You must be logged in to view attached files.
    #123921
    Xavier Allart
    Participant

    Bonjour

    C’est sur, sans la table de references, c’est plus compliqué de tout comprendre. Je propose donce cette nouvelle version :
    Au lieu de commencer avec une requête vide, on peut commencer avec une table d’une seule colonne contenant la liste des 123 code ISIN nommée “ISDN”
    • Ajouter une colonne personnalisée « Debut » = List.Min(Cours[Date])
    • Ajouter une colonne personnalisée « Fin » = List.Max(Cours[Date])
    • Ajouter une colonne personnalisée « Date » = {Number.From([Debut])..Number.From([Fin])}
    • Développer la colonne « Date »
    • Modifier son type en Date
    • Fusionner avec la table « Cours » sur les champs « dates » et « ISDN »
    • Développer la nouvelle colonne
    • Ajouter une colonne personnalisée « iD » = [#”ISIN “]&” “&Text.From([Date])
    • Trier la table sur cette colonne
    • Remplir vers le bas
    • Supprimer les colonnes « Début », « fin » et « iD »

    #123929
    Fabrice Martin
    Participant

    Désolé pour l’explication en 2 tps, mais cela n’aura pas été vain ta solution fonctionne parfaitement.

    Merci à tous pour votre aide j’ai obtenu le résultat escompté et appris pas mal de chose par la même occasion.

    J’espère que d’ici qq tps je serais également en mesure d’aider d’autres personnes !

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