Power BI : lister éléments d'une table et d'une autre
Bonjour à tous,
Avec Power BI je cherche à faire un visuel dans le lequel apparaissent tous les codes présents à deux dates définies par l'utilisateur. Jusque là rien de transcendant, seulement tous les codes sont dans une seule et unique table, du coup je ne vois pas trop comment je peux faire.
Je vous joins un exemple pour un peu comprendre : dedans j'ai mis
- 2 segments pour choisir les dates
- 2 tables contenant chacune les codes à une des deux dates
Le but est d'avoir une table unique dans laquelle apparaissent les codes communs.
Par la suite il faudra aussi que je récupère ceux présents uniquement dans la table 1 et ceux présents uniquement dans la table 2, mais je pense qu'avec un coup de pouce pour l'union je devrais pouvoir réussir l'autre sens.
Merci d'avance pour votre aide,
Nicolas
Petite relance, si quelqu'un a un éclair de génie :)
Pour le moment je récupère les dates d'entrée et de sortie dans des mesures et l'idée serait de créer un segment avec les dates possibles sous forme de liste où, si la date choisie est entre les dates d'entrée et de sortie alors on affiche la ligne correspondante. Est-ce que ce serait possible ?
Cordialement,
Nicolas
Bonjour
Peu de personnes utilisent PBI nécessaire pour ouvrir ton fichier
Peux-tu joindre un Excel ?
Bonjour Chris,
Merci pour ta réponse, le souci c'est que l'importation des fichiers se fait automatiquement depuis un dossier complet, du coup je ne peux pas passer par Excel pour modifier quelque chose avant, si toutefois ça peut t'aider voici un fichier Excel avec les données en entrées et ce que je voudrais afficher.
Nicolas
RE
Tu n'affiches qu'une quantité mais elles diffèrent entre début et fin pour certains codes et tu sembles du coup comparer Code+Qté pour la présence
C'est volontaire, le but est pour voir ce qui a été ajouté/supprimé/n'a pas bougé entre les 2 dates.
Bonjour,
Un créant 1 table filtrée au 01/01 et 1 autre table filtrée au 08/01, je pense que tu peux avec Power Query et en jouant avec les jointures de table voir les différences entre les 2 tables. Si j'ai bien compris.
Je regarde ce soir si personne n'est passé avant moi d'ici là
RE
C'est volontaire, le but est pour voir ce qui a été ajouté/supprimé/n'a pas bougé entre les 2 dates.
Oui mais on retrouve de ce fait les codes 2 et 4 à 2 endroits donc pas très clair
Il me paraitrait plus logique d'afficher les valeurs début et fin des Codes présents aux 2 dates et seulement les codes n'apparaissant qu'a une date dans chacun des 2 autres
RE,
Ci-joint un exemple ?
Je n'ai pas affiché le premier tableau car il y a une incohérence des le tableau du résultat voulu.
Tout dépend de quelle Qté tu veux afficher : est-ce que tu veux afficher les Qté des dates les plus anciennes ou les plus récentes ?
Re,
Merci pour votre aide et désolé de ne pas avoir répondu hier (manque de temps), mais vous contournez le problème :
78Chris a écrit :
Il me paraitrait plus logique d'afficher les valeurs début et fin des Codes présents aux 2 dates et seulement les codes n'apparaissant qu'a une date dans chacun des 2 autres
Je n'ai pas la main sur les fichiers Excels, donc je ne peux pas modifier la colonnes des quantités pour avoir une colonne début et une colonne fin. Par ailleurs dans l'exemple je n'ai mis que 2 dates mais il y aura un nouveau fichier par semaine, et chaque fichier doit pouvoir être comparé avec les autres
JB_ a écrit :
Un créant 1 table filtrée au 01/01 et 1 autre table filtrée au 08/01, je pense que tu peux avec Power Query et en jouant avec les jointures de table voir les différences entre les 2 tables. Si j'ai bien compris.
C'est exactement ça ! Le but c'est de pouvoir sélectionner 2 dates et de pouvoir voir ce qui a bougé ou pas. Mais l'objectif premier reste de faire les filtres sous Power BI, je ne serai pas amené à utiliser Excel pour cette tâche (sinon ça irait certainement). Après, Power Query est aussi intégré à PBI, est-ce que c'est possible de lui dire d'utiliser un segment pour créer la table ?
J'ai conscience de vous poser une colle à vouloir utiliser PBI mais c'est pas moi qui décide. Merci en tout cas pour le temps que vous m'avez déjà accordé !
Nicolas
Bonjour
Décidément on a du mal à se comprendre...
78Chris a écrit :Il me paraitrait plus logique d'afficher les valeurs début et fin des Codes présents aux 2 dates et seulement les codes n'apparaissant qu'a une date dans chacun des 2 autres
Je n'ai pas la main sur les fichiers Excels, donc je ne peux pas modifier la colonnes des quantités pour avoir une colonne début et une colonne fin. Par ailleurs dans l'exemple je n'ai mis que 2 dates mais il y aura un nouveau fichier par semaine, et chaque fichier doit pouvoir être comparé avec les autres
Je n'ai jamais proposé de modifié la source mais de restituer sous cette forme !
Une requête PowerQuery est une requête PoOwerQuery donc identique dans Excel ou BI
Si tu veux filtrer des dates en amont de la requête, la différence porte peut-être davantage sur la sélection.
Dans Excel un segment filtre la source mais n'a pas d'incidence dans PowerQuery.
Le plus simple est d'utiliser une table annexe avec une colonne Date début, Date fin pour qu'elle soit utilisée par les requêtes.
Tu parles de plusieurs fichiers mais il n'y a qu'un table : tu fais du copier coller dans la même table ?
Il n'y a qu'une seule table parce que j'importe via Power Query un dossier complet, si ça peut aider voila les différentes étapes générées automatiquement :
= Folder.Files("R:\Rapports_hebdo")
= Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true)
= Table.AddColumn(#"Fichiers masqués filtrés1", "Transformer le fichier (3)", each #"Transformer le fichier (3)"([Content]))
= Table.RenameColumns(#"Appeler une fonction personnalisée1", {"Name", "Source.Name"})
= Table.SelectColumns(#"Colonnes renommées1", {"Source.Name", "Transformer le fichier (3)"})
= Table.ExpandTableColumn(#"Autres colonnes supprimées1", "Transformer le fichier (3)", Table.ColumnNames(#"Transformer le fichier (3)"(#"Exemple de fichier (3)")))
= Table.TransformColumnTypes(#"Colonne de tables développée1",{{"Source.Name", type text}, {"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type any}, {"Column5", type text}, {"Column6", type text}, {"Column7", type any}, {"Column8", type text}, {"Column9", type text}, {"Column10", type any}, {"Column11", type any}, {"Column12", type any}, {"Column13", type any}, {"Column14", type any}, {"Column15", type any}, {"Column16", type any}, {"Column17", type any}, {"Column18", type any}, {"Column19", type any}, {"Column20", type any}, {"Column21", type any}, {"Column22", type any}, {"Column23", type any}, {"Column24", type any}, {"Column25", type any}, {"Column26", type any}, {"Column27", type any}, {"Column28", type any}, {"Column29", type text}, {"Column30", type text}, {"Column31", type any}, {"Column32", type any}, {"Column33", type any}, {"Column34", type any}, {"Column35", type any}, {"Column36", type any}, {"Column37", type any}, {"Column38", type any}, {"Column39", type text}, {"Column40", type any}, {"Column41", type any}, {"Column42", type any}})Et voila les étapes que j'ajoute manuellement :
= Table.SelectRows(#"Type modifié", each ([Column8] <> null)) 'Pour supprimer les lignes de résumé des feuilles
= Table.RemoveColumns(#"Lignes filtrées",{"Column40", "Column41", "Column42"}) 'Pour supprimer les colonnes vides
= Table.PromoteHeaders(#"Colonnes supprimées1", [PromoteAllScalars=true])
= Table.SelectRows(#"Colonnes supprimées1", each ([POSITION_TYPE] <> "POSITION_TYPE")) 'Pour supprimer les lignes correspondant aux en-têtes des autres fichiersJ'ai déjà pensé faire une table par date avec filter(), mais :
- On perd la possibilité d'utiliser des segments pour choisir la date
- Ça obligerait à créer une nouvelle table par semaine, ce qui peut vite être long et fastidieux
RE
Une unique table de paramètres (début, fin) suffit : pour choisir les dates de la restitution, pas une par semaine où alors tu ne dis pas tout...
Comme déjà dit j'ignore si les segments sont utilisables dans Power BI par PQ mais dans Excel un segment de tableau filtre le tableau, point barre.
Dans Excel pour des cas comme cela on peut tricher avec un TCD contenant un unique champ date bâti sur les dates des données importées, un segment basé dessus, une plage nommée qui transmet l'info à PQ et une ligne de VBA qui réagit à l'update de ce TCD.
Bonjour à tous,
Est-ce que dans la table source il ne peut y avoir que 2 dates différentes ? (données départ - données arrivée)
Le fait d'avoir chaque semaine un nouveau tableau me parait aussi compliqué... Ou alors il faudrait combiner à chaque fois pour n'avoir qu'une seule table... Je suis un peu perplexe....
De toute évidence je cherche à faire quelques de trop compliqué, j'y reviendrais peut-être plus tard, à tête reposé.
Merci en tout cas pour le temps que vous y avez passé !
Bonjour !
J'ai repris le problème à tête reposé et j'ai fini par trouver la solution ! Je poste ici la procédure utilisée, si jamais ça peut aider quelqu'un un jour :)
Pour commencer j'ai créé une table "Calendrier" qui contient, attention suspense, des dates ainsi qu'une colonne "Visible" qui est égal à 1 si la date associée est inférieur à la date du dernier rapport disponible et 0 sinon. Une fois la table créée on la relie à la colonne de date du tableau. Sur PBI maintenant on créé un segment sur la colonne des dates du calendrier avec pour filtre "Visible=1".
Passons maintenant aux mesures pour avoir les quantités :
Présent début et fin = IF(MIN('Rapports semaine'[Date])<>MAX('Rapports semaine'[Date]),MIN(SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date]))),SUMX('Rapports semaine',[QUANTITE]*([Date]=MAX('Rapports semaine'[Date])))),0)
Compare date = CALCULATE(AVERAGE('Calendrier'[Date]),'Calendrier'[Visible]=1)
Uniquement début = IF(SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date])))>SUMX('Rapports semaine',[QUANTITE]*([Date]=MAX('Rapports semaine'[Date]))),SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date])))-SUMX('Rapports semaine',[QUANTITE]*([Date]=MAX('Rapports semaine'[Date]))),IF(AND(MIN('Rapports semaine'[Date])=MAX('Rapports semaine'[Date]),MIN('Rapports semaine'[Date])<[Compare date]),SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date]))),0))
Uniquement fin = IF(SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date])))<SUMX('Rapports semaine',[QUANTITE]*([Date]=MAX('Rapports semaine'[Date]))),SUMX('Rapports semaine',[QUANTITE]*([Date]=MAX('Rapports semaine'[Date])))-SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date]))),IF(AND(MIN('Rapports semaine'[Date])=MAX('Rapports semaine'[Date]),MIN('Rapports semaine'[Date])>[Compare date]),SUMX('Rapports semaine',[QUANTITE]*([Date]=MIN('Rapports semaine'[Date]))),0))Petite explication : pour les éléments n'ayant aucun stock à l'une des deux dates on aura MIN(date)=MAX(date), c'est pourquoi on créé la mesure "compare date" qui permet de définir si la date est celle de début ou de fin
On termine en créant trois tableaux contenant nos éléments et une des trois mesures, avec un filtre du type "nom_de_la_mesure n'est pas 0".