Forum Discussion
Removing errors from list (not column) - in Power Query 'M'
- 9 years ago
Here are two further ideas using List.Positions to index the original list, but I don't think they are necessarily any more elegant and not sure performance-wise:
= List.RemoveNulls( List.Transform( List.Positions( ListWithError ), each try ListWithError{_} otherwise null ) )= List.Accumulate( List.Positions( ListWithError ), {}, (CleanListSoFar, CurrentPosition) => CleanListSoFar &
(if
(try ListWithError{CurrentPosition})[HasError] then {} else {ListWithError{CurrentPosition}} ) )
Hi Maxim,
I think, you have to protect your data before you get errors. I mean, when you get data from some source, don't apply ChangeType or Date.From without (try..otherwise) statement (e.g. try Date.From("this is not a date") otherwise -1).
I spent sometime on the problem, but as List.RemoveErrors is not available, couldn't find workaround using other functions.
BR,
Ivan
Hi Ivan!
Thanks for advise.
Unfortunately, source of error could be any (for example, error like =NA() taken from Excel table). As I cannot control user input, cannot filter errors out of list directly and there are no List.RemoveErrors ::smileyfrustrated:, the only way I see now is to use this code as function or as raw code:
(ListWithErrors as list)=> let
CleanList = Table.RemoveRowsWithErrors(Table.FromColumns({ListWithErrors}))[Column1]
in
CleanList
it is the shortest way i found, but still curious does it has best performance when operating with relatively large lists.
- OwenAuger9 years agoSuper User
Here are two further ideas using List.Positions to index the original list, but I don't think they are necessarily any more elegant and not sure performance-wise:
= List.RemoveNulls( List.Transform( List.Positions( ListWithError ), each try ListWithError{_} otherwise null ) )= List.Accumulate( List.Positions( ListWithError ), {}, (CleanListSoFar, CurrentPosition) => CleanListSoFar &
(if
(try ListWithError{CurrentPosition})[HasError] then {} else {ListWithError{CurrentPosition}} ) )- hohlick9 years agoContinued Contributor
Hello OwenAuger!
Thanks a lot!
Your solutions looks very interesting.
Personally I'll take second solution for my purposes, as it is more universal (for example, whether I need remove errors only but not nulls).
But first solution is also very interesting because we can replace errors with other values (not nulls), and after some face-lifting this could be a very useful function like List.ReplaceErrors:
(ListWithError as list, optional Replacement as any) as list => let Source = List.Transform(List.Positions(ListWithError), each try ListWithError{_} otherwise Replacement) in SourceThanks again for the idea!