@Hedimmer I've come up with a slightly different approach to get what you're after.
For this example, I've got the following list including keywords to cater for the RPM Production Validity, etc.

And a folder called Reports in my Documents library.

The full flow is below. I'll go into each of the actions.

When a file is created waits for a new file to be created within the Reports folder.

Get items returns all the items in the Reports List.

Select uses the output from Get items to build up an array of objects. If the file name contains an item, the Value will be set to true, otherwise it will be false. The expressions used are below. Note that we also convert the filename and keyword(s) to uppercase so we can effectively ignore the case.
//Title
item()?['Title']
//ID
item()?['ID']
//Value
contains(toUpper(triggerOutputs()?['body/{Name}']), toUpper(item()?['Keywords']))

Filter array removes any items that don't have a Value of true, so we should be left with just a single item if there was a match. The expression used is:
item()?['Value']

Condition checks to see if there is a single item in the Filter array which indicates that we got a single match. The expression used is:
length(body('Filter_array'))

If the Condition is true, we go into the Yes branch and use Update item to update our list. The expressions for the Id and Title are:
//Id
first(body('Filter_array'))?['ID']
//Title
first(body('Filter_array'))?['Title']

However (optionally), if Condition was false, we go into the No branch and Send an email informing us that a new Report was uploaded but didn't match any of the criteria.
