Skip to main content
cancel
Showing results for 
Search instead for 
Did you mean: 

Power BI is turning 10! Let’s celebrate together with dataviz contests, interactive sessions, and giveaways. Register now.

Reply
medmbchr1989
Helper I
Helper I

Keep "Source.name" after expanding Binary

Hi

 

I am working on a data set imported from PDF files from a folder, I keep the "Source name" column which is the name of the file from which I extract the date.

 

However, when I expand "Binary" to read all data, I lose the Source.name column, how can I prevent this? Below some screenshots and my advanced editor code.

 

Any way to keep my source name in the below level of data?

 

medmbchr1989_0-1734422322038.png

 

medmbchr1989_1-1734422353993.png

 

Advanced editor 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 la fonction de transformation 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"}),

    // Accéder au fichier PDF spécifique
    #"C:\Users\moham\talan com\GRP-Zalar Holding - General\3_Données client\Eldin-BMA - Dossier collecte de données client\Données Hors SAP\Banchereau\ETAT DES TOURNEES DU 2024\_13-08-2024 pdf" = #"Colonnes renommées1"{[#"Folder Path"="C:\Users\moham\talan.com\GRP-Zalar Holding - General\3_Données client\Eldin-BMA - Dossier collecte de données client\Données Hors SAP\Banchereau\ETAT DES TOURNEES DU 2024\",Source.Name="13-08-2024.pdf"]}[Content],
    
    // Importer le fichier PDF
    #"PDF importé" = Pdf.Tables(#"C:\Users\moham\talan com\GRP-Zalar Holding - General\3_Données client\Eldin-BMA - Dossier collecte de données client\Données Hors SAP\Banchereau\ETAT DES TOURNEES DU 2024\_13-08-2024 pdf"),

    // Ajouter la colonne Source.Name dans le tableau importé
    #"Ajouté Source.Name dans le tableau" = Table.AddColumn(#"PDF importé", "Source.Name", each [Source.Name]),

    // Filtrer les lignes où "Id" contient "Table"
    #"Lignes filtrées" = Table.SelectRows(#"Ajouté Source.Name dans le tableau", each not Text.Contains([Id], "Table")),
    
    // Développer les colonnes de données
    #"Data développé" = Table.ExpandTableColumn(#"Lignes filtrées", "Data", {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"}, {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6", "Column7"}),    

    // Modifier les types de colonnes, y compris la colonne Source.Name
    #"Type modifié" = Table.TransformColumnTypes(#"Data développé",{{"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 est non null
    #"Lignes filtrées1" = 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ées1", "Personnalisé", each if ([Column2] = null or [Column2] = "") and [Column3] <> null and [Column3] <> "" then [Column1] else null),
    
    // Remplir les valeurs 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
    #"Lignes filtrées3" = Table.SelectRows(#"Personnalisée ajoutée2", each true),
    #"Rempli vers le bas2" = Table.FillDown(#"Lignes filtrées3",{"Personnalisé.1"}),

    // Supprimer les erreurs
    #"Erreurs supprimées" = Table.RemoveRowsWithErrors(#"Rempli vers le bas2", {"Personnalisé.1"}),

    // Modifier le type de la colonne Personnalisé.1
    #"Type modifié1" = Table.TransformColumnTypes(#"Erreurs supprimées",{{"Personnalisé.1", type date}}),

    // Remplacer les valeurs dans les colonnes
    #"Valeur remplacée1" = Table.ReplaceValue(#"Type modifié1",".","",Replacer.ReplaceText,{"Column5", "Column6", "Column8", "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", ",", " "}),
        textCol6 = Text.Remove(Text.From([Column6]), {"0".."9", ",", " "}),
        textCol7 = Text.Remove(Text.From([Column7]), {"0".."9", ",", " "}),
        textCol8 = Text.Remove(Text.From([Column8]), {"0".."9", ",", " "}),
        isNumeric5 = Text.Length(textCol5) = 0 and [Column5] <> null,
        isNumeric6 = Text.Length(textCol6) = 0 and [Column6] <> null,
        isNumeric7 = Text.Length(textCol7) = 0 and [Column7] <> null,
        isNumeric8 = Text.Length(textCol8) = 0 and [Column8] <> null,
        result = if isNumeric5 then [Column5]
                 else if isNumeric6 then [Column6]
                 else if isNumeric7 then [Column7]
                 else if isNumeric8 then [Column8]
                 else null
    in result),

    // 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", ",", " "}),
        textCol6 = Text.Remove(Text.From([Column6]), {"0".."9", ",", " "}),
        textCol7 = Text.Remove(Text.From([Column7]), {"0".."9", ",", " "}),
        textCol8 = Text.Remove(Text.From([Column8]), {"0".."9", ",", " "}),
        isNumeric5 = Text.Length(textCol5) = 0 and [Column5] <> null,
        isNumeric6 = Text.Length(textCol6) = 0 and [Column6] <> null,
        isNumeric7 = Text.Length(textCol7) = 0 and [Column7] <> null,
        isNumeric8 = Text.Length(textCol8) = 0 and [Column8] <> null,
        result = if isNumeric5 then null
                 else if isNumeric6 then [Column5]
                 else if isNumeric7 then Text.Combine({Text.From([Column5]),Text.From([Column6])}," ")
                 else if isNumeric8 then Text.Combine({Text.From([Column5]),Text.From([Column6]),Text.From([Column7])}," ")
                 else null
    in result),

    // 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", ",", " "}),
        textCol6 = Text.Remove(Text.From([Column6]), {"0".."9", ",", " "}),
        textCol7 = Text.Remove(Text.From([Column7]), {"0".."9", ",", " "}),
        textCol8 = Text.Remove(Text.From([Column8]), {"0".."9", ",", " "}),
        isNumeric5 = Text.Length(textCol5) = 0 and [Column5] <> null and Text.Contains(Text.From([Column5]),","),
        isNumeric6 = Text.Length(textCol6) = 0 and [Column6] <> null and Text.Contains(Text.From([Column6]),","),
        isNumeric7 = Text.Length(textCol7) = 0 and [Column7] <> null and Text.Contains(Text.From([Column7]),","),
        isNumeric8 = Text.Length(textCol8) = 0 and [Column8] <> null and Text.Contains(Text.From([Column8]),","),
        result = if isNumeric5 then Text.Combine({Text.From([Column5]), Text.From([Column6]), Text.From([Column7]), Text.From([Column8])}, " ")
                 else if isNumeric6 then Text.Combine({Text.From([Column5]), Text.From([Column6])}, " ")
                 else if isNumeric7 then Text.From([Column5])
                 else null
    in result)
