Forum Discussion
Keep "Source.name" after expanding Binary
- 1 year ago
Hi ,Thank you for reaching out to Microsoft Fabric Community Forum.
Ensure that the Source.Name column is added before expanding the PDF content. This step is crucial to maintain the relationship between the source file and the extracted data after expansion. After expanding the PDF content, you should ensure the Source.Name column is preserved and added back if necessary.
Here’s a modified version of your query to maintain Source.Name throughout the process:
let// Récupérer les fichiers du dossier
Source = Folder.Files("C:\ETAT DES TOURNEES DU 2024"),
// Filtrer les fichiers cachés
#"Fichiers masqués filtrés1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
// Appeler une fonction personnalisée sur les fichiers
#"Appeler une fonction personnalisée1" = Table.AddColumn(#"Fichiers masqués filtrés1", "Transformer le fichier", each #"Transformer le fichier"([Content])),
// Renommer la colonne Name en Source.Name
#"Colonnes renommées1" = Table.RenameColumns(#"Appeler une fonction personnalisée1", {"Name", "Source.Name"}),
// Ajouter la colonne Source.Name avant d'importer le PDF
#"Ajouté Source.Name dans le tableau" = Table.AddColumn(#"Colonnes renommées1", "Source.Name", each [Source.Name]),
// Accéder aux tables PDF
#"Tables PDF" = Table.AddColumn(#"Ajouté Source.Name dans le tableau", "Tables", each Pdf.Tables([Content])),
// Développer les tables PDF
#"Tables développées" = Table.ExpandTableColumn(#"Tables PDF", "Tables", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"}),
// Ajouter Source.Name à chaque ligne après expansion
#"Source.Name ajouté après expansion" = Table.AddColumn(#"Tables développées", "Source.Name", each [Source.Name]),
// Modifier les types de données pour les colonnes
#"Type modifié" = Table.TransformColumnTypes(#"Source.Name ajouté après expansion",{{"Source.Name", type text}, {"Column1", type text}, {"Column2", type text}, {"Column3", type text}, {"Column4", type text}, {"Column5", type text}, {"Column6", type text}, {"Column7", type text}}),
// Remplir les valeurs vers le bas pour la colonne "Column1"
#"Rempli vers le bas" = Table.FillDown(#"Type modifié",{"Column1"}),
// Filtrer les lignes où Column1 n'est pas null
#"Lignes filtrées" = Table.SelectRows(#"Rempli vers le bas", each ([Column1] <> null)),
// Ajouter la colonne "Personnalisé" en fonction des conditions
#"Personnalisée ajoutée" = Table.AddColumn(#"Lignes filtrées", "Personnalisé", each if ([Column2] = null or [Column2] = "") and [Column3] <> null and [Column3] <> "" then [Column1] else null),
// Remplir vers le bas pour la colonne Personnalisé
#"Rempli vers le bas1" = Table.FillDown(#"Personnalisée ajoutée",{"Personnalisé"}),
// Réorganiser les colonnes
#"Colonnes permutées" = Table.ReorderColumns(#"Rempli vers le bas1",{"Source.Name", "Column1", "Personnalisé", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"}),
// Supprimer la colonne Column2
#"Colonnes supprimées" = Table.RemoveColumns(#"Colonnes permutées",{"Column2"}),
// Ajouter la colonne "A supprimer" en fonction des conditions
#"Personnalisée ajoutée1" = Table.AddColumn(#"Colonnes supprimées", "A supprimer", each if ([Column1] = [Personnalisé]) then "Oui" else "Non"),
// Filtrer les lignes à ne pas supprimer
#"Lignes filtrées2" = Table.SelectRows(#"Personnalisée ajoutée1", each ([A supprimer] = "Non") and ([Column3] <> null) and ([Column4] <> "PROCEDURE DE#(lf)L'ETAT DE TOURNEE")),
// Remplacer les valeurs dans Source.Name
#"Valeur remplacée" = Table.ReplaceValue(#"Lignes filtrées2","-","",Replacer.ReplaceText,{"Source.Name"}),
// Ajouter la colonne Personnalisé.1 pour extraire la date
#"Personnalisée ajoutée2" = Table.AddColumn(#"Valeur remplacée", "Personnalisé.1", each Date.FromText(Text.Select([Source.Name], {"0".."9"} ), [Format="ddMMyyyy", Culture="fr-FR"])),
// Remplir les valeurs vers le bas pour Personnalisé.1
#"Rempli vers le bas2" = Table.FillDown(#"Personnalisée ajoutée2",{"Personnalisé.1"}),
// Supprimer les erreurs
#"Erreurs supprimées" = Table.RemoveRowsWithErrors(#"Rempli vers le bas2", {"Personnalisée ajoutée2"}),
// Modifier le type de la colonne Personnalisé.1
#"Type modifié1" = Table.TransformColumnTypes(#"Erreurs supprimées",{{"Personnalisée.1", type date}}),
// Remplacer les valeurs dans les colonnes
#"Valeur remplacée1" = Table.ReplaceValue(#"Type modifié1",".","",Replacer.ReplaceText,{"Column5", "Column6", "Column7"}),
// Ajouter la colonne "Tonnage" selon des conditions spécifiques
#"Personnalisée ajoutée3" = Table.AddColumn(#"Valeur remplacée1", "Tonnage", each let
textCol5 = Text.Remove(Text.From([Column5]), {"0".."9", ",", " "})),
// Ajouter la colonne "Suite client"
#"Personnalisée ajoutée4" = Table.AddColumn(#"Personnalisée ajoutée3", "Suite client", each let
textCol5 = Text.Remove(Text.From([Column5]), {"0".."9", ",", " "})),
// Ajouter la colonne "Commentaire"
#"Personnalisée ajoutée5" = Table.AddColumn(#"Personnalisée ajoutée4", "Commentaire", each let
textCol5 = Text.Remove(Text.From([Column5]), {"0".."9", ",", " "}))
in
#"Personnalisée ajoutée5"
If this helps, please mark it ‘Accept as Solution’, so others with similar queries may find it more easily. If not, please share the details.
Hi danextian
I have Pages and Tables in my data, but filtering on Pages only which Pdf.tables can't read
Per testing, Power Query can see both kinds
- medmbchr19891 year ago
Helper I
Alright, I have tried another approach by editing the custom function that calls the data, however it gives me only the first page of my pdfs