let // Helper function fnUriUnescapeString = //Source: https://stackoverflow.com/questions/36242695/how-to-decodeuricomponent-ex-2f3f263d (data as text) as text => let ToList = List.Buffer(Text.ToList(data)), Accumulate = List.Accumulate( ToList, [Bytes = {}], (state, current) => let HexString = state[HexString]?, NextHexString = HexString & current, NextState = if HexString <> null then if Text.Length(NextHexString) = 2 then [ Bytes = state[Bytes] & Binary.ToList(Binary.FromText(NextHexString, BinaryEncoding.Hex)) ] else [HexString = NextHexString, Bytes = state[Bytes]] else if current = "%" then [HexString = "", Bytes = state[Bytes]] else [Bytes = state[Bytes] & {Character.ToNumber(current)}] in NextState ), FromBinary = Text.FromBinary(Binary.FromList(Accumulate[Bytes])) in FromBinary, StaticRoot = SharePoint.Contents(#"SharePoint", [ApiVersion = 15]), ExtractRoot = fnUriUnescapeString(Text.BeforeDelimiter(#"SourceFolder", "/", 4)), NonRootFolders = fnUriUnescapeString(Text.AfterDelimiter(#"SourceFolder", ExtractRoot)), SubfoldersList = List.Buffer(List.Select(Text.Split(NonRootFolders, "/"), each _ <> null and _ <> "")), GetRootContent = StaticRoot, NavigateIn = Table.Buffer(List.Accumulate( SubfoldersList, GetRootContent, (state, current) => state{[Name = current]}[Content] )), ListGenerate = List.Generate( () => [ SelectFurtherExpansion = Table.RemoveColumns( Table.SelectRows( Table.AddColumn( NavigateIn, "ExpandFurther.1", each Type.Is(Value.Type([Content]), type table) ), each ([ExpandFurther.1] = true) ), {"Extension"} ), Result = Table.ExpandTableColumn( SelectFurtherExpansion, "Content", {"Content", "Name", "Extension"}, {"Content", "Name.1", "Extension"} ), Counter = 1, NextIteration = true ], each [NextIteration], each [ SelectFurtherExpansion = Table.SelectRows( Table.AddColumn( [Result], "ExpandFurther." & Text.From([Counter] + 1), each Type.Is(Value.Type([Content]), type table) ), (x) => (Record.Field(x, "ExpandFurther." & Text.From([Counter] + 1)) = true) ), RemoveExtension = Table.RemoveColumns(SelectFurtherExpansion, {"Extension"}), Result = Table.ExpandTableColumn( RemoveExtension, "Content", {"Content", "Name", "Extension"}, {"Content", "Name." & Text.From([Counter] + 1), "Extension"} ), Counter = [Counter] + 1, NextIteration = try Table.RowCount([Result]) > 0 otherwise false ], each [Result] ), Combine = Table.Combine(ListGenerate), FilesInRoot = Table.SelectRows(NavigateIn, each Type.Is(Value.Type([Content]), type binary)), FullResults = FilesInRoot & Combine, #"Filtered Rows" = Table.SelectRows( FullResults, each ([Extension] <> "" and [Extension] <> null) ), AddNameFields = Table.AddColumn( #"Filtered Rows", "NameFields", each List.Select( Record.FieldValues( Record.SelectFields( _, List.Select(Record.FieldNames(_), (x) => Text.Contains(x, "Name")) ) ), (y) => y <> null ) ), AddFileName = Table.AddColumn(AddNameFields, "FileName", each List.Last([NameFields])), AddSubFolder = Table.AddColumn( AddFileName, "SubFolder", each Text.Combine(List.RemoveLastN([NameFields], 1), ".") ), #"Renamed Columns" = Table.RenameColumns(AddSubFolder,{{"FileName", "Report"}, {"Name", "Workspace"}, {"Name.1", "Dataset"}}), #"Replaced Value" = Table.ReplaceValue(#"Renamed Columns",".pbix","",Replacer.ReplaceText,{"Report"}), #"Trimmed Text" = Table.TransformColumns(#"Replaced Value",{{"Report", Text.Trim, type text}}) in #"Trimmed Text"