The ultimate Microsoft Fabric, Power BI, Azure AI, and SQL learning event: Join us in Stockholm, September 24-27, 2024.
Save €200 with code MSCUST on top of early bird pricing!
Find everything you need to get certified on Fabric—skills challenges, live sessions, exam prep, role guidance, and more. Get started
Hello, I have folder in sharepoint with many files updated daily.
I need only csv starting with ABC and having date in the end (_YYYYMMDD.csv)
In addition to that if I have _20210115.csv and _20210116.csv I will take only 20210116 because it contains data for previous days.
However If I have 20210131.csv and 20210201.csv - I will take both, and I will always keep the file for the end of each month for all years.
So I need a code in M (advanced editor).
Thank you for any advice
Solved! Go to Solution.
Hi @Anonymous
@AlexisOlson 's solution is great. Have you tried that?
I'd just like to make some complement on his solution per your need. The complement are:
1. Add a step to filter out rows with errors after extracting date values. File names that don't end with (_YYYYMMDD.csv) have these errors.
2. Add a step to filter out rows that don't start with "ABC".
Here are the full codes.
let
Source = SharePoint.Files("https://xxxxxxxxxx.sharepoint.com/sites/xxxxxxxxxx", [ApiVersion = 15]),
#"Removed Other Columns1" = Table.SelectColumns(Source,{"Name", "Content"}),
#"Added Custom" = Table.AddColumn(#"Removed Other Columns1", "Date", each Date.FromText(Text.End(Text.BeforeDelimiter([Name], ".csv"),8)), type date),
#"Removed Errors" = Table.RemoveRowsWithErrors(#"Added Custom", {"Date"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Errors", each Text.StartsWith([Name], "ABC")),
#"Added Custom1" = Table.AddColumn(#"Filtered Rows", "EoM", each Date.EndOfMonth([Date]), type date),
#"Grouped Rows" = Table.Group(#"Added Custom1", {"EoM"}, {{"Alldata", each Table.Max(_, "Date"), type table [Name=text, Content=binary, Date=date, EoM=date]}}),
#"Expanded Alldata" = Table.ExpandRecordColumn(#"Grouped Rows", "Alldata", {"Name", "Content", "Date"}, {"Name", "Content", "Date"})
in
#"Expanded Alldata"
Result
Then, you can click on the Combine Files icon on Content column.
Best Regards,
Community Support Team _ Jing
Hi @Anonymous
@AlexisOlson 's solution is great. Have you tried that?
I'd just like to make some complement on his solution per your need. The complement are:
1. Add a step to filter out rows with errors after extracting date values. File names that don't end with (_YYYYMMDD.csv) have these errors.
2. Add a step to filter out rows that don't start with "ABC".
Here are the full codes.
let
Source = SharePoint.Files("https://xxxxxxxxxx.sharepoint.com/sites/xxxxxxxxxx", [ApiVersion = 15]),
#"Removed Other Columns1" = Table.SelectColumns(Source,{"Name", "Content"}),
#"Added Custom" = Table.AddColumn(#"Removed Other Columns1", "Date", each Date.FromText(Text.End(Text.BeforeDelimiter([Name], ".csv"),8)), type date),
#"Removed Errors" = Table.RemoveRowsWithErrors(#"Added Custom", {"Date"}),
#"Filtered Rows" = Table.SelectRows(#"Removed Errors", each Text.StartsWith([Name], "ABC")),
#"Added Custom1" = Table.AddColumn(#"Filtered Rows", "EoM", each Date.EndOfMonth([Date]), type date),
#"Grouped Rows" = Table.Group(#"Added Custom1", {"EoM"}, {{"Alldata", each Table.Max(_, "Date"), type table [Name=text, Content=binary, Date=date, EoM=date]}}),
#"Expanded Alldata" = Table.ExpandRecordColumn(#"Grouped Rows", "Alldata", {"Name", "Content", "Date"}, {"Name", "Content", "Date"})
in
#"Expanded Alldata"
Result
Then, you can click on the Combine Files icon on Content column.
Best Regards,
Community Support Team _ Jing
You can extract the date string and turn it into a date column like this:
= Table.AddColumn(Source, "Date", each
Date.FromText(Text.End(Text.BeforeDelimiter([Column1], ".csv"),8)),
type date)
Then define and end of month date:
= Table.AddColumn(#"Added Custom", "EoM", each Date.EndOfMonth([Date]), type date)
Group over this column taking the maximum [Date] for each group.
= Table.Group(#"Added Custom1", {"EoM"},
{{"AllRows", each Table.Max(_, "Date"),
type table [Column1=nullable text, Date=date, EoM=date]}})
Then expand the remaining rows.
Full example M code you can paste into the Advanced Editor:
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WijcyMDI0MDQ01UsuLlOK1YlWUoAJmcGFIALGhqgCRgYIgcR4qJAlRCgWAA==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t]),
#"Added Custom" = Table.AddColumn(Source, "Date", each Date.FromText(Text.End(Text.BeforeDelimiter([Column1], ".csv"),8)), type date),
#"Added Custom1" = Table.AddColumn(#"Added Custom", "EoM", each Date.EndOfMonth([Date]), type date),
#"Grouped Rows" = Table.Group(#"Added Custom1", {"EoM"}, {{"AllRows", each Table.Max(_, "Date"), type table [Column1=nullable text, Date=date, EoM=date]}}),
#"Expanded AllRows" = Table.ExpandRecordColumn(#"Grouped Rows", "AllRows", {"Column1"}, {"Column1"})
in
#"Expanded AllRows"
Join the community in Stockholm for expert Microsoft Fabric learning including a very exciting keynote from Arun Ulag, Corporate Vice President, Azure Data.
Check out the August 2024 Power BI update to learn about new features.