in
    #"Personnalisée ajoutée5"

 

 

 

 

 

1 ACCEPTED SOLUTION

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.

View solution in original post

10 REPLIES 10
v-hashadapu
Community Support
Community Support

Hi @medmbchr1989 , Hope your issue got solved. If it is, Please consider marking the answer 'Accept as solution', so others with similar issues may find it easily. If not, please share the details.

v-hashadapu
Community Support
Community Support

Hi @medmbchr1989 , Just wanted to check if the issue is solved. If not, please share the details, so, that we can work together to solve it. If it is please consider marking the answer 'Accept as Solution', so others with similar queries may find it more easily.

Thank you.

v-hashadapu
Community Support
Community Support

Hi @medmbchr1989 , Can you please confirm if your issue is solved? If not, please share the details. If it is solved, please consider marking it 'Accepted as Solution'.

v-hashadapu
Community Support
Community Support

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.

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.

danextian
Super User
Super User

Hi @medmbchr1989 

 

This specific applies steps drills down into a specific pdf file which makes the other columns disappear

  // Accéder au fichier PDF spécifique
    #"C:\Users\moham\talan com\GRP-Zalar Holding - General\3_Données client\Eldin-BMA - Dossier collecte de données client\Données Hors SAP\Banchereau\ETAT DES TOURNEES DU 2024\_13-08-2024 pdf" = #"Colonnes renommées1"{[#"Folder Path"="C:\Users\moham\talan.com\GRP-Zalar Holding - General\3_Données client\Eldin-BMA - Dossier collecte de données client\Données Hors SAP\Banchereau\ETAT DES TOURNEES DU 2024\",Source.Name="13-08-2024.pdf"]}[Content]

 

Instead, add a custom column that accesses the pdf files. Example:

Pdf.Tables([content])

Expand then column and select only the needed rows. Once the needed rows have been selected, create another custom column which promotes the first row of the tables inside the pdf as the headers. Example:

Table.PromoteHeaders([table column], [PromoteAllScalars = true])

 

PDFs are tricky to work with as the succeeding pages don't usually have the header information. If this the case for you and assuming the first page contains the header,  try:

if [page column] = "page01" //M is case - sensitive
then Table.PromoteHeaders([table column], [PromoteAllScalars = true])
else [table column]

Apply further transformations as necessary.





Dane Belarmino | Microsoft MVP | Proud to be a Super User!

Did I answer your question? Mark my post as a solution!


"Tell me and I’ll forget; show me and I may remember; involve me and I’ll understand."
Need Power BI consultation, get in touch with me on LinkedIn or hire me on UpWork.
Learn with me on YouTube @DAXJutsu or follow my page on Facebook @DAXJutsuPBI.

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

danextian_0-1734425863964.png

danextian_1-1734425872919.png

 





Dane Belarmino | Microsoft MVP | Proud to be a Super User!

Did I answer your question? Mark my post as a solution!


"Tell me and I’ll forget; show me and I may remember; involve me and I’ll understand."
Need Power BI consultation, get in touch with me on LinkedIn or hire me on UpWork.
Learn with me on YouTube @DAXJutsu or follow my page on Facebook @DAXJutsuPBI.

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

Helpful resources

Announcements
Join our Fabric User Panel

Join our Fabric User Panel

This is your chance to engage directly with the engineering team behind Fabric and Power BI. Share your experiences and shape the future.

June 2025 Power BI Update Carousel

Power BI Monthly Update - June 2025

Check out the June 2025 Power BI update to learn about new features.

June 2025 community update carousel

Fabric Community Update - June 2025

Find out what's new and trending in the Fabric community.