I would like to compare a Sharepoint list (around 700 items) with an Excel table and delete any items that do not appear in the Excel table. I attempted this by running a 'Get a Row' for every Sharepoint item, but the Get a Row fails when the row is not found. I know that at this point I could continue with a parallel branch that have different 'Configure Run After' settings, but I'd rather the flow didn't fail if possible.
My other attempt is using List All Rows Present In a Table:
The problem with this is obviously how slow it is....around 20 seconds per item... Over 3 hours! I want to follow this up with deleting all rows in the table so I'm looking at one very long flow.
Is there a smarter way of doing this that I'm not seeing?
Thanks for your help!
What is the error message you get when the action fails?
Try changing your IF condition to:
Hi @Jcook, thank you for your reply. Sorry I guess I wasn't very clear. Using 'Get a Row' fails when a row is not found. The pictured alternative above works, but it is painfully slow to run, around 20 seconds per item.
Yes it would be very slow, since for each Sharepoint item you are Listing all the rows in the excel.
Its hard to troubleshoot without seeing your full flow, and not knowing the error you are getting?
If its just slow, try placing your excel action outside the loop, if this is not possible try changing the concurrency on the loop.
This can be done by clicking the 3 dots on the loop action, and clicking settings,
Than enable concurrency, and set to 50.
Thanks for the tip about concurrency, @Jcook, I'll check that out
In terms of putting the Excel action outside of the loop, do you think there could be any benefit to performance if I was to place all table rows into an array variable and then filtered that array variable by each SharePoint list item in the Apply To All?
Yes, you could list rows in excel than have a loop that appends the information you want to that array/string variable. (Use append)
This would increase performance drastically.
The reason its taking so long right now is that it literally has to list rows in excel for every item in SharePoint.
Thanks @Jcook .
Am I on the right track here? I'm not sure what expression I would use in the Filter Array to compare each Application ID in the Sharepoint list to the Application ID in the array variable :
to improve the performance .... and you can try configuring concurent control in "apply to each" to enable parallel opeartions performed. Go to "apply to each" -> Click on three ellipses (...) -> Settings -> Enable Concurrency and drag it to 50.
Thanks @krishnags, I will do this with the new flow.
I'm on attempt 3, which I think is a bit more aligned with what you were suggesting, @Jcook? Only problem is that every line is being picked up by the 'No' path in the condition. Is there a way I can limit the comparison to just the 'Application ID' columns of each the Excel table and the Sharepoint list?
Sorry, I realized you are passing the append array the full body of the excel.
You will want to have a second loop that loops through excel and appends each row to the array. Right now you are passing in the whole excel in the variable at one time.
For each loop, pass in the value from excel.
Inside loop append only the Item Name or the identifier which is going to be checked against SharePoint.
Now you will be able to use Contains.
If you need additional help, please send me a sample from excel and I can build a POC.
Three Super User rank tiers have been launched!
Features releasing from October 2020 through March 2021
We are excited to announce the launch of Power Virtual Agents Community. Check it out now!
We've updated and improved the layout and uploading format of the Power Automate Cookbook!
Fill out a quick form to claim your user group badge now!