Hi @Frankee,
If you don’t mind a bit of coding, here’s a slightly different approach. Just copy the full code into a new blank query.
let
Source = Table.FromRows(Json.Document(Binary.Decompress(Binary.FromText("hZZrc5pAFIb/SoZ+rE1YYKHWT5rUiTMZc207HZsPRFHwAspFxV/ffTcaNwp7RsUF3j3n8D57gMHAeJj7cf7DaBidr89ie/p9bQyMu2To51ESQ/VSo/lz/wWnmSk/30zze43wOlks/bi86PuLADO25a5G2U2DLLxoRylkf4OsLmDqxzJSP6lRtHs3Ytge5jdBNhSjhzQQWzFvnIv/26RIETuLdjh8K3f6SS4SYnKvUxF1H5iZphhuVu+HOnfSALHx8DOPKiaGQaqorIOKOYrMEsO8JGW2GJYFKXPEsIhIGRfDKCFlrhguB9SFejqvqlbE/mTvuRNfa+bKZH5GpGfweTSmVLB5Er6rHpGVKb+9Bh6HUyWSfYhkMSUUPJ7OFBk/yGyuyODxbE7VBYvnLX1dmNP6V5im5VHIGPzebdV45iGgomqK4XZI1CYTDNdKLL4PxY8a7L6tqUjWOeOPs7+JZWABS7ygUoDKoqE10kLdl1eqh/zgoadcE5isfP11Y9LmbG2e+GyBRjCiSm9q3Hm57z7p/ZGLNKUawEZp+URRVS5uG6TKkAoGJMWUUgFJNCNTwtWEahRb3otalAr7g7NWYR+YzSNCG3D8nbpiKhDaTUVVm1d2YLalUjpMQ/rpl56znDyimtYBwDHVkA4ATt4oNA4IhrFqkXHaVA4ub6q2Z+WNyQG/2af+rHDbwbT5JVU9yLWuKJWurXpdvdnyRr7ZEik4yl99WkJn/nAACVRslf5wEEnXpAxEchIcB5RSD46DSEHdVzn2ew2yLiBJLgm8HEiWFDjX1IBjrq6HmKt70vwknjQuGPgbqjwgyAJKBQIj9fWvEpQLCPKN1Kh91riYNCmphCAQFmRCIJhG2oQy6ox8PfQwa74kmHsgssuoujx4v9U9Kl//Aw==", BinaryEncoding.Base64), Compression.Deflate)), let _t = ((type nullable text) meta [Serialized.Text = true]) in type table [Column1 = _t, Column2 = _t, Column3 = _t, Column4 = _t, Column5 = _t, Column6 = _t, Column7 = _t, Column8 = _t]),
KeepTopRows = Table.FirstN(Source, List.PositionOf( Source[Column1], "Crane:" )+1 ),
TransposeTable = Table.Transpose(KeepTopRows),
PromoteHeadersA = Table.PromoteHeaders(TransposeTable, [PromoteAllScalars=true]),
FinalTableA = Table.SelectRows(PromoteHeadersA, each not List.IsEmpty(List.RemoveMatchingItems(Record.FieldValues(_), {"", null}))),
RemoveTopRows = Table.RemoveFirstN( Source, List.PositionOf( Source[Column1], "Crane:" )+1 ),
PromoteHeadersB = Table.PromoteHeaders(RemoveTopRows, [PromoteAllScalars=true]),
AddIndex = Table.FillDown( Table.ReplaceValue( Table.AddIndexColumn(PromoteHeadersB, "Index", 0, 1, Int64.Type), each [Index], each try if Number.From( [AID] ) >0 then null else [Index] otherwise [Index], Replacer.ReplaceValue,{"Index"}), {"Index"} ),
TableAct = Table.RenameColumns( Table.RemoveColumns( Table.SelectRows( AddIndex, each try if Number.From( [AID] ) >0 then false else true otherwise true ), List.RemoveLastN( List.Skip( Table.ColumnNames(AddIndex), 1), 1)), { List.FirstN( Table.ColumnNames(AddIndex), 1){0}, "Act" }),
TableB = Table.SelectRows( AddIndex, each try if Number.From( [AID] ) >0 then true else false otherwise false ),
MergeTables = Table.NestedJoin(TableAct, {"Index"}, TableB, {"Index"}, "TableB", JoinKind.LeftOuter),
FinalTableB = Table.RemoveColumns( Table.ExpandTableColumn(MergeTables, "TableB", List.RemoveLastN( Table.ColumnNames(TableB), 1), List.RemoveLastN( Table.ColumnNames(TableB), 1)), {"Index"}),
CombineTables = Table.AddColumn(FinalTableA, "Temp", each FinalTableB),
ExpandTable = Table.ExpandTableColumn(CombineTables, "Temp", Table.ColumnNames( FinalTableB ), Table.ColumnNames( FinalTableB )),
FilterRows = Table.SelectRows(ExpandTable, each ([Craft] <> ""))
in
FilterRows
I hope this is helpful