Forum Discussion
Separating data from rows into columns for each source txt file
- 1 year ago
I was able to figure it out:
let
Source = Folder.Files("C:\Users\joerf\Downloads\Test TXT"),
#"Filtered Hidden Files1" = Table.SelectRows(Source, each [Attributes]?[Hidden]? <> true),
#"Invoke Custom Function1" = Table.AddColumn(#"Filtered Hidden Files1", "Transform File (2)", each #"Transform File (2)"([Content])),
#"Renamed Columns1" = Table.RenameColumns(#"Invoke Custom Function1", {"Name", "Source.Name"}),
#"Removed Other Columns1" = Table.SelectColumns(#"Renamed Columns1", {"Source.Name", "Transform File (2)"}),
#"Expanded Table Column1" = Table.ExpandTableColumn(#"Removed Other Columns1", "Transform File (2)", Table.ColumnNames(#"Transform File (2)"(#"Sample File (2)"))),
#"Changed Type" = Table.TransformColumnTypes(#"Expanded Table Column1",{{"Source.Name", type text}, {"Column1", type text}, {"Column2", type text}}),
#"Filtered Rows" = Table.SelectRows(#"Changed Type", each Text.StartsWith([Column1], "BPR") or Text.StartsWith([Column1], "TRN") or Text.StartsWith([Column1], "N1*PR")),
#"Removed Columns" = Table.RemoveColumns(#"Filtered Rows",{"Column2"}),
#"Inserted First Characters" = Table.AddColumn(#"Removed Columns", "First Characters", each Text.Start([Column1], 4), type text),
#"Reordered Columns" = Table.ReorderColumns(#"Inserted First Characters",{"Source.Name", "First Characters", "Column1"}),
#"Added Index" = Table.AddIndexColumn(#"Reordered Columns", "Index", 1, 1, Int64.Type),
#"Added Custom" = Table.AddColumn( #"Added Index","rank",each Table.RowCount( Table.SelectRows(#"Added Index",(x)=>x[Source.Name]=[Source.Name] and x[First Characters]=[First Characters] and x[Index]<=[Index]))),
#"Grouped Rows" = Table.Group(#"Added Custom", {"Source.Name", "rank"}, {{"Count", each Text.Combine([Column1],","), type text}}),
#"Removed Columns1" = Table.RemoveColumns(#"Grouped Rows",{"rank"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns1", "Count", Splitter.SplitTextByDelimiter("~", QuoteStyle.None), {"Count.1", "Count.2", "Count.3", "Count.4"}),
#"Changed Type1" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Count.1", type text}, {"Count.2", type text}}),
#"Filtered Rows1" = Table.SelectRows(#"Changed Type1", each Text.StartsWith([Count.1], "BPR*I")),
#"Reordered Columns1" = Table.ReorderColumns(#"Filtered Rows1",{"Source.Name", "Count.2", "Count.3", "Count.1", "Count.4"}),
#"Renamed Columns" = Table.RenameColumns(#"Reordered Columns1",{{"Count.1", "Bank Transaction"}}),
#"Reordered Columns2" = Table.ReorderColumns(#"Renamed Columns",{"Source.Name", "Count.3", "Count.2", "Bank Transaction", "Count.4"}),
#"Renamed Columns2" = Table.RenameColumns(#"Reordered Columns2",{{"Count.3", "Insurance"}, {"Count.2", "Transaction"}}),
#"Removed Columns2" = Table.RemoveColumns(#"Renamed Columns2",{"Count.4"}),
#"Replaced Value" = Table.ReplaceValue(#"Removed Columns2","BPR*I*","",Replacer.ReplaceText,{"Bank Transaction"}),
#"Split Column by Delimiter1" = Table.SplitColumn(#"Replaced Value", "Bank Transaction", Splitter.SplitTextByDelimiter("*C*", QuoteStyle.None), {"Bank Transaction.1", "Bank Transaction.2"}),
#"Changed Type2" = Table.TransformColumnTypes(#"Split Column by Delimiter1",{{"Insurance", type text}, {"Bank Transaction.1", type number}, {"Bank Transaction.2", type text}}),
#"Replaced Value1" = Table.ReplaceValue(#"Changed Type2",",TRN*1*","",Replacer.ReplaceText,{"Transaction"}),
#"Replaced Value2" = Table.ReplaceValue(#"Replaced Value1",",N1*PR*","",Replacer.ReplaceText,{"Insurance"}),
#"Reordered Columns3" = Table.ReorderColumns(#"Replaced Value2",{"Source.Name", "Bank Transaction.2", "Transaction", "Insurance", "Bank Transaction.1"}),
#"Renamed Columns3" = Table.RenameColumns(#"Reordered Columns3",{{"Bank Transaction.1", "Bank Transaction Amount"}}),
#"Changed Type3" = Table.TransformColumnTypes(#"Renamed Columns3",{{"Bank Transaction Amount", Currency.Type}}),
#"Split Column by Position" = Table.SplitColumn(#"Changed Type3", "Bank Transaction.2", Splitter.SplitTextByPositions({0, 8}, true), {"Bank Transaction.2.1", "Bank Transaction.2.2"}),
#"Changed Type4" = Table.TransformColumnTypes(#"Split Column by Position",{{"Bank Transaction.2.1", type text}, {"Bank Transaction.2.2", type date}}),
#"Reordered Columns4" = Table.ReorderColumns(#"Changed Type4",{"Source.Name", "Bank Transaction.2.1", "Transaction", "Insurance", "Bank Transaction.2.2", "Bank Transaction Amount"}),
#"Renamed Columns4" = Table.RenameColumns(#"Reordered Columns4",{{"Bank Transaction.2.2", "Transaction Date"}, {"Bank Transaction.2.1", "Bank Transaction Type"}}),
#"Split Column by Delimiter2" = Table.SplitColumn(#"Renamed Columns4", "Transaction", Splitter.SplitTextByDelimiter("*", QuoteStyle.Csv), {"Transaction.1", "Transaction.2"}),
#"Changed Type5" = Table.TransformColumnTypes(#"Split Column by Delimiter2",{{"Transaction.1", type text}, {"Transaction.2", Int64.Type}}),
#"Renamed Columns5" = Table.RenameColumns(#"Changed Type5",{{"Transaction.1", "TRN*1*"}}),
#"Sorted Rows" = Table.Sort(#"Renamed Columns5",{{"Transaction Date", Order.Descending}})
in
#"Sorted Rows"
Here is a workaround for you . You can try to do this in PQ
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("i45WMjIxNDA01SupKFHSUQoJ8tMy1DIyqVOK1UGTcgnx1TIyAAkZGWGR9jPUCgjScg1zDUKSNEIxNtwYixTCWENTLNJgYy1C/TxDXF0QsuZo5hrUYcohGYxNGuJeiMFYpKEmG+E3GSUkzLGFRCwA", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Source.Name = _t, Column1 = _t]),
#"Inserted Text Range" = Table.AddColumn(Source, "Text Range", each Text.Middle([Column1], 0, 4), type text),
#"Added Index" = Table.AddIndexColumn(#"Inserted Text Range", "Index", 1, 1, Int64.Type),
Custom1 = Table.AddColumn( #"Added Index","rank",each Table.RowCount( Table.SelectRows(#"Added Index",(x)=>x[Source.Name]=[Source.Name] and x[Text Range]=[Text Range] and x[Index]<=[Index]))),
#"Grouped Rows" = Table.Group(Custom1, {"Source.Name", "rank"}, {{"Count", each Text.Combine([Column1],","), type text}}),
#"Removed Columns" = Table.RemoveColumns(#"Grouped Rows",{"rank"}),
#"Split Column by Delimiter" = Table.SplitColumn(#"Removed Columns", "Count", Splitter.SplitTextByDelimiter(",", QuoteStyle.Csv), {"Count.1", "Count.2", "Count.3"}),
#"Changed Type" = Table.TransformColumnTypes(#"Split Column by Delimiter",{{"Source.Name", type text}, {"Count.1", type text}, {"Count.2", type text}, {"Count.3", type text}}),
#"Renamed Columns" = Table.RenameColumns(#"Changed Type",{{"Count.1", "TRN*"}, {"Count.2", "DTM*"}, {"Count.3", "N1*P"}})
in
#"Renamed Columns"
pls see the attachment below
I am having trouble inserting the code into the Advanced Editor. Could you provide a step by step? Especially with #"Added Index" = Table.AddIndexColumn(#"Inserted Text Range", "Index", 1, 1, Int64.Type),
Custom1 = Table.AddColumn( #"Added Index","rank",each Table.RowCount( Table.SelectRows(#"Added Index",(x)=>x[Source.Name]=[Source.Name] and x[Text Range]=[Text Range] and x[Index]<=[Index]))),
#"Grouped Rows" = Table.Group(Custom1, {"Source.Name", "rank"}, {{"Count", each Text.Combine([Column1],","), type text}}),
- ryan_mayu1 year ago
Super User
The steps are already recorded in PQ, you can check the applied steps
- joerfleming1 year agoFrequent Visitor
I am having trouble repeating the "Custom1" step. I am able to group all the text into one cell based on the Source.Name. I am having trouble adding new row with the same Source.Name and organize the data into TRN, DTM, and N1*PR columns.