Forum Discussion
Help required to separate the text
vineshparekh, try this. If there is still some issue, upload your pdf somewhere and provide me a download link please.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("1VlbT9swGP0rFs+u5ftlb1BWkFZYBZsmDfUhKgGq9YJC2e+fY6dt0lwaXG/SIiDYgu98t3P8JX14ODsfDYy8AQNwPs+esmSZAiPBzXq1eQH3m+x9tnnPkgUYvqSzX/aPHu5vPwEhxPQMnhGEsb3dfLu2P4G7FKZ+E2yvYmcKHdLFsAx0kbzNZ42mKSeI5nZG12VjTJWsa2goR3xnm+IvFesUQ4wxGA2PxWGEtzoalrEAcMZLO5zobSjjq8HXa2tmd09Wj/PVM7hKkwyM02fw9XeavSTvi4Y0UShFOUu7dREHMbRSDrsOrock+KAexY7Dmnjn9/fvZb9tWkj+r3a7UgQqKs4zpZDwBj/fDiZ31tDuvnqer1Iwel8swCTNntbZMlnNUnCXvm3WWbKZr1fWzv4rtzFRmlHO2pqAsD06o1DIXeYs6Hjiwf3dg4/t4i59XSSzdJmuNs3lJrkZ7ZdEQGYUkrFDau3r9pB6d9m+EeQUDIbrLEtnuSvgKVsvwWuazdePAJPBZTqzNKEMbNaA7Zf73gF/r0XjeHa0p3tpTO4LOHCmVrY+zlGJkfsFnLXJlIGSaiTI1r2Pi220zB1T5xAFzZ3LSWUOwZol1PZ6wayQiEDl+5iGbZ2c/BgOfl5iglm17LWK9/bDYMRq0R7oIhU7XSz86K1QTfIhpyEJq5elInUSYi6QoQdeRlK8Jpb18rqBVRWRFJAw29yi7LaDtOdgaJb/t+zmof6D7AYJlsqPOozM8elQWiR90rHShlU/JQQ3J2qdw6L9hsX80qXYepxKzjwhvoE6Bl8Hhw0yMu6IInTugPS57Jz6XM8oGn3uE6YlBeUGtSvI7RD3odzqjtK5awBAw67fDyaCDgonhAYx4guhhG6iX318ZFpuA4zXLAVfMJKqmzAcYsORMnHxJfaxO/RumePKDgw8uI8kaUGqixzHGqlTOsljcdxP5YiSp2lqAVccpJ2iQyD1696s98abOqRMQMKhsfFyEbc9FO9KZC9OxvOllSrtiQgUInNy1EFKa5oYcqhDBCrbr5qfEp/0QJwdJT3DdraRH3oqbTZdZzm1YybD4dlySET1nWQUL51OYQ+J1qAQiNJuoaZ2YmaI8MivXhw8Nf7Ny9HBRrHd24SY03pzBqqTgIJc8JJ+f/ykwF2V7Uu/kGMDBwUYcmJECbHH4YGb6FiXFGLFjkWexHnxVEOOvfnK96I3qyKN6HWFy/dyUp2gDKYOdZhiR1IpSkA9tNS0fUBBGcKyQne/EzeD1ClO/vFEw7OcRoRsNzQUlhCGRcZ378916+caglUdEu5xf/oH", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Description = _t, Utilisation = _t, Column4 = _t, Rate = _t, Amount = _t]),
SourceColNames = List.Buffer(Table.ColumnNames(Source)),
StepBack = Source,
TrimmedText = Table.TransformColumns(StepBack, List.Transform(SourceColNames, (colName)=> {colName, Text.Trim, type text})),
ReplacedValue = Table.ReplaceValue(TrimmedText, null, null,
(x,y,z)=> if List.Contains({"", "-"}, x) then null else x,
SourceColNames),
AddedIndex = Table.AddIndexColumn(ReplacedValue, "Index", 0, 1, Int64.Type),
Ad_GroupHelper = Table.AddColumn(AddedIndex, "GroupHelper", each if (try Text.Range([Description], 2, 1) otherwise null) = "-" then [Index] else null, type text),
FilledDown = Table.FillDown(Ad_GroupHelper,{"GroupHelper"}),
GroupedRows = Table.Group(FilledDown, {"GroupHelper"}, {{"Description", each Text.Combine([Description], " "), type text}, {"FirstRow", each Table.FirstN(Table.SelectColumns(Table.FillUp(_, SourceColNames), List.Skip(SourceColNames)), 1) , type table}}),
ExtractedTextBeforeDelimiter = Table.TransformColumns(GroupedRows, {{"Description", each
[ a = Text.PositionOf(_, "]", Occurrence.First) +1,
b = Text.Range(_, 0, if a > 0 then a else null )
][b], type text}}),
Ad_SN = Table.AddColumn(ExtractedTextBeforeDelimiter, "SN", each
[ a = Text.PositionOf([Description], "[SN") +1,
b = Text.PositionOf([Description], " ", Occurrence.Last),
c = Text.Range([Description], if a > 0 then a else if Text.Contains([Description], "]") then b else Text.Length([Description]))
][c], type text),
CleanDescription = Table.ReplaceValue(Ad_SN,
each [SN],
null,
(x,y,z)=> if y = "" then x else Text.TrimEnd(Text.Replace(x, y, ""), {"[", " ", "-"}),
{"Description"}),
CleanSN = Table.ReplaceValue(CleanDescription,
null,
null,
(x,y,z)=> if x = "" then null else Text.Replace(Text.Trim(x, {" ", "]"}), "SN: ", ""),
{"SN"}),
ReorderedColumns = Table.ReorderColumns(CleanSN,{"GroupHelper", "Description", "SN", "FirstRow"}),
ExpandedFirstRow = Table.ExpandTableColumn(ReorderedColumns, "FirstRow", {"Utilisation", "Column4", "Rate", "Amount"}, {"Utilisation", "Column4", "Rate", "Amount"}),
RemovedGroupHelper = Table.RemoveColumns(ExpandedFirstRow,{"GroupHelper"}),
ChangedType = Table.TransformColumnTypes(RemovedGroupHelper,{{"SN", type text}, {"Column4", type text}, {"Utilisation", Currency.Type}, {"Rate", Currency.Type}, {"Amount", Currency.Type}}, "en-US")
in
ChangedType
Thanks dufoq3
This step is pulling null in the "GroupHelper" column and because of that, description gets combined for all those lines. I have attached screenshot of those lines. Thanks!
Table.AddColumn(#"Filtered Rows", "GroupHelper", each if (try Text.Range([Description], 2, 1) otherwise null) = "-" then [Index] else null, type text)
- dufoq32 years agoCommunity Champion
I assumed that this behavior is ok. Could you provide correct result of such lines pls?
- vineshparekh2 years agoHelper I
Hi dufoq3
Thank you! I am sharing the actual data and the results with the queries.
Source Data: (Two Months)
Source.Name Description Column2 Utilisation Column4 Rate Amount Dec23-555.pdf LG-OH - LG-OH - Landing Gear Leg Overhaul - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 1.00 2652 2652 Dec23-555.pdf AF-192M - Airframe 192 Month Structural Check - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 1.00 610 610 Dec23-555.pdf AF-BC - Airframe Basic Check - [SN: 190555] - Correction from
period 01-Dec-2023 to 31-Dec-2023260.23 37 9628.51 Dec23-555.pdf AF-96M - Airframe 96 Month Structural Check - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 1.00 702 702 Dec23-555.pdf AF-20KC - Airframe 20,000 FC Structural Check - [SN: 190555] - 99.00 4.4 435.6 Dec23-555.pdf Correction from period 01-Dec-2023 to 31-Dec-2023 Dec23-555.pdf AP-OH - AP-OH - APU Overhaul - [SN: PWC-ZD0103] - Correction
from period 01-Dec-2023 to 31-Dec-202390.30 25 2257.5 Dec23-555.pdf - [SN: EN-LP - EN-LP - Engine LLP Replacement
P783246]Correction from period 01-Dec-2023 to 31-Dec-202399.00 162.08 16045.92 Dec23-555.pdf - [SN: EN-PR - EN-PR - Engine Full Performance Restoration
P783246] - Correction from period 01-Dec-2023 to 31-Dec-2023260.23 135 35131.05 Dec23-555.pdf - [SN: P783255] EN-LP - EN-LP - Engine LLP Replacement
Correction from period 01-Dec-2023 to 31-Dec-202399.00 162.08 16045.92 Dec23-555.pdf - [SN: EN-PR - EN-PR - Engine Full Performance Restoration
P783255] - Correction from period 01-Dec-2023 to 31-Dec-2023260.23 135 35131.05 Dec23-555.pdf Nov23-555.pdf LG-OH - LG-OH - Landing Gear Leg Overhaul - [SN: 190555] 1.00 MTH 2652 2652 Nov23-555.pdf AF-192M - Airframe 192 Month Structural Check - [SN: 190555] 1.00 MTH 610 610 Nov23-555.pdf AF-BC - Airframe Basic Check - [SN: 190555] 263.40 FH 37 9745.8 Nov23-555.pdf AF-96M - Airframe 96 Month Structural Check - [SN: 190555] 1.00 MTH 702 702 Nov23-555.pdf AF-20KC - Airframe 20,000 FC Structural Check - [SN: 190555] 102.00 FC 4.4 448.8 Nov23-555.pdf AP-OH - AP-OH - APU Overhaul - [SN: PWC-ZD0103] 96.60 APUH 25 2415 Nov23-555.pdf EN-LP - EN-LP - Engine LLP Replacement - [SN: P783246] 102.00 FC 162.08 16532.16 Nov23-555.pdf EN-PR - EN-PR - Engine Full Performance Restoration
P783246]- [SN: 263.40 FH 135 35559 Nov23-555.pdf EN-LP - EN-LP - Engine LLP Replacement - [SN: P783255] 102.00 FC 162.08 16532.16 Nov23-555.pdf EN-PR - EN-PR - Engine Full Performance Restoration
P783255]- [SN: 263.40 FH 135 35559 Nov23-555.pdf Query Steps applied:
let
Source = Excel.CurrentWorkbook(){[Name="Table1"]}[Content],
#"Filtered Rows1" = Table.SelectRows(Source, each ([Source.Name] = "Dec23-555.pdf" or [Source.Name] = "Nov23-555.pdf")),
#"Reordered Columns" = Table.ReorderColumns(#"Filtered Rows1",{"Description", "Source.Name", "Column2", "Utilisation", "Column4", "Rate", "Amount"}),
SourceColNames = List.Buffer(Table.ColumnNames(#"Reordered Columns")),
StepBack = #"Reordered Columns",
ReplacedValue = Table.ReplaceValue(StepBack, null, null,
(x,y,z)=> if List.Contains({"", "-"}, x) then null else x,
SourceColNames),
AddedIndex = Table.AddIndexColumn(ReplacedValue, "Index", 0, 1, Int64.Type),
Ad_GroupHelper = Table.AddColumn(AddedIndex, "GroupHelper", each if (try Text.Range([Description], 2, 1) otherwise null) = "-" then [Index] else null, type text),
#"Changed Type" = Table.TransformColumnTypes(Ad_GroupHelper,{{"GroupHelper", type number}}),
FilledDown = Table.FillDown(Ad_GroupHelper,{"GroupHelper"}),GroupedRows = Table.Group(FilledDown, {"GroupHelper"}, {{"Description", each Text.Combine([Description], "-"), type text}, {"FirstRow", each Table.FirstN(Table.SelectColumns(Table.FillUp(_, SourceColNames), List.Skip(SourceColNames)), 1) , type table}}),
#"Changed Type1" = Table.TransformColumnTypes(GroupedRows,{{"GroupHelper", type number}})
in
#"Changed Type1"Results:
GroupHelperDescription 0 LG-OH - LG-OH - Landing Gear Leg Overhaul - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 1 AF-192M - Airframe 192 Month Structural Check - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 2 AF-BC - Airframe Basic Check - [SN: 190555] - Correction from
period 01-Dec-2023 to 31-Dec-20233 AF-96M - Airframe 96 Month Structural Check - [SN: 190555] -Correction from period 01-Dec-2023 to 31-Dec-2023 4 AF-20KC - Airframe 20,000 FC Structural Check - [SN: 190555] --Correction from period 01-Dec-2023 to 31-Dec-2023 6 AP-OH - AP-OH - APU Overhaul - [SN: PWC-ZD0103] - Correction
from period 01-Dec-2023 to 31-Dec-2023-- [SN: EN-LP - EN-LP - Engine LLP Replacement
P783246]Correction from period 01-Dec-2023 to 31-Dec-2023-- [SN: EN-PR - EN-PR - Engine Full Performance Restoration
P783246] - Correction from period 01-Dec-2023 to 31-Dec-2023-- [SN: P783255] EN-LP - EN-LP - Engine LLP Replacement
Correction from period 01-Dec-2023 to 31-Dec-2023-- [SN: EN-PR - EN-PR - Engine Full Performance Restoration
P783255] - Correction from period 01-Dec-2023 to 31-Dec-202312 LG-OH - LG-OH - Landing Gear Leg Overhaul 13 AF-192M - Airframe 192 Month Structural Check - [SN: 190555] 14 AF-BC - Airframe Basic Check - [SN: 190555] 15 AF-96M - Airframe 96 Month Structural Check - [SN: 190555] 16 AF-20KC - Airframe 20,000 FC Structural Check - [SN: 190555] 17 AP-OH - AP-OH - APU Overhaul 18 EN-LP - EN-LP - Engine LLP Replacement 19 EN-PR - EN-PR - Engine Full Performance Restoration
P783246]20 EN-LP - EN-LP - Engine LLP Replacement 21 EN-PR - EN-PR - Engine Full Performance Restoration
P783255]