Forum Discussion
Power Query Editor Transform file helper Query folders
Folder listing:
Let's collect all ExecutionAggregation files
Click the first Binary link. That ingests the CSV and already promotes the headers
We can simplify this to
Table.PromoteHeaders(Csv.Document(Binary), [PromoteAllScalars=true])
and stuff that into a function.
let
Source = Folder.Files(Folder),
#"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Name], "ExecutionAggregation")),
Ingest = (Binary)=> Table.PromoteHeaders(Csv.Document(Binary), [PromoteAllScalars=true])
in
#"Filtered Rows"
Now we add a custom column that ingests each file
let
Source = Folder.Files(Folder),
#"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Name], "ExecutionAggregation")),
Ingest = (Binary)=> Table.PromoteHeaders(Csv.Document(Binary), [PromoteAllScalars=true]),
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each Ingest([Content]))
in
#"Added Custom"
Then we can throw away all the meta data columns we don't need any more
And lastly we expand the Custom column to append all file contents.
That's it. Here is the entire code:
let
Source = Folder.Files(Folder),
#"Filtered Rows" = Table.SelectRows(Source, each Text.Contains([Name], "ExecutionAggregation")),
Ingest = (Binary)=> Table.PromoteHeaders(Csv.Document(Binary), [PromoteAllScalars=true]),
#"Added Custom" = Table.AddColumn(#"Filtered Rows", "Custom", each Ingest([Content])),
#"Removed Other Columns" = Table.SelectColumns(#"Added Custom",{"Name", "Custom"}),
#"Expanded Custom" = Table.ExpandTableColumn(#"Removed Other Columns", "Custom", {"GatewayObjectId", "AggregationStartTimeUTC", "AggregationEndTimeUTC", "DataSource", "Success", "AverageQueryExecutionDuration(ms)", "MaxQueryExecutionDuration(ms)", "MinQueryExecutionDuration(ms)", "QueryType", "AverageDataProcessingDuration(ms)", "MaxDataProcessingDuration(ms)", "MinDataProcessingDuration(ms)", "Count"})
in
#"Expanded Custom"
and stuff that into a function.
this is confusing me. i dont know what this part means. I know I can click a Query and Create function but I dont know how this all works with the given logic unfortunately
Im starting to wonder if this isnt too big and complex a job because I have a lot of queries to change
- lbendlin3 years agoSuper User
Ingest = (Binary)=> Table.PromoteHeaders(Csv.Document(Binary), [PromoteAllScalars=true])As you know each step in Power Query has a name. You can refer to the step in subsequent steps by using that name.
Here we create a step that is arbitrarily called "Ingest". Then we provide an argument (Binary) which transforms that step to a function. "=>" completes the function header. After that you can have any number of steps that can eventually return someting. In this case what is returned is the CSV interpretation of the function argument, with the headers already promoted. We need the headers later so we can then combine/append the results correctly.
Instead of nesting the instructions you can go through the whole let ... in ... syntax if that's more relatable. And you can also place the function outside this code. There are many ways to do this, and ultimately it is down to personal preference.
- DebbieE3 years agoCommunity Champion
I will try and read through it all again but I fear Im not understanding this. Thats for trying though.
- DebbieE3 years agoCommunity Champion
Unfortunately this is not working for me
"Click the first Binary link. That ingests the CSV
and already promotes the headers"
It doesnt do this. You have to click the arrows on the data column to bring through the data atfter clicking on Binary. And you have to do the column promotion youself.
the other thing it doesnt bring through because you are clicking on one file only is the actual file name.
Has anyone got another option I can use that will bring through the filr name. Which is what happens when you filter for the foles and then click on content to bring both files through?
- lbendlin3 years agoSuper User
Please provide a couple of sample CSV files (with the same structure).