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 medmbchr1989 ,Thank you for reaching out to Microsoft Fabric Community Forum.
Please try this:
Before expanding the table from the PDF, add a new column that stores the value of Source.Name. This way, when the table is expanded, the value is already attached to each row. Once you add the "Source.Name" column, you can expand the PDF data, and the column will be carried along with the expanded data.
Modified code:
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"}),
// Importer le fichier PDF
#"PDF importé" = Table.AddColumn(#"Colonnes renommées1", "Source.Name", each [Source.Name]),
// Accéder aux tables PDF
#"Tables PDF" = Table.AddColumn(#"PDF importé", "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"}),
// Modifier le type de données pour les colonnes
#"Type modifié" = Table.TransformColumnTypes(#"Tables développées",{{"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 v-hashadapu
When i expand my data with the Binary column, the previous table is lost and can't retrieve anything from it.
- v-hashadapu1 year ago
Community Support
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.